From 90868b87dca780034d38220254830a050e24906a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E6=9E=97=E5=88=98?= Date: Sat, 6 Jul 2024 17:53:43 +0800 Subject: [PATCH 001/553] Update upgrade_openssh9.8p1.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增多核同时编译选项 --- upgrade_openssh9.8p1.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/upgrade_openssh9.8p1.sh b/upgrade_openssh9.8p1.sh index 2cc0b307c..cd83c270d 100644 --- a/upgrade_openssh9.8p1.sh +++ b/upgrade_openssh9.8p1.sh @@ -13,6 +13,10 @@ else exit 1 fi +# 询问用户是否需要多线程编译 +echo "请输入同时编译的核心数量:" +read multi_thread_compile + # 等待并检查锁文件 wait_for_lock() { while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do @@ -57,7 +61,7 @@ install_openssh() { tar -xzf openssh-${OPENSSH_VERSION}.tar.gz cd openssh-${OPENSSH_VERSION} ./configure - make + make -j$multi_thread_compile make install } From 92f56e47250a3fdd92f1f8d4eeec0388e1e0b685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E6=9E=97=E5=88=98?= Date: Sat, 6 Jul 2024 20:35:55 +0800 Subject: [PATCH 002/553] Update upgrade_openssh9.8p1.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 已更改为自动检测核心数量 --- upgrade_openssh9.8p1.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/upgrade_openssh9.8p1.sh b/upgrade_openssh9.8p1.sh index cd83c270d..4e703dd1f 100644 --- a/upgrade_openssh9.8p1.sh +++ b/upgrade_openssh9.8p1.sh @@ -13,10 +13,6 @@ else exit 1 fi -# 询问用户是否需要多线程编译 -echo "请输入同时编译的核心数量:" -read multi_thread_compile - # 等待并检查锁文件 wait_for_lock() { while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do @@ -61,13 +57,13 @@ install_openssh() { tar -xzf openssh-${OPENSSH_VERSION}.tar.gz cd openssh-${OPENSSH_VERSION} ./configure - make -j$multi_thread_compile + make -j$(nproc) make install } # 重启SSH服务 restart_ssh() { - case $OS in + case $OS 在 ubuntu|debian) systemctl restart ssh ;; From 62227c875c427c868734b8b8c2d971b5fdb98e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E6=9E=97=E5=88=98?= Date: Sun, 7 Jul 2024 07:22:08 +0800 Subject: [PATCH 003/553] Update upgrade_openssh9.8p1.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复无法正常运作的Bug --- upgrade_openssh9.8p1.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upgrade_openssh9.8p1.sh b/upgrade_openssh9.8p1.sh index 4e703dd1f..f53bb0d5e 100644 --- a/upgrade_openssh9.8p1.sh +++ b/upgrade_openssh9.8p1.sh @@ -57,7 +57,7 @@ install_openssh() { tar -xzf openssh-${OPENSSH_VERSION}.tar.gz cd openssh-${OPENSSH_VERSION} ./configure - make -j$(nproc) + make -j${nproc} make install } From 2d89878098f6f04e53e784354a899684e38883c0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 10 Aug 2025 05:10:32 +0000 Subject: [PATCH 004/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-10=2005:10:32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 335 +++++++++++++++++++++++++++++++++++++++---------- jp/kejilion.sh | 329 ++++++++++++++++++++++++++++++++++++++---------- kr/kejilion.sh | 327 ++++++++++++++++++++++++++++++++++++++--------- tw/kejilion.sh | 317 +++++++++++++++++++++++++++++++++++++--------- 4 files changed, 1060 insertions(+), 248 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 4648ca502..8522d0a2c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.3" +sh_v="4.0.5" gl_hui='\e[37m' @@ -1185,7 +1185,7 @@ iptables_panel() { 5) # IP whitelist - read -e -p "Please enter the IP or IP segment to release:" o_ip + read -e -p "Please enter the IP or IP segment to be released:" o_ip allow_ip $o_ip ;; 6) @@ -1556,7 +1556,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -1738,7 +1738,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to the mode parameter + # Decide to turn on or off WAF according to mode parameters if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -2371,18 +2371,25 @@ web_optimization() { +check_docker_app() { + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + check_docker="${gl_lv}已安装${gl_bai}" + else + check_docker="${gl_hui}未安装${gl_bai}" + fi +} -check_docker_app() { +# 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 +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# check_docker="${gl_lv}${gl_bai} installed" +# else +# check_docker="${gl_hui}${gl_bai} is not installed" +# fi -} +# } check_docker_app_ip() { @@ -2720,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2751,6 +2758,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "$docker_nameInstalled" @@ -2764,6 +2773,9 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "$docker_nameInstalled" check_docker_app_ip @@ -2777,6 +2789,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -2817,7 +2831,6 @@ done - docker_app_plus() { send_stats "$app_name" while true; do @@ -2827,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2857,13 +2870,20 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 2) docker_app_update + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + ;; 5) echo "${docker_name}Domain access settings" @@ -3538,15 +3558,21 @@ while true; do install wget iptables_open panel_app_install + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}Install" ;; 2) panel_app_manage + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}control" ;; 3) panel_app_uninstall + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt send_stats "${panelname}uninstall" ;; *) @@ -3875,6 +3901,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "The FRP server has been installed" ;; 2) @@ -3883,6 +3911,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "The FRP server has been updated" ;; 3) @@ -3892,7 +3922,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" ;; 5) @@ -3916,7 +3947,7 @@ frps_panel() { 8) send_stats "Block IP access" - echo "If you have accessed the anti-generation domain name, you can use this function to block IP+ port access, which is more secure." + echo "If you have accessed the anti-generation domain name, use this function to block IP+ port access, which is more secure." read -e -p "Please enter the port you need to block:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -3966,6 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "The FRP client has been installed" ;; 2) @@ -3974,6 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "The FRP client has been updated" ;; @@ -3983,6 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" ;; @@ -4052,18 +4089,24 @@ yt_menu_pro() { 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 + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "The installation is complete. Press any key to continue..." read ;; 2) send_stats "Update yt-dlp..." echo "Update yt-dlp..." sudo yt-dlp -U + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "Update completed. Press any key to continue..." read ;; 3) send_stats "Uninstalling yt-dlp..." echo "Uninstalling yt-dlp..." sudo rm -f /usr/local/bin/yt-dlp + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "Uninstall is complete. Press any key to continue..." read ;; 5) @@ -4944,7 +4987,7 @@ elrepo_install() { fi # Print detected operating system information echo "Operating system detected:$os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm @@ -8411,58 +8454,75 @@ linux_ldnmp() { linux_panel() { + + + + while true; do clear - # send_stats "App Market" echo -e "Application Market" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Official version of Baota Panel${gl_kjlan}2. ${gl_bai}aaPanel International Edition" - echo -e "${gl_kjlan}3. ${gl_bai}1Panel new generation management panel${gl_kjlan}4. ${gl_bai}NginxProxyManager Visual Panel" - echo -e "${gl_kjlan}5. ${gl_bai}OpenList multi-store file list program${gl_kjlan}6. ${gl_bai}Ubuntu Remote Desktop Web Edition" - echo -e "${gl_kjlan}7. ${gl_bai}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${gl_bai}QB Offline BT Magnetic Download Panel" - echo -e "${gl_kjlan}9. ${gl_bai}Poste.io mail server program${gl_kjlan}10. ${gl_bai}RocketChat multiplayer online chat system" + + local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") + + # Set the color with loop + for i in {1..100}; do + if echo "$app_numbers" | grep -q "^$i$"; then + declare "color$i=${gl_lv}" + else + declare "color$i=${gl_bai}" + fi + done + + echo -e "${gl_kjlan}1. ${color1}Official version of Baota Panel${gl_kjlan}2. ${color2}aaPanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager Visual Panel" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB Offline BT Magnetic Download Panel" + echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multiplayer online chat system" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}11. ${color11}Zendao project management software${gl_kjlan}12. ${color12}Qinglong Panel Timed Task Management Platform" + echo -e "${gl_kjlan}13. ${color13}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}Simple picture bed picture management program" + echo -e "${gl_kjlan}15. ${color15}emby multimedia management system${gl_kjlan}16. ${color16}Speedtest speed test panel" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome Adware${gl_kjlan}18. ${color18}onlyoffice online office OFFICE" + echo -e "${gl_kjlan}19. ${color19}Thunder Pool WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}Zendao project management software${gl_kjlan}12. ${gl_bai}Qinglong Panel Timed Task Management Platform" - echo -e "${gl_kjlan}13. ${gl_bai}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${gl_bai}Simple picture bed picture management program" - echo -e "${gl_kjlan}15. ${gl_bai}emby multimedia management system${gl_kjlan}16. ${gl_bai}Speedtest speed test panel" - echo -e "${gl_kjlan}17. ${gl_bai}AdGuardHome Adware${gl_kjlan}18. ${gl_bai}onlyoffice online office OFFICE" - echo -e "${gl_kjlan}19. ${gl_bai}Thunder Pool WAF firewall panel${gl_kjlan}20. ${gl_bai}portainer container management panel" + echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" + echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop Remote Desktop Web Edition${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed Speed Test Tool" + echo -e "${gl_kjlan}29. ${color29}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}VScode web version${gl_kjlan}22. ${gl_bai}UptimeKuma monitoring tool" - echo -e "${gl_kjlan}23. ${gl_bai}Memos web page memo${gl_kjlan}24. ${gl_bai}Webtop Remote Desktop Web Edition${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${gl_bai}Nextcloud network disk${gl_kjlan}26. ${gl_bai}QD-Today timing task management framework" - echo -e "${gl_kjlan}27. ${gl_bai}Dockge Container Stack Management Panel${gl_kjlan}28. ${gl_bai}LibreSpeed Speed Test Tool" - echo -e "${gl_kjlan}29. ${gl_bai}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}PhotoPrism Private Album System" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF tool collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel Navigation Panel${gl_kjlan}34. ${color34}Pingvin-Share file sharing platform" + echo -e "${gl_kjlan}35. ${color35}Minimalist circle of friends${gl_kjlan}36. ${color36}LobeChatAI Chat Aggregation Website" + echo -e "${gl_kjlan}37. ${color37}MyIP Toolbox${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist family bucket" + echo -e "${gl_kjlan}39. ${color39}Bililive live broadcast recording tool${gl_kjlan}40. ${color40}webssh web version SSH connection tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${gl_bai}StirlingPDF tool collection${gl_kjlan}32. ${gl_bai}drawio free online charting software${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${gl_bai}Sun-Panel Navigation Panel${gl_kjlan}34. ${gl_bai}Pingvin-Share file sharing platform" - echo -e "${gl_kjlan}35. ${gl_bai}Minimalist circle of friends${gl_kjlan}36. ${gl_bai}LobeChatAI Chat Aggregation Website" - echo -e "${gl_kjlan}37. ${gl_bai}MyIP Toolbox${gl_huang}★${gl_bai} ${gl_kjlan}38. ${gl_bai}Xiaoya alist family bucket" - echo -e "${gl_kjlan}39. ${gl_bai}Bililive live broadcast recording tool${gl_kjlan}40. ${gl_bai}webssh web version SSH connection tool" + echo -e "${gl_kjlan}41. ${color41}Mouse Management Panel${gl_kjlan}42. ${color42}Nexte remote connection tool" + echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk Remote Desk (Relay)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub Acceleration Station${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}Prometheus Monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}Mouse Management Panel${gl_kjlan}42. ${gl_bai}Nexte remote connection tool" - echo -e "${gl_kjlan}43. ${gl_bai}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${gl_bai}RustDesk Remote Desk (Relay)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${gl_bai}Docker acceleration station${gl_kjlan}46. ${gl_bai}GitHub Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${gl_bai}Prometheus Monitoring${gl_kjlan}48. ${gl_bai}Prometheus (host monitoring)" - echo -e "${gl_kjlan}49. ${gl_bai}Prometheus (Container Monitoring)${gl_kjlan}50. ${gl_bai}Replenishment monitoring tool" + echo -e "${gl_kjlan}51. ${color51}PVE Chicken Panel${gl_kjlan}52. ${color52}DPanel Container Management Panel" + echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" + echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI Big Model Asset Management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${gl_bai}PVE Chicken Panel${gl_kjlan}52. ${gl_bai}DPanel Container Management Panel" - echo -e "${gl_kjlan}53. ${gl_bai}llama3 chat AI model${gl_kjlan}54. ${gl_bai}AMH Host Website Building Management Panel" - echo -e "${gl_kjlan}55. ${gl_bai}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${gl_bai}FRP intranet penetration (client)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${gl_bai}Deepseek chat AI big model${gl_kjlan}58. ${gl_bai}Dify big model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${gl_bai}NewAPI big model asset management${gl_kjlan}60. ${gl_bai}JumpServer open source bastion machine" + echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" + echo -e "${gl_kjlan}65. ${color65}n8n Automation Workflow Platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" + echo -e "${gl_kjlan}67. ${color67}ddns-go Dynamic DNS Management Tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL Certificate Management Platform" + echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot Chat Robot Framework" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${gl_bai}Online translation server${gl_kjlan}62. ${gl_bai}RAGFlow big model knowledge base" - echo -e "${gl_kjlan}63. ${gl_bai}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${gl_bai}it-tools toolbox" - echo -e "${gl_kjlan}65. ${gl_bai}n8n Automation Workflow Platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${gl_bai}yt-dlp video download tool" - echo -e "${gl_kjlan}67. ${gl_bai}ddns-go Dynamic DNS Management Tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${gl_bai}AllinSSL Certificate Management Platform" - echo -e "${gl_kjlan}69. ${gl_bai}SFTPGo file transfer tool${gl_kjlan}70. ${gl_bai}AstrBot Chat Robot Framework" + echo -e "${gl_kjlan}71. ${color71}Navidrome Private Music Server${gl_kjlan}72. ${color72}bitwarden Password Manager${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV Private Film and Television${gl_kjlan}74. ${color74}MoonTV Private Movie" + echo -e "${gl_kjlan}75. ${color75}Melody Music Elf${gl_kjlan}76. ${color76}Online DOS old games" + echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki Intelligent Document Management System" + echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${gl_bai}Navidrome Private Music Server${gl_kjlan}72. ${gl_bai}bitwarden Password Manager${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${gl_bai}LibreTV Private Film and Television${gl_kjlan}74. ${gl_bai}MoonTV Private Movie" - echo -e "${gl_kjlan}75. ${gl_bai}Melody Music Elf${gl_kjlan}76. ${gl_bai}Online DOS old games" - echo -e "${gl_kjlan}77. ${gl_bai}Thunder offline download tool${gl_kjlan}78. ${gl_bai}PandaWiki Intelligent Document Management System" - echo -e "${gl_kjlan}79. ${gl_bai}Beszel server monitoring" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8652,7 +8712,7 @@ linux_panel() { echo -e "Nezha Monitoring$check_docker $update_status" echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8742,7 +8802,7 @@ linux_panel() { fi echo "" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "Access address:" echo "https://$yuming" @@ -8788,6 +8848,9 @@ linux_panel() { --restart=always \ -d analogic/poste.io + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "poste.io has been installed" echo "------------------------" @@ -8809,6 +8872,10 @@ linux_panel() { -h "$yuming" \ --restart=always \ -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "poste.io has been installed" echo "------------------------" @@ -8821,6 +8888,8 @@ linux_panel() { docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" ;; @@ -9119,7 +9188,7 @@ linux_panel() { echo -e "Thunder Pool Service$check_docker" echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9136,6 +9205,8 @@ linux_panel() { install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "The Thunder Pool WAF panel has been installed" check_docker_app_ip @@ -9147,6 +9218,8 @@ linux_panel() { 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "Thunder Pool WAF panel has been updated" check_docker_app_ip @@ -9157,6 +9230,8 @@ linux_panel() { 4) cd /data/safeline docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" echo "docker compose down && docker compose down --rmi all" ;; @@ -10623,6 +10698,127 @@ linux_panel() { ;; + 80) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden-linkwarden-1" + local docker_port="8080" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + + # Download the official docker-compose and env files + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + + # Generate random keys and passwords + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) + + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + + # Add administrator account information + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + # Start the container + docker compose up -d + + clear + echo "Installed" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # Keep the original variable + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "The app has been uninstalled" + } + + docker_app_plus + + ;; + + + + 81) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" + + docker_app_install() { + + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d + + } + + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "The app has been uninstalled" + } + + docker_app_plus + + ;; + + + + 0) kejilion ;; @@ -10844,9 +11040,9 @@ linux_Settings() { echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host analysis${gl_kjlan}22. ${gl_bai}SSH Defense Program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities (Xiuyuan)" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tool${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}File Manager" echo -e "${gl_kjlan}------------------------" @@ -10854,6 +11050,7 @@ linux_Settings() { echo -e "${gl_kjlan}33. ${gl_bai}Set up a system recycling bin${gl_kjlan}34. ${gl_bai}System backup and recovery" echo -e "${gl_kjlan}35. ${gl_bai}ssh remote connection tool${gl_kjlan}36. ${gl_bai}Hard disk partition management tool" echo -e "${gl_kjlan}37. ${gl_bai}Command line history${gl_kjlan}38. ${gl_bai}rsync remote synchronization tool" + echo -e "${gl_kjlan}39. ${gl_bai}Command Favorites${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system optimization${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and Security" @@ -10874,7 +11071,7 @@ 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 "Shortcut keys are set" + echo "Shortcut keys have been set" send_stats "Script shortcut keys have been set" break_end linux_Settings @@ -11538,7 +11735,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -11853,6 +12050,12 @@ EOF ;; + 39) + clear + send_stats "Command line history" + bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + ;; + 41) clear send_stats "Message board" @@ -12664,7 +12867,7 @@ echo "Install load balancing k loadbalance |k load balancing" echo "Firewall panel k fhq |k firewall" echo "Open port k dkdk 8080 |k Open port 8080" echo "Close port k gbdk 7800 |k Close port 7800" -echo "放行IP k fxip 127.0.0.0/8 |k 放行IP 127.0.0.0/8" +echo "Release IP k fxip 127.0.0.0/8 |k Release IP 127.0.0.0/8" echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 89c7f4814..023c6369d 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.3" +sh_v="4.0.5" gl_hui='\e[37m' @@ -1556,7 +1556,7 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1738,7 +1738,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることにしました + # モードパラメーターに従って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 @@ -2371,18 +2371,25 @@ web_optimization() { +check_docker_app() { + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + check_docker="${gl_lv}已安装${gl_bai}" + else + check_docker="${gl_hui}未安装${gl_bai}" + fi +} -check_docker_app() { +# 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 +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# check_docker = "$ {gl_lv} $ {gl_bai}インストール" +# else +# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" +# fi -} +# } check_docker_app_ip() { @@ -2720,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2751,6 +2758,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "$docker_nameインストール" @@ -2764,6 +2773,9 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "$docker_nameインストール" check_docker_app_ip @@ -2777,6 +2789,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" send_stats "アンインストール$docker_name" ;; @@ -2817,7 +2831,6 @@ done - docker_app_plus() { send_stats "$app_name" while true; do @@ -2827,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2857,13 +2870,20 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 2) docker_app_update + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + ;; 5) echo "${docker_name}ドメインアクセス設定" @@ -3538,15 +3558,21 @@ while true; do install wget iptables_open panel_app_install + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}インストール" ;; 2) panel_app_manage + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}コントロール" ;; 3) panel_app_uninstall + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt send_stats "${panelname}アンインストール" ;; *) @@ -3875,6 +3901,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRPサーバーがインストールされています" ;; 2) @@ -3883,6 +3911,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRPサーバーが更新されました" ;; 3) @@ -3892,7 +3922,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" ;; 5) @@ -3916,7 +3947,7 @@ frps_panel() { 8) send_stats "IPアクセスをブロックします" - echo "アンチジェネレーションドメイン名にアクセスした場合、この関数を使用して、より安全なIP+ポートアクセスをブロックできます。" + echo "アンチジェネレーションドメイン名にアクセスした場合は、この関数を使用して、より安全なIP+ポートアクセスをブロックします。" read -e -p "ブロックする必要があるポートを入力してください。" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -3966,6 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRPクライアントがインストールされています" ;; 2) @@ -3974,6 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRPクライアントが更新されました" ;; @@ -3983,6 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" ;; @@ -4052,18 +4089,24 @@ yt_menu_pro() { 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 + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "インストールが完了しました。任意のキーを押して続行します..." read ;; 2) send_stats "yt-dlpを更新..." echo "yt-dlpを更新..." sudo yt-dlp -U + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) send_stats "yt-dlpのアンインストール..." echo "yt-dlpのアンインストール..." sudo rm -f /usr/local/bin/yt-dlp + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "アンインストールが完了しました。任意のキーを押して続行します..." read ;; 5) @@ -5183,7 +5226,7 @@ optimize_high_performance() { echo -e "${gl_lv}その他の最適化...${gl_bai}" # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -8411,58 +8454,75 @@ linux_ldnmp() { linux_panel() { + + + + while true; do clear - # send_stats「アプリマーケット」 echo -e "アプリケーション市場" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Baotaパネルの公式バージョン${gl_kjlan}2. ${gl_bai}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${gl_bai}1パネルの新世代管理パネル${gl_kjlan}4. ${gl_bai}nginxproxymanagerビジュアルパネル" - echo -e "${gl_kjlan}5. ${gl_bai}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${gl_bai}UbuntuリモートデスクトップWebエディション" - 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マルチプレイヤーオンラインチャットシステム" + + local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") + + # ループで色を設定します + for i in {1..100}; do + if echo "$app_numbers" | grep -q "^$i$"; then + declare "color$i=${gl_lv}" + else + declare "color$i=${gl_bai}" + fi + done + + echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" + echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" + echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" + echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" + echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" + echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" + echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" 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 Multimedia Management System${gl_kjlan}16. ${gl_bai}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${gl_bai}AdGuardhomeアドウェア${gl_kjlan}18. ${gl_bai}唯一のオフィスオンラインオフィスオフィス" - echo -e "${gl_kjlan}19. ${gl_bai}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${gl_bai}Portainerコンテナ管理パネル" + echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" + echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" + echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}vscode webバージョン${gl_kjlan}22. ${gl_bai}UptimeKuma監視ツール" - echo -e "${gl_kjlan}23. ${gl_bai}メモWebページメモ${gl_kjlan}24. ${gl_bai}webtopリモートデスクトップWebエディション${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 Container Stack Managementパネル${gl_kjlan}28. ${gl_bai}librespeed速度テストツール" - echo -e "${gl_kjlan}29. ${gl_bai}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}フォトプリズムプライベートアルバムシステム" + echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" + echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" + echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" 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チャット集約Webサイト" - echo -e "${gl_kjlan}37. ${gl_bai}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${gl_bai}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${gl_bai}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${gl_bai}WebSH WebバージョンSSH接続ツール" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" + echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" + echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" 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}Docker加速ステーション${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}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" + echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" 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チャットAIモデル${gl_kjlan}54. ${gl_bai}AMHホストWebサイトビルディングマネジメントパネル" - 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チャットaiビッグモデル${gl_kjlan}58. ${gl_bai}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${gl_bai}Newapi Big Model Asset Management${gl_kjlan}60. ${gl_bai}Jumpserverオープンソースバス剤マシン" + echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" + echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" + echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" + echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" + echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${gl_bai}オンライン翻訳サーバー${gl_kjlan}62. ${gl_bai}Ragflow Big Model Knowledge Base" - echo -e "${gl_kjlan}63. ${gl_bai}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${gl_bai}IT-Toolsツールボックス" - 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管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${gl_bai}AllinsSL証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${gl_bai}SFTPGOファイル転送ツール${gl_kjlan}70. ${gl_bai}アストロボットチャットロボットフレームワーク" + echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" + echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" + echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" + echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${gl_bai}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${gl_bai}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${gl_bai}libretvプライベート映画とテレビ${gl_kjlan}74. ${gl_bai}MOONTVプライベート映画" - echo -e "${gl_kjlan}75. ${gl_bai}メロディーミュージックエルフ${gl_kjlan}76. ${gl_bai}オンラインDOS古いゲーム" - echo -e "${gl_kjlan}77. ${gl_bai}サンダーオフラインダウンロードツール${gl_kjlan}78. ${gl_bai}Pandawikiインテリジェントドキュメント管理システム" - echo -e "${gl_kjlan}79. ${gl_bai}Beszelサーバーの監視" + echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8652,7 +8712,7 @@ linux_panel() { echo -e "Nezhaの監視$check_docker $update_status" echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8742,7 +8802,7 @@ linux_panel() { fi echo "" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "アクセスアドレス:" echo "https://$yuming" @@ -8788,6 +8848,9 @@ linux_panel() { --restart=always \ -d analogic/poste.io + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "Poste.ioがインストールされています" echo "------------------------" @@ -8809,6 +8872,10 @@ linux_panel() { -h "$yuming" \ --restart=always \ -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "Poste.ioがインストールされています" echo "------------------------" @@ -8821,6 +8888,8 @@ linux_panel() { docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" ;; @@ -9119,7 +9188,7 @@ linux_panel() { echo -e "サンダープールサービス$check_docker" echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9136,6 +9205,8 @@ linux_panel() { install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "サンダープールWAFパネルがインストールされています" check_docker_app_ip @@ -9147,6 +9218,8 @@ linux_panel() { 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "サンダープールWAFパネルが更新されました" check_docker_app_ip @@ -9157,6 +9230,8 @@ linux_panel() { 4) cd /data/safeline docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" echo "docker compose down && docker compose down --rmi all" ;; @@ -10623,6 +10698,127 @@ linux_panel() { ;; + 80) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden-linkwarden-1" + local docker_port="8080" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + + # 公式のDocker-ComposeおよびEnvファイルをダウンロードします + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + + # ランダムキーとパスワードを生成します + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) + + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + + # 管理者アカウント情報を追加します + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + # コンテナを起動します + docker compose up -d + + clear + echo "インストール" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 元の変数を保持します + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "アプリはアンインストールされています" + } + + docker_app_plus + + ;; + + + + 81) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" + + docker_app_install() { + + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d + + } + + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "アプリはアンインストールされています" + } + + docker_app_plus + + ;; + + + + 0) kejilion ;; @@ -10844,9 +11040,9 @@ linux_Settings() { 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}opensshの高リスクの脆弱性(xiuyuan)を修正" + echo -e "${gl_kjlan}25. ${gl_bai}TGボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}ウイルススキャンツール${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}ファイルマネージャー" echo -e "${gl_kjlan}------------------------" @@ -10854,6 +11050,7 @@ linux_Settings() { 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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" 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}プライバシーとセキュリティ" @@ -11219,7 +11416,7 @@ EOF ;; 4) read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudoアクセス許可を削除します + # sudoersファイルからユーザーのsudo許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; @@ -11853,6 +12050,12 @@ EOF ;; + 39) + clear + send_stats "コマンドラインの履歴" + bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + ;; + 41) clear send_stats "メッセージボード" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 528d0abca..b30d886f0 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.3" +sh_v="4.0.5" gl_hui='\e[37m' @@ -1185,7 +1185,7 @@ iptables_panel() { 5) # IP 화이트리스트 - read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip + read -e -p "해제 할 IP 또는 IP 세그먼트를 입력하십시오." o_ip allow_ip $o_ip ;; 6) @@ -1556,7 +1556,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -2371,18 +2371,25 @@ web_optimization() { +check_docker_app() { + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + check_docker="${gl_lv}已安装${gl_bai}" + else + check_docker="${gl_hui}未安装${gl_bai}" + fi +} -check_docker_app() { +# 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 +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# check_docker = "$ {gl_lv} $ {gl_bai} 설치" +# else +# check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" +# fi -} +# } check_docker_app_ip() { @@ -2720,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2751,6 +2758,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "$docker_name설치" @@ -2764,6 +2773,9 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "$docker_name설치" check_docker_app_ip @@ -2777,6 +2789,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" send_stats "제거하십시오$docker_name" ;; @@ -2817,7 +2831,6 @@ done - docker_app_plus() { send_stats "$app_name" while true; do @@ -2827,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2857,13 +2870,20 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 2) docker_app_update + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + ;; 5) echo "${docker_name}도메인 액세스 설정" @@ -3538,15 +3558,21 @@ while true; do install wget iptables_open panel_app_install + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}설치하다" ;; 2) panel_app_manage + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}제어" ;; 3) panel_app_uninstall + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt send_stats "${panelname}제거하십시오" ;; *) @@ -3875,6 +3901,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP 서버가 설치되었습니다" ;; 2) @@ -3883,6 +3911,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP 서버가 업데이트되었습니다" ;; 3) @@ -3892,7 +3922,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" ;; 5) @@ -3916,7 +3947,7 @@ frps_panel() { 8) send_stats "IP 액세스를 차단하십시오" - echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단할 수 있습니다." + echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단하십시오." read -e -p "차단 해야하는 포트를 입력하십시오." frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -3966,6 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP 클라이언트가 설치되었습니다" ;; 2) @@ -3974,6 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP 클라이언트가 업데이트되었습니다" ;; @@ -3983,6 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" ;; @@ -4052,18 +4089,24 @@ yt_menu_pro() { 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 + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 2) send_stats "yt-dlp 업데이트 ..." echo "yt-dlp 업데이트 ..." sudo yt-dlp -U + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 3) send_stats "yt-dlp 제거 ..." echo "yt-dlp 제거 ..." sudo rm -f /usr/local/bin/yt-dlp + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 5) @@ -8411,58 +8454,75 @@ linux_ldnmp() { linux_panel() { + + + + while true; do clear - # Send_stats "앱 시장" echo -e "응용 프로그램 시장" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Baota 패널의 공식 버전${gl_kjlan}2. ${gl_bai}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${gl_bai}1 파넬 신세대 관리 패널${gl_kjlan}4. ${gl_bai}nginxproxymanager 시각적 패널" - echo -e "${gl_kjlan}5. ${gl_bai}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${gl_bai}우분투 원격 데스크탑 웹 에디션" - echo -e "${gl_kjlan}7. ${gl_bai}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${gl_bai}QB 오프라인 BT 자기 다운로드 패널" - echo -e "${gl_kjlan}9. ${gl_bai}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${gl_bai}Rocketchat 멀티 플레이어 온라인 채팅 시스템" + + local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") + + # 루프로 색상을 설정하십시오 + for i in {1..100}; do + if echo "$app_numbers" | grep -q "^$i$"; then + declare "color$i=${gl_lv}" + else + declare "color$i=${gl_bai}" + fi + done + + echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1 파넬 신세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" + echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}우분투 원격 데스크탑 웹 에디션" + echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" + echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}Rocketchat 멀티 플레이어 온라인 채팅 시스템" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}11. ${color11}Zendao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" + echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" + echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" + echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" + echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" 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 Online Office Office" - echo -e "${gl_kjlan}19. ${gl_bai}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${gl_bai}Portainer 컨테이너 관리 패널" + echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" + echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" + echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" + echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" 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 원격 데스크탑 웹 에디션${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}도크 컨테이너 스택 관리 패널${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}31. ${color31}Stirlingpdf 도구 컬렉션${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" + echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" + echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" + echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}Websh 웹 버전 SSH 연결 도구" 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}Xiaoya Alist 가족 버킷" - echo -e "${gl_kjlan}39. ${gl_bai}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${gl_bai}Websh 웹 버전 SSH 연결 도구" + echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" + echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdesk 원격 책상 (릴레이)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" 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 Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${gl_bai}프로 메테우스 모니터링${gl_kjlan}48. ${gl_bai}프로 메테우스 (호스트 모니터링)" - echo -e "${gl_kjlan}49. ${gl_bai}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${gl_bai}보충 모니터링 도구" + echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" + echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹 사이트 빌딩 관리 패널" + echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}점프 서버 오픈 소스 요새 기계" 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 채팅 AI 모델${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 채팅 AI 큰 모델${gl_kjlan}58. ${gl_bai}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${gl_bai}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${gl_bai}점프 서버 오픈 소스 요새 기계" + echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" + echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" + echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" + echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" + echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${gl_bai}온라인 번역 서버${gl_kjlan}62. ${gl_bai}래그 플로 큰 모델 지식 기반" - echo -e "${gl_kjlan}63. ${gl_bai}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${gl_bai}it-tools 도구 상자" - 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 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${gl_bai}AllInsSL 인증서 관리 플랫폼" - echo -e "${gl_kjlan}69. ${gl_bai}sftpgo 파일 전송 도구${gl_kjlan}70. ${gl_bai}Astrbot 채팅 로봇 프레임 워크" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" + echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" + echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" + echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${gl_bai}Navidrome 개인 음악 서버${gl_kjlan}72. ${gl_bai}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${gl_bai}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${gl_bai}Moontv 개인 영화" - echo -e "${gl_kjlan}75. ${gl_bai}멜로디 음악 엘프${gl_kjlan}76. ${gl_bai}온라인 dos 오래된 게임" - echo -e "${gl_kjlan}77. ${gl_bai}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${gl_bai}Pandawiki 지능형 문서 관리 시스템" - echo -e "${gl_kjlan}79. ${gl_bai}Beszel 서버 모니터링" + echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8652,7 +8712,7 @@ linux_panel() { echo -e "Nezha 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8742,7 +8802,7 @@ linux_panel() { fi echo "" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "액세스 주소 :" echo "https://$yuming" @@ -8788,6 +8848,9 @@ linux_panel() { --restart=always \ -d analogic/poste.io + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "Poste.io가 설치되었습니다" echo "------------------------" @@ -8809,6 +8872,10 @@ linux_panel() { -h "$yuming" \ --restart=always \ -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "Poste.io가 설치되었습니다" echo "------------------------" @@ -8821,6 +8888,8 @@ linux_panel() { docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" ;; @@ -9119,7 +9188,7 @@ linux_panel() { echo -e "썬더 풀 서비스$check_docker" echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9136,6 +9205,8 @@ linux_panel() { install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "Thunder Pool WAF 패널이 설치되었습니다" check_docker_app_ip @@ -9147,6 +9218,8 @@ linux_panel() { 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "Thunder Pool WAF 패널이 업데이트되었습니다" check_docker_app_ip @@ -9157,6 +9230,8 @@ linux_panel() { 4) cd /data/safeline docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." echo "docker compose down && docker compose down --rmi all" ;; @@ -10623,6 +10698,127 @@ linux_panel() { ;; + 80) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden-linkwarden-1" + local docker_port="8080" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + + # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + + # 임의의 키와 암호를 생성합니다 + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) + + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + + # 관리자 계정 정보를 추가하십시오 + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + # 컨테이너를 시작하십시오 + docker compose up -d + + clear + echo "설치" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 원래 변수를 유지하십시오 + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "앱이 제거되었습니다" + } + + docker_app_plus + + ;; + + + + 81) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" + + docker_app_install() { + + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d + + } + + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "앱이 제거되었습니다" + } + + docker_app_plus + + ;; + + + + 0) kejilion ;; @@ -10844,9 +11040,9 @@ linux_Settings() { 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}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}25. ${gl_bai}TG-BOT 시스템 모니터링 및 조기 경고${gl_kjlan}26. ${gl_bai}OpenSsh 고위험 취약점을 수정하십시오" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}바이러스 스캐닝 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" echo -e "${gl_kjlan}------------------------" @@ -10854,6 +11050,7 @@ linux_Settings() { 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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" 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}개인 정보 및 보안" @@ -10874,7 +11071,7 @@ 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 "바로 가기 키가 설정되어 있습니다" + echo "바로 가기 키가 설정되었습니다" send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings @@ -11853,6 +12050,12 @@ EOF ;; + 39) + clear + send_stats "명령 줄 기록" + bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + ;; + 41) clear send_stats "게시판" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 6d28b8d24..f112e919e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.3" +sh_v="4.0.5" gl_hui='\e[37m' @@ -2371,18 +2371,25 @@ web_optimization() { +check_docker_app() { + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + check_docker="${gl_lv}已安装${gl_bai}" + else + check_docker="${gl_hui}未安装${gl_bai}" + fi +} -check_docker_app() { +# 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 +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# check_docker="${gl_lv}已安裝${gl_bai}" +# else +# check_docker="${gl_hui}未安裝${gl_bai}" +# fi -} +# } check_docker_app_ip() { @@ -2720,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2751,6 +2758,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "$docker_name已經安裝完成" @@ -2764,6 +2773,9 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "$docker_name已經安裝完成" check_docker_app_ip @@ -2777,6 +2789,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "應用已卸載" send_stats "解除安裝$docker_name" ;; @@ -2817,7 +2831,6 @@ done - docker_app_plus() { send_stats "$app_name" while true; do @@ -2827,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2857,13 +2870,20 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 2) docker_app_update + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + ;; 5) echo "${docker_name}域名訪問設置" @@ -3538,15 +3558,21 @@ while true; do install wget iptables_open panel_app_install + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}安裝" ;; 2) panel_app_manage + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt send_stats "${panelname}控制" ;; 3) panel_app_uninstall + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt send_stats "${panelname}解除安裝" ;; *) @@ -3875,6 +3901,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP服務端已經安裝完成" ;; 2) @@ -3883,6 +3911,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP服務端已經更新完成" ;; 3) @@ -3892,7 +3922,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "應用已卸載" ;; 5) @@ -3966,6 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP客戶端已經安裝完成" ;; 2) @@ -3974,6 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "FRP客戶端已經更新完成" ;; @@ -3983,6 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "應用已卸載" ;; @@ -4052,18 +4089,24 @@ yt_menu_pro() { 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 + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "安裝完成。按任意鍵繼續..." read ;; 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." sudo yt-dlp -U + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "更新完成。按任意鍵繼續..." read ;; 3) send_stats "正在卸載 yt-dlp..." echo "正在卸載 yt-dlp..." sudo rm -f /usr/local/bin/yt-dlp + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "卸載完成。按任意鍵繼續..." read ;; 5) @@ -8411,58 +8454,75 @@ linux_ldnmp() { 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}1Panel新一代管理面板${gl_kjlan}4. ${gl_bai}NginxProxyManager可視化面板" - echo -e "${gl_kjlan}5. ${gl_bai}OpenList多存儲文件列表程序${gl_kjlan}6. ${gl_bai}Ubuntu遠程桌面網頁版" - echo -e "${gl_kjlan}7. ${gl_bai}哪吒探針VPS監控面板${gl_kjlan}8. ${gl_bai}QB離線BT磁力下載面板" - echo -e "${gl_kjlan}9. ${gl_bai}Poste.io郵件服務器程序${gl_kjlan}10. ${gl_bai}RocketChat多人在線聊天系統" + + local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") + + # 用循環設置顏色 + for i in {1..100}; do + if echo "$app_numbers" | grep -q "^$i$"; then + declare "color$i=${gl_lv}" + else + declare "color$i=${gl_bai}" + fi + done + + echo -e "${gl_kjlan}1. ${color1}寶塔面板官方版${gl_kjlan}2. ${color2}aaPanel寶塔國際版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板${gl_kjlan}4. ${color4}NginxProxyManager可視化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存儲文件列表程序${gl_kjlan}6. ${color6}Ubuntu遠程桌面網頁版" + echo -e "${gl_kjlan}7. ${color7}哪吒探針VPS監控面板${gl_kjlan}8. ${color8}QB離線BT磁力下載面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io郵件服務器程序${gl_kjlan}10. ${color10}RocketChat多人在線聊天系統" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}11. ${color11}禪道項目管理軟件${gl_kjlan}12. ${color12}青龍面板定時任務管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve網盤${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}簡單圖床圖片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒體管理系統${gl_kjlan}16. ${color16}Speedtest測速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去廣告軟件${gl_kjlan}18. ${color18}onlyoffice在線辦公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火牆面板${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}禪道項目管理軟件${gl_kjlan}12. ${gl_bai}青龍面板定時任務管理平台" - 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}Speedtest測速面板" - echo -e "${gl_kjlan}17. ${gl_bai}AdGuardHome去廣告軟件${gl_kjlan}18. ${gl_bai}onlyoffice在線辦公OFFICE" - echo -e "${gl_kjlan}19. ${gl_bai}雷池WAF防火牆面板${gl_kjlan}20. ${gl_bai}portainer容器管理面板" + echo -e "${gl_kjlan}21. ${color21}VScode網頁版${gl_kjlan}22. ${color22}UptimeKuma監控工具" + echo -e "${gl_kjlan}23. ${color23}Memos網頁備忘錄${gl_kjlan}24. ${color24}Webtop遠程桌面網頁版${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud網盤${gl_kjlan}26. ${color26}QD-Today定時任務管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆棧管理面板${gl_kjlan}28. ${color28}LibreSpeed測速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相冊系統" 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}Memos網頁備忘錄${gl_kjlan}24. ${gl_bai}Webtop遠程桌面網頁版${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}31. ${color31}StirlingPDF工具大全${gl_kjlan}32. ${color32}drawio免費的在線圖表軟件${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel導航面板${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}極簡朋友圈${gl_kjlan}36. ${color36}LobeChatAI聊天聚合網站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播錄製工具${gl_kjlan}40. ${color40}webssh網頁版SSH連接工具" 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}Sun-Panel導航面板${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}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${gl_bai}Bililive直播錄製工具${gl_kjlan}40. ${gl_bai}webssh網頁版SSH連接工具" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板${gl_kjlan}42. ${color42}Nexterm遠程連接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk遠程桌面(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk遠程桌面(中繼端)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站${gl_kjlan}46. ${color46}GitHub加速站${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普羅米修斯監控${gl_kjlan}48. ${color48}普羅米修斯(主機監控)" + echo -e "${gl_kjlan}49. ${color49}普羅米修斯(容器監控)${gl_kjlan}50. ${color50}補貨監控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}耗子管理面板${gl_kjlan}42. ${gl_bai}Nexterm遠程連接工具" - 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}Docker加速站${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}51. ${color51}PVE開小雞面板${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型${gl_kjlan}54. ${color54}AMH主機建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP內網穿透(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP內網穿透(客戶端)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型${gl_kjlan}58. ${color58}Dify大模型知識庫${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型資產管理${gl_kjlan}60. ${color60}JumpServer開源堡壘機" 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聊天AI大模型${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聊天AI大模型${gl_kjlan}58. ${gl_bai}Dify大模型知識庫${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${gl_bai}NewAPI大模型資產管理${gl_kjlan}60. ${gl_bai}JumpServer開源堡壘機" + echo -e "${gl_kjlan}61. ${color61}在線翻譯服務器${gl_kjlan}62. ${color62}RAGFlow大模型知識庫" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自託管AI平台${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自動化工作流平台${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp視頻下載工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go動態DNS管理工具${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL證書管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件傳輸工具${gl_kjlan}70. ${color70}AstrBot聊天機器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${gl_bai}在線翻譯服務器${gl_kjlan}62. ${gl_bai}RAGFlow大模型知識庫" - echo -e "${gl_kjlan}63. ${gl_bai}OpenWebUI自託管AI平台${gl_huang}★${gl_bai} ${gl_kjlan}64. ${gl_bai}it-tools工具箱" - 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管理工具${gl_huang}★${gl_bai} ${gl_kjlan}68. ${gl_bai}AllinSSL證書管理平台" - echo -e "${gl_kjlan}69. ${gl_bai}SFTPGo文件傳輸工具${gl_kjlan}70. ${gl_bai}AstrBot聊天機器人框架" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音樂服務器${gl_kjlan}72. ${color72}bitwarden密碼管理器${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影視${gl_kjlan}74. ${color74}MoonTV私有影視" + echo -e "${gl_kjlan}75. ${color75}Melody音樂精靈${gl_kjlan}76. ${color76}在線DOS老遊戲" + echo -e "${gl_kjlan}77. ${color77}迅雷離線下載工具${gl_kjlan}78. ${color78}PandaWiki智能文檔管理系統" + echo -e "${gl_kjlan}79. ${color79}Beszel服務器監控${gl_kjlan}80. ${color80}linkwarden書籤管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${gl_bai}Navidrome私有音樂服務器${gl_kjlan}72. ${gl_bai}bitwarden密碼管理器${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${gl_bai}LibreTV私有影視${gl_kjlan}74. ${gl_bai}MoonTV私有影視" - echo -e "${gl_kjlan}75. ${gl_bai}Melody音樂精靈${gl_kjlan}76. ${gl_bai}在線DOS老遊戲" - echo -e "${gl_kjlan}77. ${gl_bai}迅雷離線下載工具${gl_kjlan}78. ${gl_bai}PandaWiki智能文檔管理系統" - echo -e "${gl_kjlan}79. ${gl_bai}Beszel服務器監控" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet視頻會議" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8652,7 +8712,7 @@ linux_panel() { echo -e "哪吒監控$check_docker $update_status" echo "開源、輕量、易用的服務器監控與運維工具" echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8742,7 +8802,7 @@ linux_panel() { fi echo "" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "訪問地址:" echo "https://$yuming" @@ -8788,6 +8848,9 @@ linux_panel() { --restart=always \ -d analogic/poste.io + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "poste.io已經安裝完成" echo "------------------------" @@ -8809,6 +8872,10 @@ linux_panel() { -h "$yuming" \ --restart=always \ -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear echo "poste.io已經安裝完成" echo "------------------------" @@ -8821,6 +8888,8 @@ linux_panel() { docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "應用已卸載" ;; @@ -9119,7 +9188,7 @@ linux_panel() { echo -e "雷池服務$check_docker" echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker inspect "$docker_name" &>/dev/null; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9136,6 +9205,8 @@ linux_panel() { install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "雷池WAF面板已經安裝完成" check_docker_app_ip @@ -9147,6 +9218,8 @@ linux_panel() { 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear echo "雷池WAF面板已經更新完成" check_docker_app_ip @@ -9157,6 +9230,8 @@ linux_panel() { 4) cd /data/safeline docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "如果你是默認安裝目錄那現在項目已經卸載。如果你是自定義安裝目錄你需要到安裝目錄下自行執行:" echo "docker compose down && docker compose down --rmi all" ;; @@ -10623,6 +10698,127 @@ linux_panel() { ;; + 80) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden-linkwarden-1" + local docker_port="8080" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + + # 下載官方 docker-compose 和 env 文件 + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + + # 生成隨機密鑰與密碼 + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) + + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + + # 追加管理員賬號信息 + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + # 啟動容器 + docker compose up -d + + clear + echo "已經安裝完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 保留原本的變量 + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + 81) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" + + docker_app_install() { + + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d + + } + + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + 0) kejilion ;; @@ -10846,7 +11042,7 @@ linux_Settings() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}本機host解析${gl_kjlan}22. ${gl_bai}SSH防禦程序" echo -e "${gl_kjlan}23. ${gl_bai}限流自動關機${gl_kjlan}24. ${gl_bai}ROOT私鑰登錄模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系統監控預警${gl_kjlan}26. ${gl_bai}修復OpenSSH高危漏洞(岫源)" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系統監控預警${gl_kjlan}26. ${gl_bai}修復OpenSSH高危漏洞" echo -e "${gl_kjlan}27. ${gl_bai}紅帽系Linux內核升級${gl_kjlan}28. ${gl_bai}Linux系統內核參數優化${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}病毒掃描工具${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" echo -e "${gl_kjlan}------------------------" @@ -10854,6 +11050,7 @@ linux_Settings() { 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}39. ${gl_bai}命令收藏夾${gl_huang}★${gl_bai}" 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}隱私與安全" @@ -11853,6 +12050,12 @@ EOF ;; + 39) + clear + send_stats "命令行歷史記錄" + bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + ;; + 41) clear send_stats "留言板" From 69cdaca8e171595b6d7b1a67e16b973df5ccff7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 10 Aug 2025 17:51:15 +0800 Subject: [PATCH 005/553] Update kejilion.sh --- cn/kejilion.sh | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 1c2b0d9c1..6515bc7cc 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.5" +sh_v="4.0.6" gl_hui='\e[37m' @@ -4573,8 +4573,8 @@ dd_xitong() { echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" echo -e "${gl_hui}感谢MollyLau大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" - echo "1. Debian 12 2. Debian 11" - echo "3. Debian 10 4. Debian 9" + echo "1. Debian 13 2. Debian 12" + echo "3. Debian 11 4. Debian 10" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" @@ -4598,31 +4598,34 @@ dd_xitong() { echo "------------------------" read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in + + 1) - send_stats "重装debian 12" - dd_xitong_1 - bash InstallNET.sh -debian 12 + send_stats "重装debian 13" + dd_xitong_3 + bash reinstall.sh debian 13 reboot exit ;; + 2) - send_stats "重装debian 11" + send_stats "重装debian 12" dd_xitong_1 - bash InstallNET.sh -debian 11 + bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 10" + send_stats "重装debian 11" dd_xitong_1 - bash InstallNET.sh -debian 10 + bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 9" + send_stats "重装debian 10" dd_xitong_1 - bash InstallNET.sh -debian 9 + bash InstallNET.sh -debian 10 reboot exit ;; From 9e9fb4c1eb276c4ec59b757ded83a909f0714681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 10 Aug 2025 17:51:43 +0800 Subject: [PATCH 006/553] Update kejilion.sh --- kejilion.sh | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 78bf8ceca..d5e7b8f4e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.5" +sh_v="4.0.6" gl_hui='\e[37m' @@ -4573,8 +4573,8 @@ dd_xitong() { echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" echo -e "${gl_hui}感谢MollyLau大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" - echo "1. Debian 12 2. Debian 11" - echo "3. Debian 10 4. Debian 9" + echo "1. Debian 13 2. Debian 12" + echo "3. Debian 11 4. Debian 10" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" @@ -4598,31 +4598,34 @@ dd_xitong() { echo "------------------------" read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in + + 1) - send_stats "重装debian 12" - dd_xitong_1 - bash InstallNET.sh -debian 12 + send_stats "重装debian 13" + dd_xitong_3 + bash reinstall.sh debian 13 reboot exit ;; + 2) - send_stats "重装debian 11" + send_stats "重装debian 12" dd_xitong_1 - bash InstallNET.sh -debian 11 + bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 10" + send_stats "重装debian 11" dd_xitong_1 - bash InstallNET.sh -debian 10 + bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 9" + send_stats "重装debian 10" dd_xitong_1 - bash InstallNET.sh -debian 9 + bash InstallNET.sh -debian 10 reboot exit ;; From 8155060c948134f49b97c916be8a922b5cf4673d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 10 Aug 2025 17:54:58 +0800 Subject: [PATCH 007/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 634a8da6e..698418fe6 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1249,5 +1249,9 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增Linkwarden书签管理器工具的安装及使用。 应用市场新增JitsiMeet视频会议具的安装及使用。 ------------------------ +2025-08-10 v4.0.6 +系统工具重装系统新增Debian13的重装选项。Debian13 性能 安全 稳定全面提升。 +------------------------ + From 6fd16381c62c77199ca9d0a03bb7cf815d2f8308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:09:38 +0800 Subject: [PATCH 008/553] Update kejilion.sh --- kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index d5e7b8f4e..2fdbb51c0 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2372,7 +2372,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2727,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -4571,7 +4571,7 @@ dd_xitong() { echo "重装系统" echo "--------------------------------" echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢MollyLau大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -8715,7 +8715,7 @@ linux_panel() { echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8805,7 +8805,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9191,7 +9191,7 @@ linux_panel() { echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" From 260a67ffb3cc8f0d050d53146298cc69f63e9ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:10:22 +0800 Subject: [PATCH 009/553] Update kejilion.sh --- cn/kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6515bc7cc..41c485c89 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2372,7 +2372,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2727,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -4571,7 +4571,7 @@ dd_xitong() { echo "重装系统" echo "--------------------------------" echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢MollyLau大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -8715,7 +8715,7 @@ linux_panel() { echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8805,7 +8805,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9191,7 +9191,7 @@ linux_panel() { echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" From d78877ad9aec2b7003b9c431d30f176c2bb89b9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:18:01 +0800 Subject: [PATCH 010/553] Update kejilion.sh --- cn/kejilion.sh | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 41c485c89..7ac5d87dc 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="CN" -permission_granted="false" +permission_granted="true" ENABLE_STATS="true" @@ -2363,16 +2363,8 @@ web_optimization() { } - - - - - - - - check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2375,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2727,7 +2719,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2832,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -8715,7 +8707,7 @@ linux_panel() { echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8805,7 +8797,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9191,7 +9183,7 @@ linux_panel() { echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" From 62577318b8e3ef9316a5de86e8adb5de702c44dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:18:36 +0800 Subject: [PATCH 011/553] Update kejilion.sh --- kejilion.sh | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 2fdbb51c0..3da2dc4b5 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="false" +permission_granted="true" ENABLE_STATS="true" @@ -2363,16 +2363,8 @@ web_optimization() { } - - - - - - - - check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2375,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2727,7 +2719,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2832,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -8715,7 +8707,7 @@ linux_panel() { echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8805,7 +8797,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9191,7 +9183,7 @@ linux_panel() { echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" From 2f4c02f362ff0fef2a12562828a0b21b3b7f03db Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 11 Aug 2025 06:16:49 +0000 Subject: [PATCH 012/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-11=2006:16:49?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 69 +++++++++++++++++++++----------------------- jp/kejilion.sh | 77 +++++++++++++++++++++++--------------------------- kr/kejilion.sh | 73 ++++++++++++++++++++++------------------------- tw/kejilion.sh | 53 ++++++++++++++++------------------ 4 files changed, 126 insertions(+), 146 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 8522d0a2c..e9c857476 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.5" +sh_v="4.0.6" gl_hui='\e[37m' @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="false" +permission_granted="true" ENABLE_STATS="true" @@ -2119,7 +2119,7 @@ web_security() { 22) send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When it reaches the detection of a high load, the shield will be automatically turned on, and the low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" @@ -2363,16 +2363,8 @@ web_optimization() { } - - - - - - - - check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2375,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}${gl_bai} installed" # else # check_docker="${gl_hui}${gl_bai} is not installed" @@ -2727,7 +2719,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2832,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -4571,10 +4563,10 @@ dd_xitong() { echo "Reinstall the system" echo "--------------------------------" echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." - echo -e "${gl_hui}Thanks to MollyLau and bin456789 for the script support!${gl_bai} " + echo -e "${gl_hui}Thanks to the script support of leitbogioro and bin456789!${gl_bai} " echo "------------------------" - echo "1. Debian 12 2. Debian 11" - echo "3. Debian 10 4. Debian 9" + echo "1. Debian 13 2. Debian 12" + echo "3. Debian 11 4. Debian 10" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" @@ -4598,31 +4590,34 @@ dd_xitong() { echo "------------------------" read -e -p "Please select the system to reinstall:" sys_choice case "$sys_choice" in + + 1) - send_stats "Reinstall debian 12" - dd_xitong_1 - bash InstallNET.sh -debian 12 + send_stats "Reinstall debian 13" + dd_xitong_3 + bash reinstall.sh debian 13 reboot exit ;; + 2) - send_stats "Reinstall debian 11" + send_stats "Reinstall debian 12" dd_xitong_1 - bash InstallNET.sh -debian 11 + bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Reinstall debian 10" + send_stats "Reinstall debian 11" dd_xitong_1 - bash InstallNET.sh -debian 10 + bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Reinstall debian 9" + send_stats "Reinstall debian 10" dd_xitong_1 - bash InstallNET.sh -debian 9 + bash InstallNET.sh -debian 10 reboot exit ;; @@ -4986,7 +4981,7 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Operating system detected:$os_name $os_version" + echo "Detected operating systems:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." @@ -5812,7 +5807,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Example to create a new connection:" + echo "Create a new connection example:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -5953,7 +5948,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can be connected to other Linux systems via SSH" + echo "Can connect to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -7918,7 +7913,7 @@ linux_ldnmp() { ;; 2) echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter to skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8508,7 +8503,7 @@ linux_panel() { echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI Big Model Asset Management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" + echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" @@ -8712,7 +8707,7 @@ linux_panel() { echo -e "Nezha Monitoring$check_docker $update_status" echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8802,7 +8797,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "Access address:" echo "https://$yuming" @@ -9188,7 +9183,7 @@ linux_panel() { echo -e "Thunder Pool Service$check_docker" echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -11040,7 +11035,7 @@ linux_Settings() { echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host analysis${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" @@ -12173,7 +12168,7 @@ EOF echo "Privacy and Security" echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 023c6369d..2777ea9a6 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.5" +sh_v="4.0.6" gl_hui='\e[37m' @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="false" +permission_granted="true" ENABLE_STATS="true" @@ -2119,7 +2119,7 @@ web_security() { 22) send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷の検出に達すると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" echo "--------------" echo "CFパラメーターを取得します:" echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" @@ -2363,16 +2363,8 @@ web_optimization() { } - - - - - - - - check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2375,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker = "$ {gl_lv} $ {gl_bai}インストール" # else # check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" @@ -2727,7 +2719,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2832,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -3393,7 +3385,7 @@ ldnmp_web_status() { echo "------------------------" echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" - echo "5.アクセスログを表示6。エラーログを表示します" + echo "5. 查看访问日志 6. 查看错误日志" echo "7.グローバル構成の編集8。サイト構成の編集" echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" echo "------------------------" @@ -4571,10 +4563,10 @@ dd_xitong() { echo "システムを再インストールします" echo "--------------------------------" echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - echo -e "${gl_hui}スクリプトサポートについては、MollylauとBin456789に感謝します!${gl_bai} " + echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " echo "------------------------" - echo "1. Debian 12 2. Debian 11" - echo "3. Debian 10 4. Debian 9" + echo "1. Debian 13 2. Debian 12" + echo "3. Debian 11 4. Debian 10" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" @@ -4598,31 +4590,34 @@ dd_xitong() { echo "------------------------" read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in + + 1) - send_stats "Debian 12を再インストールします" - dd_xitong_1 - bash InstallNET.sh -debian 12 + send_stats "Debian 13を再インストールします" + dd_xitong_3 + bash reinstall.sh debian 13 reboot exit ;; + 2) - send_stats "Debian 11を再インストールします" + send_stats "Debian 12を再インストールします" dd_xitong_1 - bash InstallNET.sh -debian 11 + bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Debian 10を再インストールします" + send_stats "Debian 11を再インストールします" dd_xitong_1 - bash InstallNET.sh -debian 10 + bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Debian 9を再インストールします" + send_stats "Debian 10を再インストールします" dd_xitong_1 - bash InstallNET.sh -debian 9 + bash InstallNET.sh -debian 10 reboot exit ;; @@ -5370,7 +5365,7 @@ Kernel_optimize() { echo "--------------------" echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" - echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" + echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを同時に改善します。" echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" @@ -5812,7 +5807,7 @@ list_connections() { # 新しい接続を追加します add_connection() { send_stats "新しい接続を追加します" - echo "新しい接続を作成する例:" + echo "新しい接続例を作成します:" echo "- 接続名:my_server" echo "- IPアドレス:192.168.1.100" echo "- ユーザー名:root" @@ -7004,7 +6999,7 @@ linux_docker() { echo "ボリューム操作" echo "------------------------" echo "1.新しいボリュームを作成します" - echo "2。指定されたボリュームを削除します" + echo "2. 删除指定卷" echo "3.すべてのボリュームを削除します" echo "------------------------" echo "0。前のメニューに戻ります" @@ -7918,7 +7913,7 @@ linux_ldnmp() { ;; 2) echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8712,7 +8707,7 @@ linux_panel() { echo -e "Nezhaの監視$check_docker $update_status" echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8802,7 +8797,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "アクセスアドレス:" echo "https://$yuming" @@ -9188,7 +9183,7 @@ linux_panel() { echo -e "サンダープールサービス$check_docker" echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -11040,7 +11035,7 @@ linux_Settings() { 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" @@ -11416,7 +11411,7 @@ EOF ;; 4) read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudo許可を削除します + # sudoersファイルからユーザーのsudoアクセス許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; @@ -12076,10 +12071,10 @@ EOF 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 "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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" + echo -e "10. Linux系统内核参数优化切换到${gl_huang}バランスの取れた最適化モード${gl_bai}" echo "------------------------------------------------" read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice @@ -12173,7 +12168,7 @@ EOF echo "プライバシーとセキュリティ" echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" + echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" echo "--------------------" @@ -12520,7 +12515,7 @@ while true; do 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}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}" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index b30d886f0..ab2dde8ff 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.5" +sh_v="4.0.6" gl_hui='\e[37m' @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="false" +permission_granted="true" ENABLE_STATS="true" @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야하는지 확인하십시오 +# 가상 메모리를 생성 해야하는지 확인하십시오 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -2119,7 +2119,7 @@ web_security() { 22) send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" echo "--------------" echo "CF 매개 변수 가져 오기 :" echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" @@ -2363,16 +2363,8 @@ web_optimization() { } - - - - - - - - check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2375,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker = "$ {gl_lv} $ {gl_bai} 설치" # else # check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" @@ -2727,7 +2719,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2832,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -4571,10 +4563,10 @@ dd_xitong() { echo "시스템을 다시 설치하십시오" echo "--------------------------------" echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - echo -e "${gl_hui}스크립트 지원을 위해 Mollylau 및 Bin456789에게 감사드립니다!${gl_bai} " + echo -e "${gl_hui}Leitbogioro 및 Bin456789의 스크립트 지원 덕분에!${gl_bai} " echo "------------------------" - echo "1. Debian 12 2. Debian 11" - echo "3. Debian 10 4. Debian 9" + echo "1. Debian 13 2. Debian 12" + echo "3. Debian 11 4. Debian 10" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" @@ -4598,31 +4590,34 @@ dd_xitong() { echo "------------------------" read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice case "$sys_choice" in + + 1) - send_stats "데비안 12를 다시 설치하십시오" - dd_xitong_1 - bash InstallNET.sh -debian 12 + send_stats "데비안 13을 다시 설치하십시오" + dd_xitong_3 + bash reinstall.sh debian 13 reboot exit ;; + 2) - send_stats "데비안 11을 다시 설치하십시오" + send_stats "데비안 12를 다시 설치하십시오" dd_xitong_1 - bash InstallNET.sh -debian 11 + bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "데비안 10을 다시 설치하십시오" + send_stats "데비안 11을 다시 설치하십시오" dd_xitong_1 - bash InstallNET.sh -debian 10 + bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "데비안 9를 다시 설치하십시오" + send_stats "데비안 10을 다시 설치하십시오" dd_xitong_1 - bash InstallNET.sh -debian 9 + bash InstallNET.sh -debian 10 reboot exit ;; @@ -4986,7 +4981,7 @@ elrepo_install() { linux_Settings fi # 감지 된 운영 체제 정보를 인쇄합니다 - echo "운영 체제 감지 :$os_name $os_version" + echo "감지 된 운영 체제 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." @@ -5812,7 +5807,7 @@ list_connections() { # 새 연결을 추가하십시오 add_connection() { send_stats "새 연결을 추가하십시오" - echo "새 연결을 만드는 예 :" + echo "새 연결 예제 :" echo "- 연결 이름 : my_server" echo "-IP 주소 : 192.168.1.100" echo "- 사용자 이름 : 루트" @@ -6555,7 +6550,7 @@ linux_tools() { 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}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}모든 것을 제거하십시오" @@ -6754,7 +6749,7 @@ linux_tools() { 32) clear - send_stats "모든 설치 (게임 및 화면 보호기 제외)" + send_stats "모든 설치 (게임 및 스크린 세이버 제외)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; @@ -7918,7 +7913,7 @@ linux_ldnmp() { ;; 2) echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db + read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8712,7 +8707,7 @@ linux_panel() { echo -e "Nezha 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8802,7 +8797,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "액세스 주소 :" echo "https://$yuming" @@ -9188,7 +9183,7 @@ linux_panel() { echo -e "썬더 풀 서비스$check_docker" echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -11040,7 +11035,7 @@ linux_Settings() { 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}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 고위험 취약점을 수정하십시오" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" @@ -12394,7 +12389,7 @@ linux_file() { # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사하십시오" + send_stats "파일 또는 디렉토리를 복사합니다" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index f112e919e..82089bc1d 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.5" +sh_v="4.0.6" gl_hui='\e[37m' @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="false" +permission_granted="true" ENABLE_STATS="true" @@ -2363,16 +2363,8 @@ web_optimization() { } - - - - - - - - check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2383,7 +2375,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}已安裝${gl_bai}" # else # check_docker="${gl_hui}未安裝${gl_bai}" @@ -2727,7 +2719,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2840,7 +2832,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -4571,10 +4563,10 @@ dd_xitong() { echo "重裝系統" echo "--------------------------------" echo -e "${gl_hong}注意:${gl_bai}重裝有風險失聯,不放心者慎用。重裝預計花費15分鐘,請提前備份數據。" - echo -e "${gl_hui}感謝MollyLau大佬和bin456789大佬的腳本支持!${gl_bai} " + echo -e "${gl_hui}感謝leitbogioro大佬和bin456789大佬的腳本支持!${gl_bai} " echo "------------------------" - echo "1. Debian 12 2. Debian 11" - echo "3. Debian 10 4. Debian 9" + echo "1. Debian 13 2. Debian 12" + echo "3. Debian 11 4. Debian 10" echo "------------------------" echo "11. Ubuntu 24.04 12. Ubuntu 22.04" echo "13. Ubuntu 20.04 14. Ubuntu 18.04" @@ -4598,31 +4590,34 @@ dd_xitong() { echo "------------------------" read -e -p "請選擇要重裝的系統:" sys_choice case "$sys_choice" in + + 1) - send_stats "重裝debian 12" - dd_xitong_1 - bash InstallNET.sh -debian 12 + send_stats "重裝debian 13" + dd_xitong_3 + bash reinstall.sh debian 13 reboot exit ;; + 2) - send_stats "重裝debian 11" + send_stats "重裝debian 12" dd_xitong_1 - bash InstallNET.sh -debian 11 + bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重裝debian 10" + send_stats "重裝debian 11" dd_xitong_1 - bash InstallNET.sh -debian 10 + bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重裝debian 9" + send_stats "重裝debian 10" dd_xitong_1 - bash InstallNET.sh -debian 9 + bash InstallNET.sh -debian 10 reboot exit ;; @@ -8712,7 +8707,7 @@ linux_panel() { echo -e "哪吒監控$check_docker $update_status" echo "開源、輕量、易用的服務器監控與運維工具" echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8802,7 +8797,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "訪問地址:" echo "https://$yuming" @@ -9188,7 +9183,7 @@ linux_panel() { echo -e "雷池服務$check_docker" echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" From 8de0d2b1e33430eec10387c4aae871c24f4e1518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 14:56:21 +0800 Subject: [PATCH 013/553] Update kejilion.sh --- cn/kejilion.sh | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 7ac5d87dc..2d8da0e91 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="CN" -permission_granted="true" +permission_granted="false" ENABLE_STATS="true" @@ -2363,8 +2363,16 @@ web_optimization() { } + + + + + + + + check_docker_app() { - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2375,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2719,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2832,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -3225,8 +3233,6 @@ ldnmp_wp() { 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 @@ -3238,11 +3244,6 @@ ldnmp_wp() { restart_ldnmp nginx_web_on -# echo "数据库名: $dbname" -# echo "用户名: $dbuse" -# echo "密码: $dbusepasswd" -# echo "数据库地址: mysql" -# echo "表前缀: wp_" } @@ -3293,7 +3294,6 @@ ldnmp_Proxy_backend() { 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 @@ -3310,13 +3310,11 @@ ldnmp_Proxy_backend() { sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf - # 动态生成 upstream 配置 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 @@ -3343,11 +3341,11 @@ 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 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}" + local db_output="${gl_lv}${db_count}${gl_bai}" clear send_stats "LDNMP站点管理" @@ -3355,8 +3353,7 @@ ldnmp_web_status() { echo "------------------------" ldnmp_v - # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' - echo -e "${output} 证书到期时间" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3369,7 +3366,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "${db_output}" + 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" @@ -7453,20 +7450,20 @@ docker_tato() { 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 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}" +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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -8707,7 +8704,7 @@ linux_panel() { echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8797,7 +8794,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9183,7 +9180,7 @@ linux_panel() { echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" From edec4817dfe0a3c360ca4c7b9ad4bb456f2036fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 14:56:56 +0800 Subject: [PATCH 014/553] Update kejilion.sh --- kejilion.sh | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3da2dc4b5..39cd0eba5 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="true" +permission_granted="false" ENABLE_STATS="true" @@ -2363,8 +2363,16 @@ web_optimization() { } + + + + + + + + check_docker_app() { - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2375,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2719,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2832,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -3225,8 +3233,6 @@ ldnmp_wp() { 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 @@ -3238,11 +3244,6 @@ ldnmp_wp() { restart_ldnmp nginx_web_on -# echo "数据库名: $dbname" -# echo "用户名: $dbuse" -# echo "密码: $dbusepasswd" -# echo "数据库地址: mysql" -# echo "表前缀: wp_" } @@ -3293,7 +3294,6 @@ ldnmp_Proxy_backend() { 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 @@ -3310,13 +3310,11 @@ ldnmp_Proxy_backend() { sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf - # 动态生成 upstream 配置 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 @@ -3343,11 +3341,11 @@ 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 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}" + local db_output="${gl_lv}${db_count}${gl_bai}" clear send_stats "LDNMP站点管理" @@ -3355,8 +3353,7 @@ ldnmp_web_status() { echo "------------------------" ldnmp_v - # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' - echo -e "${output} 证书到期时间" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3369,7 +3366,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "${db_output}" + 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" @@ -7453,20 +7450,20 @@ docker_tato() { 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 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}" +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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -8707,7 +8704,7 @@ linux_panel() { echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8797,7 +8794,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9183,7 +9180,7 @@ linux_panel() { echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" From 01d7af63c3f2e052840593afec4e8f3beafbc104 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 11 Aug 2025 07:37:54 +0000 Subject: [PATCH 015/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-11=2007:37:54?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 71 +- jp/kejilion.sh | 4309 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 73 +- tw/kejilion.sh | 49 +- 4 files changed, 2245 insertions(+), 2257 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index e9c857476..839b9a966 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="true" +permission_granted="false" ENABLE_STATS="true" @@ -1185,7 +1185,7 @@ iptables_panel() { 5) # IP whitelist - read -e -p "Please enter the IP or IP segment to be released:" o_ip + read -e -p "Please enter the IP or IP segment to release:" o_ip allow_ip $o_ip ;; 6) @@ -1556,7 +1556,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -1738,7 +1738,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to mode parameters + # Decide to turn on or off WAF according to the mode parameter if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -2119,7 +2119,7 @@ web_security() { 22) send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When it reaches the detection of a high load, the shield will be automatically turned on, and the low load will be automatically turned off for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" @@ -2363,8 +2363,16 @@ web_optimization() { } + + + + + + + + check_docker_app() { - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2375,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker="${gl_lv}${gl_bai} installed" # else # check_docker="${gl_hui}${gl_bai} is not installed" @@ -2719,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2832,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -3225,8 +3233,6 @@ ldnmp_wp() { 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 @@ -3238,11 +3244,6 @@ ldnmp_wp() { restart_ldnmp nginx_web_on -# echo "Database name: $dbname" -# echo "Username: $dbuse" -# echo "Password: $dbusepasswd" -# echo "Database address: mysql" -# echo "Table prefix: wp_" } @@ -3293,7 +3294,6 @@ ldnmp_Proxy_backend() { add_yuming fi - # Get multiple IPs entered by the user: ports (separated by spaces) if [ -z "$reverseproxy_port" ]; then read -e -p "Please enter your multiple anti-generation IP+ ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi @@ -3310,13 +3310,11 @@ ldnmp_Proxy_backend() { sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf - # Dynamically generate upstream configuration upstream_servers="" for server in $reverseproxy_port; do upstream_servers="$upstream_servers server $server;\n" done - # Replace placeholders in templates sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf nginx_http_on @@ -3343,11 +3341,11 @@ 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 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}" + local db_output="${gl_lv}${db_count}${gl_bai}" clear send_stats "LDNMP site management" @@ -3355,8 +3353,7 @@ ldnmp_web_status() { echo "------------------------" ldnmp_v - # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' - echo -e "${output}Certificate expiration time" + echo -e "Site:${output}Certificate expiration time" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3369,7 +3366,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "${db_output}" + echo -e "database:${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" @@ -3939,7 +3936,7 @@ frps_panel() { 8) send_stats "Block IP access" - echo "If you have accessed the anti-generation domain name, use this function to block IP+ port access, which is more secure." + echo "If you have accessed the anti-generation domain name, you can use this function to block IP+ port access, which is more secure." read -e -p "Please enter the port you need to block:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -5807,7 +5804,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Create a new connection example:" + echo "Example to create a new connection:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -5948,7 +5945,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can connect to other Linux systems via SSH" + echo "Can be connected to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -7453,20 +7450,20 @@ docker_tato() { 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 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}" +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}The environment is installed${gl_bai} $output $db_output" + echo -e "${gl_lv}The environment is installed${gl_bai}Site:$outputdatabase:$db_output" fi fi @@ -7682,7 +7679,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Background login path: /admin" + echo "Backend login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -7913,7 +7910,7 @@ linux_ldnmp() { ;; 2) echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter to skip remote download:" url_download_db + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8707,7 +8704,7 @@ linux_panel() { echo -e "Nezha Monitoring$check_docker $update_status" echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8797,7 +8794,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "Access address:" echo "https://$yuming" @@ -9183,7 +9180,7 @@ linux_panel() { echo -e "Thunder Pool Service$check_docker" echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" @@ -11066,7 +11063,7 @@ 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 "Shortcut keys have been set" + echo "Shortcut keys are set" send_stats "Script shortcut keys have been set" break_end linux_Settings @@ -12168,7 +12165,7 @@ EOF echo "Privacy and Security" echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 2777ea9a6..01a706586 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="true" +permission_granted="false" ENABLE_STATS="true" @@ -574,7 +574,7 @@ while true; do docker restart $(docker ps -q) ;; 11) - send_stats "コンテナを入力します" + send_stats "进入容器" read -e -p "コンテナ名を入力してください:" dockername docker exec -it $dockername /bin/sh break_end @@ -611,7 +611,7 @@ while true; do 15) send_stats "コンテナポートアクセスを許可します" - read -e -p "コンテナ名を入力してください:" docker_name + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -641,43 +641,43 @@ docker_image() { while true; do clear send_stats "Docker画像管理" - echo "Docker画像リスト" + echo "Docker镜像列表" docker image ls echo "" - echo "ミラー操作" + echo "镜像操作" echo "------------------------" - echo "1.指定された画像を取得する3。指定された画像を削除します" - echo "2。指定された画像4を更新します。すべての画像を削除します" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "鏡を引っ張ります" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}画像を取得する:$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "画像を更新します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}更新された画像:$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "ミラーを削除します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "すべての画像を削除します" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "サポートされていない分布:$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "オペレーティングシステムを決定することはできません。" + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +775,27 @@ docker_ipv6_on() { 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を使用して、構成ファイルの更新を処理します + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 現在の構成には既にIPv6設定があるかどうかを確認してください + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 構成を更新し、IPv6を有効にします + # 更新配置,开启 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}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 構成ファイルが存在するかどうかを確認します + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" + echo -e "${gl_hong}配置文件不存在${gl_bai}" return fi - # 現在の構成をお読みください + # 读取当前配置 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # JQを使用して、構成ファイルの更新を処理します + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 現在のIPv6ステータスを確認してください + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 元の構成と新しい構成を比較します + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + 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" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "ポートが開かれました" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + 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" + echo "已关闭端口 $port" fi done - # 既存のルールを削除する(ある場合) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 最初に新しいルールを挿入します + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "ポートは閉じた" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + 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" + echo "已放行IP $ip" fi done save_iptables_rules - send_stats "IPをリリースしました" + send_stats "已放行IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + 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" + echo "已阻止IP $ip" fi done save_iptables_rules - send_stats "IPブロック" + send_stats "已阻止IP" } @@ -990,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 防御DDOをオンにします + # 开启防御 DDoS 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 @@ -1000,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS防御をオンにします" + send_stats "开启DDoS防御" } -# DDOS防御をオフにします +# 关闭DDoS防御 disable_ddos_defense() { - # 防御DDOをオフにします + # 关闭防御 DDoS 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 @@ -1015,14 +1015,14 @@ disable_ddos_defense() { 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防御をオフにします" + send_stats "关闭DDoS防御" } -# 国家IPルールを管理する機能 +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # IPSETが存在しない場合は作成します + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IPエリアファイルをダウンロードします + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # IPSETにIPを追加します + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # iptablesでIPをブロックします + # 使用 iptables 阻止 IP 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_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 許可された国のIPSETを作成する(存在しない場合) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IPエリアファイルをダウンロードします + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + 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" - # IPSETにIPを追加します + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 指定された国のIPのみが許可されています + # 仅允许指定国家的 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_codeIPアドレス" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 国のiptablesルールを削除します + # 删除国家的 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を破壊します + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "正常に持ち上げられました$country_codeIPアドレスの制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高度なファイアウォール管理" - send_stats "高度なファイアウォール管理" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "ファイアウォール管理" + echo "防火墙管理" echo "------------------------" - echo "1.指定されたポート2を開きます。指定されたポートを閉じます" - echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5。IPホワイトリスト6。IPブラックリスト" - echo "7.指定されたIPをクリアします" + echo "5. IP白名单 6. IP黑名单" + echo "7. 清除指定IP" echo "------------------------" - echo "11. ping 12を許可します。Pingを無効にします" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" - echo "17.指定国でのIP制限をリリースします" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "オープンポート番号を入力してください:" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "指定されたポートを開きます" + send_stats "开放指定端口" ;; 2) - read -e -p "閉じたポート番号を入力してください:" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "指定されたポートを閉じます" + send_stats "关闭指定端口" ;; 3) - # すべてのポートを開きます + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1164,10 @@ iptables_panel() { 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 "すべてのポートを開きます" + send_stats "开放所有端口" ;; 4) - # すべてのポートを閉じます + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1180,40 @@ iptables_panel() { 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 "すべてのポートを閉じます" + send_stats "关闭所有端口" ;; 5) - # IPホワイトリスト - read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IPブラックリスト - read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) - # 指定されたIPをクリアします - read -e -p "クリアされたIPを入力してください:" d_ip + # 清除指定 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をクリアします" + send_stats "清除指定IP" ;; 11) - # pingを許可します + # 允许 PING 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 "pingを許可します" + send_stats "允许PING" ;; 12) - # pingを無効にします + # 禁用 PING 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 "pingを無効にします" + send_stats "禁用PING" ;; 13) enable_ddos_defense @@ -1223,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "許可された国$country_codeIP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "国をブロックします$country_codeIP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "国をきれいにします$country_codeIP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 現在のシステムですべてのスワップパーティションを取得します + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 反復して、すべてのスワップパーティションを削除します + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # /swapfileが使用されなくなったことを確認してください + # 确保 /swapfile 不再被使用 swapoff /swapfile - # 古い /swapfileを削除します + # 删除旧的 /swapfile rm -f /swapfile - # 新しいスワップパーティションを作成します + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 仮想メモリを作成する必要があるかどうかを判断します +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginxバージョンを取得します + # 获取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バージョンを取得します + # 获取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バージョンを取得します + # 获取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バージョンを取得します + # 获取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}" @@ -1341,7 +1341,7 @@ ldnmp_v() { 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 @@ -1350,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.ymlファイルをダウンロードして置き換えます + # 下载 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ファイルに置き換えます + # 在 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 @@ -1399,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP環境がインストールされています" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1416,7 @@ install_certbot() { 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 "更新タスクが更新されました" + echo "续签任务已更新" } @@ -1451,15 +1451,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming公開鍵情報${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}証明書ストレージパス${gl_bai}" - echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" - echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1468,7 +1468,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1484,8 +1484,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" - echo "サイト情報証明書の有効期限" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1524,19 +1524,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "ドメイン名証明書の成功したアプリケーション" + send_stats "域名证书申请成功" else - send_stats "ドメイン名証明書のアプリケーションは失敗しました" - echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" - echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" - echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" - echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" - echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" - echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" - echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "もう一度展開してみてください$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1547,7 +1547,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "ドメイン名の再利用" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1556,8 +1556,8 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1621,8 +1621,8 @@ nginx_upgrade() { 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}仕上げる" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" } @@ -1641,11 +1641,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "ログイン情報:" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "起動する$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1655,29 +1655,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 構成ファイルが存在するかどうかを確認します + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # ゾーン_idsを配列に変換します + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # キャッシュをクリーニングするかどうかをユーザーに促します - read -e -p "CloudFlareのキャッシュをきれいにする必要がありますか? (y/n):" answer + # 提示用户是否清理缓存 + 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 "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS + 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をループして、Clear Cacheコマンドを実行します + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "ゾーン_idのキャッシュのクリア:$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1685,13 +1685,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "キャッシュクリアリクエストが送信されました。" + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "サイトキャッシュをクリーンアップします" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1701,28 +1701,28 @@ web_cache() { web_del() { - send_stats "サイトデータを削除します" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "ドメイン名の削除:$yuming" + 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" + # 删除数据库前检查是否存在,避免报错 + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1738,23 +1738,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることを決定します + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # WAFをオンにしてください:コメントを削除します + # 开启 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を閉じる:コメントを追加します + # 关闭 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 "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1801,11 +1801,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1828,12 +1828,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1856,7 +1856,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotliをオンにする:コメントを削除します + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1870,7 +1870,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる:コメントを追加します + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1886,11 +1886,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1912,7 +1912,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTDをオンにしてください:コメントを削除します + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1927,7 +1927,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # ZSTDを閉じる:コメントを追加します + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1943,11 +1943,11 @@ nginx_zstd() { else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1974,7 +1974,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1988,7 +1988,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2002,25 +2002,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 安装防御程序" echo "------------------------" - echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" - echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21。CloudFlareモード22。5秒シールドの高負荷" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31。WAF32をオンにしてください。WAFをオフにします" - echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 卸载防御程序" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2080,7 +2080,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2095,11 +2095,11 @@ web_security() { ;; 21) - send_stats "CloudFlareモード" - echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" + send_stats "cloudflare模式" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2114,21 +2114,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷の検出に達すると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "CFパラメーターを取得します:" - echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" - echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken - read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2145,23 +2145,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高負荷自動シールドオープニングスクリプトが追加されました" + echo "高负载自动开盾脚本已添加" else - echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "サイトWAFが有効になっています" - send_stats "サイトWAFが有効になっています" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "サイトWAFは閉鎖されています" - send_stats "サイトWAFは閉鎖されています" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2187,10 +2187,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 現在のworker_processesの設定値を取得します +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 値に応じてモード情報を設定します +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2206,21 +2206,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotliが有効であり、コメントされていないかどうかを確認してください + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # GZIPが有効になっており、コメントされていないかどうかを確認してください + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2236,33 +2236,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP環境を最適化します" - echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1。標準モード2。高性能モード(推奨2H4g以上)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" - echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" - echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "サイト標準モード" + send_stats "站点标准模式" - # nginxチューニング + # 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チューニング + # 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チューニング + # 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 @@ -2274,7 +2274,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2286,23 +2286,23 @@ web_optimization() { optimize_balanced - echo "LDNMP環境は標準モードに設定されています" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "サイトの高性能モード" + send_stats "站点高性能模式" - # nginxチューニング + # 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チューニング + # 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チューニング + # 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 @@ -2314,7 +2314,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2324,7 +2324,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境は、高性能モードに設定されています" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2363,8 +2363,16 @@ web_optimization() { } + + + + + + + + check_docker_app() { - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2375,10 +2383,10 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then -# check_docker = "$ {gl_lv} $ {gl_bai}インストール" +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2386,7 +2394,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "アクセスアドレス:" +echo "访问地址:" ip_address @@ -2424,31 +2432,31 @@ check_docker_image_update() { 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##*:} - # デフォルトのラベルは最新です + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 公式画像のサポートを追加します + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIから画像公開時間を取得します + # 从 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 @@ -2467,7 +2475,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2477,34 +2485,34 @@ block_container_port() { install iptables - # 他のすべてのIPSを確認してブロックします + # 检查并封禁其他所有 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を確認してリリースします + # 检查并放行指定 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 + # 检查并放行本地网络 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 - # 他のすべてのIPSを確認してブロックします + # 检查并封禁其他所有 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を確認してリリースします + # 检查并放行指定 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 + # 检查并放行本地网络 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 @@ -2514,7 +2522,7 @@ block_container_port() { fi - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2525,7 +2533,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2535,17 +2543,17 @@ clear_container_rules() { install iptables - # 他のすべてのIPをブロックするルールを明確にします + # 清除封禁其他所有 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をリリースするためのルールをクリアします + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2554,17 +2562,17 @@ clear_container_rules() { - # 他のすべてのIPをブロックするルールを明確にします + # 清除封禁其他所有 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をリリースするためのルールをクリアします + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2575,7 +2583,7 @@ clear_container_rules() { fi - echo "IP+ポートはサービスにアクセスすることが許可されています" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2597,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:block_host_port <ポート番号> <承認IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # 他のすべてのIPアクセスを拒否しました + # 拒绝其他所有 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アクセスを許可します + # 允许指定 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 @@ -2616,27 +2624,27 @@ block_host_port() { - # 他のすべてのIPアクセスを拒否しました + # 拒绝其他所有 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アクセスを許可します + # 允许指定 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+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2648,47 +2656,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # 他のすべてのIPアクセスをブロックするルールをクリアします + # 清除封禁所有其他 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アクセスを許可するルールを明確にします + # 清除允许指定 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アクセスをブロックするルールをクリアします + # 清除封禁所有其他 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アクセスを許可するルールを明確にします + # 清除允许指定 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+ポートはサービスにアクセスすることが許可されています" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2719,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2730,18 +2738,18 @@ while true; do fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2754,12 +2762,12 @@ while true; do grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "$docker_nameインストール" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "インストール$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2769,12 +2777,12 @@ while true; do grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "$docker_nameインストール" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新します$docker_name" + send_stats "更新$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2783,30 +2791,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" - send_stats "アンインストール$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2832,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2843,18 +2851,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2878,22 +2886,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2978,17 +2986,17 @@ 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 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3063,11 +3071,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "再起動" + echo "已重启" reboot ;; *) - echo "キャンセル" + echo "已取消" ;; esac @@ -3110,8 +3118,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP環境を再度インストールできません" - echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3121,10 +3129,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP環境をインストールします" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3138,10 +3146,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx環境をインストールします" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3152,8 +3160,8 @@ 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 "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3164,7 +3172,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "LDNMP環境を最初にインストールしてください" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3174,7 +3182,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "最初にNGINX環境をインストールしてください" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3185,16 +3193,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "あなたの$webname建てられた!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webnameインストール情報は次のとおりです。" + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "あなたの$webname建てられた!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3206,8 +3214,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3225,8 +3233,6 @@ ldnmp_wp() { 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 @@ -3238,11 +3244,6 @@ ldnmp_wp() { restart_ldnmp nginx_web_on -# エコー「データベース名:$ dbname」 -# エコー「ユーザー名:$ dbuse」 -# エコー「パスワード:$ dbusepasswd」 -# エコー「データベースアドレス:mysql」 -# エコー「テーブルプレフィックス:WP_」 } @@ -3254,17 +3255,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "発生防止ポートを入力してください。" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3287,15 +3288,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + 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.1:3002):" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3310,13 +3310,11 @@ ldnmp_Proxy_backend() { 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 @@ -3343,20 +3341,19 @@ 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 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}" + local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMPサイト管理" - echo "LDNMP環境" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' - echo -e "${output}証明書の有効期限" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3369,35 +3366,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" - echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" echo "5. 查看访问日志 6. 查看错误日志" - echo "7.グローバル構成の編集8。サイト構成の編集" - echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20.指定されたサイトデータを削除します" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "ドメイン名証明書を申請します" - read -e -p "ドメイン名を入力してください:" yuming + 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 @@ -3406,15 +3403,15 @@ ldnmp_web_status() { ;; 2) - send_stats "サイトドメイン名を変更します" - echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" - read -e -p "古いドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # MySQLの交換 + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3432,7 +3429,7 @@ ldnmp_web_status() { 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" {} + @@ -3453,10 +3450,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "関連するサイトを作成します" - echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" - read -e -p "既存のドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3470,25 +3467,25 @@ ldnmp_web_status() { ;; 5) - send_stats "アクセスログを表示します" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "エラーログを表示します" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "グローバル構成を編集します" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "サイト構成を編集します" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3498,7 +3495,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "サイトデータを表示します" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3534,16 +3531,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" - echo "公式ウェブサイトの紹介:$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1。インストール2。管理3。アンインストール" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3552,20 +3549,20 @@ while true; do panel_app_install local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - send_stats "${panelname}コントロール" + send_stats "${panelname}控制" ;; 3) panel_app_uninstall local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - send_stats "${panelname}アンインストール" + send_stats "${panelname}卸载" ;; *) break @@ -3609,8 +3606,8 @@ donlond_frp() { generate_frps_config() { - send_stats "FRPサーバーをインストールします" - # ランダムポートと資格情報を生成します + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3631,17 +3628,17 @@ EOF donlond_frp frps - # 出力生成情報 + # 输出生成的信息 ip_address echo "------------------------" - echo "クライアントの展開に必要なパラメーター" - echo "サービスIP:$ipv4_address" + 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 "FRP面板信息" + echo "FRP面板地址: http://$ipv4_address:$dashboard_port" + echo "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3651,9 +3648,9 @@ EOF configure_frpc() { - send_stats "FRPクライアントをインストールします" - read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr - read -e -p "外部ネットワークドッキングトークンを入力してください:" token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3673,17 +3670,17 @@ EOF } add_forwarding_service() { - send_stats "FRPイントラネットサービスを追加します" - # ユーザーにサービス名と転送情報を入力するように促します - read -e -p "サービス名を入力してください:" service_name - read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "イントラネットIPを入力してください[デフォルト127.0.0.1を入力]:" local_ip + read -e -p "请输入内网IP [回车默认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 + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # ユーザー入力を構成ファイルに書き込みます + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3693,8 +3690,8 @@ remote_port = ${remote_port} EOF - # 出力生成情報 - echo "仕える$service_nameFRPC.TOMLに正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3705,12 +3702,12 @@ EOF delete_forwarding_service() { - send_stats "FRPイントラネットサービスを削除します" - # ユーザーに削除する必要があるサービス名を入力するように促します - read -e -p "削除する必要があるサービス名を入力してください:" service_name - # SEDを使用して、サービスとその関連構成を削除します + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "仕える$service_nameFRPC.TOMLから削除されました" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3720,7 +3717,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3741,7 +3738,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3750,11 +3747,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前の値をクリアします + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3783,7 +3780,7 @@ list_forwarding_services() { } END { - # 最後のサービスの情報を印刷します + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3796,17 +3793,17 @@ list_forwarding_services() { -# FRPサーバーポートを取得します +# 获取 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以外のポートがあるかどうかを確認してください + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3815,18 +3812,18 @@ generate_access_urls() { fi done - # 有効なポートがある場合にのみタイトルとコンテンツを表示します + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRPサービス外部アクセスアドレス:" + echo "FRP服务对外访问地址:" - # IPv4アドレスを処理します + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # IPv6アドレスを処理する(存在する場合) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3835,7 +3832,7 @@ generate_access_urls() { done fi - # HTTPS構成の処理 + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3862,32 +3859,32 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local docker_name="frps" local docker_port=8056 while true; do clear check_frp_app check_docker_image_update $docker_name - echo -e "FRPサーバー$check_frp $update_status" - echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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 "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00。サービスのステータスを更新します0。前のメニューに戻ります" + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3895,7 +3892,7 @@ frps_panel() { generate_frps_config local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRPサーバーがインストールされています" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3905,7 +3902,7 @@ frps_panel() { donlond_frp frps local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRPサーバーが更新されました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3916,37 +3913,37 @@ frps_panel() { close_port 8055 8056 local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; 5) - echo "ドメイン名アクセスへの逆イントラネット侵入サービス" - send_stats "FRP外部ドメイン名へのアクセス" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します" - read -e -p "リリースするポートを入力してください:" frps_port + 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 + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "FRPサービスステータスを更新します" - echo "FRPサービスステータスは更新されました" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3959,17 +3956,17 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local docker_name="frpc" local docker_port=8055 while true; do clear check_frp_app check_docker_image_update $docker_name - echo -e "FRPクライアント$check_frp $update_status" - echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3977,13 +3974,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3991,7 +3988,7 @@ frpc_panel() { configure_frpc local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4001,7 +3998,7 @@ frpc_panel() { donlond_frp frpc local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRPクライアントが更新されました" + echo "FRP客户端已经更新完成" ;; 3) @@ -4012,7 +4009,7 @@ frpc_panel() { close_port 8055 local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; 4) @@ -4057,68 +4054,68 @@ yt_menu_pro() { fi clear - send_stats "YT-DLPダウンロードツール" + 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 -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 "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" - echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "オプション番号を入力してください:" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "YT-DLPのインストール..." - echo "YT-DLPのインストール..." + 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 local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "インストールが完了しました。任意のキーを押して続行します..." + echo "安装完成。按任意键继续..." read ;; 2) - send_stats "yt-dlpを更新..." - echo "yt-dlpを更新..." + send_stats "正在更新 yt-dlp..." + echo "正在更新 yt-dlp..." sudo yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "更新が完了しました。任意のキーを押して続行します..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "yt-dlpのアンインストール..." - echo "yt-dlpのアンインストール..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." sudo rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "アンインストールが完了しました。任意のキーを押して続行します..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "単一のビデオダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "ダウンロードが完了したら、任意のキーを押して続行します..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "バッチビデオのダウンロード" + 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.0&from_spmid=666.25.Episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "バッチダウンロードを開始します..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4126,31 +4123,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "カスタムビデオのダウンロード" - read -e -p "完全なYT-DLPパラメーター(YT-DLPを除く)を入力してください。" custom + 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 "実行が完了したら、キーを押して続行します..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3ダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "ビデオを削除します" - read -e -p "削除ビデオの名前を入力してください:" rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4186,7 +4183,7 @@ set_timedate() { -# DPKG割り込みの問題を修正します +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4195,7 +4192,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}システムの更新...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4214,7 +4211,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi } @@ -4222,7 +4219,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4251,13 +4248,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "清理包管理器缓存..." apk cache clean - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "APKキャッシュを削除してください..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4275,23 +4272,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "未使用の依存関係をクリーンアップ..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "清理包管理器缓存..." pkg clean -y - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi return @@ -4331,26 +4328,26 @@ fi set_dns_ui() { root_use -send_stats "DNSを最適化します" +send_stats "优化DNS" while true; do clear - echo "DNSアドレスを最適化します" + echo "优化DNS地址" echo "------------------------" - echo "現在のDNSアドレス" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1。外国DNS最適化:" + 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 "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3。DNS構成を手動で編集します" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4358,7 +4355,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "外国のDNS最適化" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4366,12 +4363,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内のDNS最適化" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "DNS構成を手動で編集します" + send_stats "手动编辑DNS配置" ;; *) break @@ -4394,13 +4391,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthenticationが見つかった場合は、はいに設定します + # 如果找到 PasswordAuthentication 设置为 yes 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はyesに設定されています + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4408,7 +4405,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthenticationもPubKeyAuthenticationが一致しない場合は、デフォルト値を設定します + # 如果 PasswordAuthentication 和 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" @@ -4419,7 +4416,7 @@ correct_ssh_config() { new_ssh_port() { - # バックアップSSH構成ファイル + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4432,7 +4429,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSHポートは次のように変更されています。$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4450,7 +4447,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4462,17 +4459,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4490,7 +4487,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4499,26 +4496,26 @@ import_sshkey() { add_sshpasswd() { -echo "ルートパスワードを設定します" +echo "设置你的ROOT密码" 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}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "システムを再インストールします" + 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 @@ -4529,41 +4526,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}最初のパスワード:${gl_huang}LeitboGi0ro${gl_bai}初期ポート:${gl_huang}22${gl_bai}" - echo -e "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4579,21 +4576,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "再インストールするシステムを選択してください:" sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "Debian 13を再インストールします" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4601,49 +4598,49 @@ dd_xitong() { ;; 2) - send_stats "Debian 12を再インストールします" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Debian 11を再インストールします" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Debian 10を再インストールします" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "Ubuntu 24.04を再インストールします" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "Ubuntu 22.04を再インストールします" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Ubuntu 20.04を再インストールします" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "Ubuntu 18.04を再インストールします" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4652,7 +4649,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10を再インストールします" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4660,7 +4657,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9を再インストールします" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4668,7 +4665,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールします" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4676,7 +4673,7 @@ dd_xitong() { ;; 24) - send_stats "alma9を再インストールします" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4684,7 +4681,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10を再インストールします" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4692,7 +4689,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9を再インストールします" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4700,7 +4697,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42を再インストールします" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4708,7 +4705,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41を再インストールします" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4716,7 +4713,7 @@ dd_xitong() { ;; 29) - send_stats "CENTOS10を再インストールします" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4724,7 +4721,7 @@ dd_xitong() { ;; 30) - send_stats "CENTOS9を再インストールします" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4732,7 +4729,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールします" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4740,7 +4737,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールします" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4748,7 +4745,7 @@ dd_xitong() { ;; 33) - send_stats "Kaliを再インストールします" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4756,7 +4753,7 @@ dd_xitong() { ;; 34) - send_stats "Openeulerを再インストールします" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4764,7 +4761,7 @@ dd_xitong() { ;; 35) - send_stats "OpenSuseを再インストールします" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4772,7 +4769,7 @@ dd_xitong() { ;; 36) - send_stats "飛ぶ牛をリロードします" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4781,7 +4778,7 @@ dd_xitong() { 41) - send_stats "Windows11を再インストールします" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4789,13 +4786,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "Windows 10を再インストールします" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Windows 7を再インストールします" + send_stats "重装windows7" 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 @@ -4803,21 +4800,21 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "Windows Server 19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "Windows Server 16を再インストールします" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4825,7 +4822,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11アームを再インストールします" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4842,7 +4839,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3管理" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4855,17 +4852,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "XanmodのBBRV3カーネルをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "カーネル管理" + echo "内核管理" echo "------------------------" - echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4875,7 +4872,7 @@ bbrv3() { # 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:リポジトリを追加します + # 步骤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+') @@ -4884,7 +4881,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmodカーネルが更新されました。再起動後に有効になります" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4894,7 +4891,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4907,14 +4904,14 @@ bbrv3() { else clear - echo "BBR3加速度をセットアップします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "Debian/Ubuntuのみをサポートします" - echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" - echo "VPSには512mのメモリがあります。メモリが不十分なため、接触の欠落を防ぐために、事前に1G仮想メモリを追加してください!" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "VPS是512M内存的,请提前添加1G虚拟内存,防止因内存不足失联!" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4922,12 +4919,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "オペレーティングシステムの種類を決定できません" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4938,7 +4935,7 @@ bbrv3() { # 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:リポジトリを追加します + # 步骤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+') @@ -4949,17 +4946,17 @@ bbrv3() { bbr_on - echo "Xanmodカーネルがインストールされ、BBR3が正常に有効になります。再起動後に有効になります" + 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 "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4968,40 +4965,40 @@ bbrv3() { elrepo_install() { - # Elrepo GPG公開キーをインポートします - echo "Elrepo GPG公開キーをインポートしてください..." + # 导入 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" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # 検出されたオペレーティングシステム情報を印刷します - echo "検出されたオペレーティングシステム:$os_name $os_version" - # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "Elrepoリポジトリ構成(バージョン8)をインストールしてください..." + 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)をインストールしてください..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "サポートされていないシステムバージョン:$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします - echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5009,37 +5006,37 @@ elrepo_install() { elrepo() { root_use - send_stats "レッドハットカーネル管理" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "Elrepo Kernelをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "カーネル管理" + echo "内核管理" echo "------------------------" - echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + 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カーネルを更新します" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" - send_stats "レッドハットカーネルをアンインストールします" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5049,26 @@ elrepo() { else clear - echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" - echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hatカーネルをアップグレードします" + send_stats "升级红帽内核" server_reboot ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5082,7 +5079,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5092,19 +5089,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "スキャンするディレクトリを指定してください。" + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}スキャンディレクトリ$@...${gl_bai}" + 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コマンドパラメーターを作成します + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5113,7 +5110,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Dockerコマンドを実行します + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5119,8 @@ clamav_scan() { 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}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" + 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}" } @@ -5135,23 +5132,23 @@ clamav_scan() { clamav() { root_use - send_stats "ウイルススキャン管理" + send_stats "病毒扫描管理" while true; do clear - echo "クラマブウイルススキャンツール" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" - echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアを含む。" + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3。カスタムディレクトリスキャン${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "フルディスクスキャン" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5160,7 +5157,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5165,8 @@ clamav() { break_end ;; 3) - send_stats "カスタムディレクトリスキャン" - read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5186,21 +5183,21 @@ clamav() { -# 高性能モード最適化関数 +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5212,36 +5209,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # レイテンシを減らすために、大きな透明なページを無効にします + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# イコライゼーションモード最適化関数 +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5253,36 +5250,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # 透明なページを復元します + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# デフォルト設定関数を復元します +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}仮想メモリを復元します...${gl_bai}" + 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}" + 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 @@ -5294,37 +5291,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" - # 透明なページを復元します + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# ウェブサイトの構築最適化機能 +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}ウェブサイトの構築最適化モードに切り替えます...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5336,16 +5333,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # レイテンシを減らすために、大きな透明なページを無効にします + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5356,62 +5353,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linuxカーネルチューニング管理" - echo "Linuxシステムにおけるカーネルパラメーターの最適化" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" - echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" - echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" - echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを同時に改善します。" - echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" - echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" - echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能モードの最適化" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "バランスモードの最適化" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "ウェブサイトの最適化モデル" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "ライブストリーミング最適化" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "ゲームサーバーの最適化" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "デフォルト設定を復元します" + send_stats "还原默认设置" ;; *) break @@ -5438,7 +5435,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5447,17 +5444,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "サポートされていないシステム:$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "サポートされていないシステム、システムタイプは認識できません。" + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5467,29 +5464,29 @@ update_locale() { linux_language() { root_use -send_stats "システム言語を切り替えます" +send_stats "切换系统语言" while true; do clear - echo "現在のシステム言語:$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1。英語2。簡素化された中国語3。伝統的な中国語" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えます" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "簡素化された中国人に切り替えます" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "伝統的な中国人に切り替えます" + send_stats "切换到繁体中文" ;; *) break @@ -5511,7 +5508,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5522,10 +5519,10 @@ break_end shell_bianse() { root_use - send_stats "コマンドラインの美化ツール" + send_stats "命令行美化工具" while true; do clear - echo "コマンドラインの美化ツール" + 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}#" @@ -5535,9 +5532,9 @@ shell_bianse() { 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5582,7 +5579,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "システムリサイクルステーション" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5597,17 +5594,17 @@ linux_trash() { fi clear - echo -e "現在のリサイクルビン${trash_status}" - echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" - echo "3。コンテンツを復元4。リサイクルビンをクリアします" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5615,7 +5612,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5623,23 +5620,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "復元するにはファイル名を入力してください。" file_to_restore + 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ホームディレクトリに復元されました。" + echo "$file_to_restore 已还原到主目录。" else - echo "ファイルは存在しません。" + echo "文件不存在。" fi ;; 4) - read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "リサイクルビンがクリアされました。" + echo "回收站已清空。" fi ;; *) @@ -5651,19 +5648,19 @@ linux_trash() { -# バックアップを作成します +# 创建备份 create_backup() { - send_stats "バックアップを作成します" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # ユーザーにバックアップディレクトリを入力するように求めます - echo "バックアップ例を作成します:" - echo "- 単一のディレクトリをバックアップします: /var /www" - echo "- バックアップ複数のディレクトリ: /etc /home /var /log" - echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" - read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5671,119 +5668,119 @@ create_backup() { "/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 "選択したバックアップディレクトリは次のとおりです。" + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # バックアップを作成します - echo "バックアップを作成します$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # コマンドが成功しているかどうかを確認してください + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "バックアップの作成に失敗しました!" + echo "备份创建失败!" exit 1 fi } -# バックアップを復元します +# 恢复备份 restore_backup() { - send_stats "バックアップを復元します" - # 復元するバックアップを選択します - read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "备份文件不存在!" exit 1 fi - echo "バックアップの回復$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "バックアップと復元を正常に!" + echo "备份恢复成功!" else - echo "バックアップリカバリに失敗しました!" + echo "备份恢复失败!" exit 1 fi } -# バックアップをリストします +# 列出备份 list_backups() { - echo "利用可能なバックアップ:" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# バックアップを削除します +# 删除备份 delete_backup() { - send_stats "バックアップを削除します" + send_stats "删除备份" - read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "备份文件不存在!" exit 1 fi - # バックアップを削除します + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "バックアップは正常に削除されました!" + echo "备份删除成功!" else - echo "バックアップの削除が失敗しました!" + echo "备份删除失败!" exit 1 fi } -# バックアップメインメニュー +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "システムバックアップ機能" - echo "システムバックアップ機能" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } @@ -5795,56 +5792,56 @@ linux_backup() { -# 接続リストを表示します +# 显示连接列表 list_connections() { - echo "接続の保存:" + 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 "- ユーザー名:root" - echo "- ポート:22" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "接続名を入力してください:" name - read -e -p "IPアドレスを入力してください:" ip - read -e -p "ユーザー名(デフォルト:root)を入力してください:" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "ポート番号を入力してください(デフォルト:22):" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "認証方法を選択してください:" - echo "1。パスワード" - echo "2。キー" - read -e -p "選択(1/2)を入力してください:" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + 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" @@ -5853,89 +5850,89 @@ add_connection() { fi ;; *) - echo "無効な選択!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "接続が保存されます!" + echo "连接已保存!" } -# 接続を削除します +# 删除连接 delete_connection() { - send_stats "接続を削除します" - read -e -p "削除するには、接続番号を入力してください。" num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続は見つかりませんでした。" + 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 "接続が削除されました!" + echo "连接已删除!" } -# 接続を使用します +# 使用连接 use_connection() { - send_stats "接続を使用します" - read -e -p "使用するには、接続番号を入力してください。" num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続は見つかりませんでした。" + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "接続$name ($ip)..." + 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.ターゲットサーバーがキーを使用してログインできるかどうか。" + 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 "错误:未安装 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サービスが正常に実行されているかどうか。" + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "SSHリモート接続ツール" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5947,21 +5944,21 @@ ssh_manager() { while true; do clear - echo "SSHリモート接続ツール" - echo "SSHを介して他のLinuxシステムに接続できます" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5977,156 +5974,156 @@ ssh_manager() { -# 利用可能なハードディスクパーティションをリストします +# 列出可用的硬盘分区 list_partitions() { - echo "利用可能なハードディスクパーティション:" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントします +# 挂载分区 mount_partition() { - send_stats "パーティションをマウントします" - read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "パーティションはすでに取り付けられています!" + echo "分区已经挂载!" return fi - # マウントポイントを作成します + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントします + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "パーティションマウントに正常に:$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "パーティションマウントは失敗しました!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# パーティションをアンインストールします +# 卸载分区 unmount_partition() { - send_stats "パーティションをアンインストールします" - read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "パーティションはマウントされていません!" + echo "分区未挂载!" return fi - # パーティションをアンインストールします + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティションのアンインストールに正常に:$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "パーティションのアンインストールに失敗しました!" + echo "分区卸载失败!" fi } -# マウントされたパーティションをリストします +# 列出已挂载的分区 list_mounted_partitions() { - echo "マウントされたパーティション:" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# フォーマットパーティション +# 格式化分区 format_partition() { - send_stats "フォーマットパーティション" - read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "パーティションがマウントされました。最初にアンインストールしてください!" + echo "分区已经挂载,请先卸载!" return fi - # ファイルシステムタイプを選択します - echo "ファイルシステムタイプを選択してください:" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "選択を入力してください:" FS_CHOICE + 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 ;; + *) echo "无效的选择!"; return ;; esac - # フォーマットを確認します - read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作はキャンセルされました。" + echo "操作已取消。" return fi - # フォーマットパーティション - echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティション形式は成功しました!" + echo "分区格式化成功!" else - echo "パーティションのフォーマットが失敗しました!" + echo "分区格式化失败!" fi } -# パーティションステータスを確認します +# 检查分区状态 check_partition() { - send_stats "パーティションステータスを確認します" - read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションステータスを確認します - echo "パーティション /dev /$PARTITION状態:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# メインメニュー +# 主菜单 disk_manager() { - send_stats "ハードディスク管理機能" + send_stats "硬盘管理功能" while true; do clear - echo "ハードディスクパーティション管理" - echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" - echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6135,64 +6132,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } -# タスクリストを表示します +# 显示任务列表 list_tasks() { - echo "保存された同期タスク:" + 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)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/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 + 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 + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + 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" @@ -6200,63 +6197,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "無効なキーコンテンツ!" + echo "无效的密钥内容!" return fi ;; *) - echo "無効な選択!" + echo "无效的选择!" return ;; esac - echo "同期モードを選択してください:" - echo "1。標準モード(-AVZ)" - echo "2。ターゲットファイル(-avz - delete)を削除します" - read -e -p "(1/2)を選択してください:" mode + 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" ;; + *) 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 "タスクが節約されました!" + echo "任务已保存!" } -# タスクを削除します +# 删除任务 delete_task() { - send_stats "同期タスクを削除します" - read -e -p "削除するには、タスク番号を入力してください。" num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:対応するタスクは見つかりませんでした。" + 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 "削除されたタスク!" + echo "任务已删除!" } run_task() { - send_stats "同期タスクを実行します" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # パラメーターを分析します + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6267,51 +6264,51 @@ run_task() { num="$1" fi - # 着信タスク番号がない場合は、ユーザーに入力するように促します + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "実行するタスク番号を入力してください:" num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:タスクは見つかりませんでした!" + 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" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # SSH接続の共通パラメーターを追加します + # 添加 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 "错误:未安装 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" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6319,32 +6316,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同期は完了です!" + echo "同步完成!" else - echo "同期は失敗しました!以下を確認してください。" - echo "1。ネットワーク接続は正常ですか?" - echo "2。リモートホストにアクセスできますか?" - echo "3。認証情報は正しいですか?" - echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# 時限タスクを作成します +# 创建定时任务 schedule_task() { - send_stats "同期タイミングタスクを追加します" + send_stats "添加同步定时任务" - read -e -p "定期的に同期するには、タスク番号を入力してください。" num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "错误: 请输入有效的任务编号!" return fi - echo "時限実行間隔を選択してください:" - echo "1)1時間に1回実行します" - echo "2)1日1回実行します" - echo "3)週に1回実行します" - read -e -p "オプションを入力してください(1/2/3):" interval + 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="" @@ -6352,66 +6349,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "エラー:有効なオプションを入力してください!" ; return ;; + *) 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 "エラー:このタスクのタイミング同期はすでに存在しています!" + echo "错误: 该任务的定时同步已存在!" return fi - # ユーザーにクロンタブを作成します + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "タイミングタスクが作成されました。$cron_job" + echo "定时任务已创建: $cron_job" } -# スケジュールされたタスクを表示します +# 查看定时任务 view_tasks() { - echo "現在のタイミングタスク:" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# タイミングタスクを削除します +# 删除定时任务 delete_task_schedule() { - send_stats "同期タイミングタスクを削除します" - read -e -p "削除するには、タスク番号を入力してください。" num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "削除されたタスク番号$numタイミングタスク" + echo "已删除任务编号 $num 的定时任务" } -# タスク管理メインメニュー +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "RSYNCリモート同期ツール" - echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1.新しいタスクを作成します2。タスクを削除します" - echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6。タイミングタスクを削除します" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6420,9 +6417,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } @@ -6437,7 +6434,7 @@ rsync_manager() { linux_ps() { clear - send_stats "システム情報クエリ" + send_stats "系统信息查询" ip_address @@ -6487,41 +6484,41 @@ linux_ps() { echo "" - echo -e "システム情報クエリ" + 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}Linuxバージョン:${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}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}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}オペレーター:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6アドレス:${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6534,111 +6531,111 @@ linux_tools() { while true; do clear - # send_stats「基本ツール」 - echo -e "基本的なツール" + # 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}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" - echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" - echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" - echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" + echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${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}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}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}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" curl --help - send_stats "カールをインストールします" + send_stats "安装curl" ;; 2) clear install wget clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" wget --help - send_stats "WGETをインストールします" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" sudo --help - send_stats "sudoをインストールします" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" socat -h - send_stats "SOCATをインストールします" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "HTOPをインストールします" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "IFTOPをインストールします" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" unzip - send_stats "unzipをインストールします" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" tar --help - send_stats "タールをインストールします" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" tmux --help - send_stats "tmuxをインストールします" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "ffmpegをインストールします" + send_stats "安装ffmpeg" ;; 11) @@ -6646,7 +6643,7 @@ linux_tools() { install btop clear btop - send_stats "BTOPをインストールします" + send_stats "安装btop" ;; 12) clear @@ -6655,7 +6652,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールします" + send_stats "安装ranger" ;; 13) clear @@ -6664,7 +6661,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDUをインストールします" + send_stats "安装ncdu" ;; 14) clear @@ -6673,7 +6670,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZFをインストールします" + send_stats "安装fzf" ;; 15) clear @@ -6682,7 +6679,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIMをインストールします" + send_stats "安装vim" ;; 16) clear @@ -6691,7 +6688,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールします" + send_stats "安装nano" ;; @@ -6702,7 +6699,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールします" + send_stats "安装git" ;; 21) @@ -6710,67 +6707,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrixをインストールします" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "SLをインストールします" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "バステットをインストールします" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "nsnakeをインストールします" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "Ninvadersをインストールします" + send_stats "安装ninvaders" ;; 31) clear - send_stats "すべてをインストールします" + 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 "すべてをインストールします(ゲームやスクリーンセーバーを除く)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "すべてをアンインストールします" + 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 + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "指定されたソフトウェアをインストールします" + send_stats "安装指定软件" ;; 42) clear - read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "指定されたソフトウェアをアンインストールします" + send_stats "卸载指定软件" ;; 0) @@ -6778,7 +6775,7 @@ linux_tools() { ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -6792,27 +6789,27 @@ linux_tools() { linux_bbr() { clear - send_stats "BBR管理" + 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 "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "AlpineはBBR3を有効にします" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6843,37 +6840,37 @@ linux_docker() { while true; do clear - # send_stats「Docker Management」 + # send_stats "docker管理" echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" - echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" + echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清潔な役に立たないドッカーコンテナとミラーネットワークデータボリューム" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" 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}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}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}Docker環境をアンインストールします" + echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "Docker環境をインストールします" + send_stats "安装docker环境" install_add_docker ;; @@ -6884,22 +6881,22 @@ linux_docker() { 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 "Dockerグローバルステータス" - echo "Dockerバージョン" + send_stats "docker全局状态" + echo "Docker版本" docker -v docker compose version echo "" - echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -6914,8 +6911,8 @@ linux_docker() { 5) while true; do clear - send_stats "Dockerネットワーク管理" - echo "Dockerネットワークリスト" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -6939,36 +6936,36 @@ linux_docker() { done echo "" - echo "ネットワーク操作" + echo "网络操作" echo "------------------------" - echo "1.ネットワークを作成します" - echo "2。インターネットに参加してください" - echo "3。ネットワークを終了します" - echo "4.ネットワークを削除します" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "ネットワークを作成します" - read -e -p "新しいネットワーク名を設定します:" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "インターネットに参加してください" - read -e -p "ネットワーク名に参加してください:" dockernetwork - read -e -p "これらのコンテナはネットワークに追加されます(複数のコンテナ名はスペースで区切られています):" dockernames + 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 + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -6977,8 +6974,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除します" - read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -6992,29 +6989,29 @@ linux_docker() { 6) while true; do clear - send_stats "Dockerボリューム管理" - echo "Dockerボリュームリスト" + send_stats "Docker卷管理" + echo "Docker卷列表" docker volume ls echo "" - echo "ボリューム操作" + echo "卷操作" echo "------------------------" - echo "1.新しいボリュームを作成します" + echo "1. 创建新卷" echo "2. 删除指定卷" - echo "3.すべてのボリュームを削除します" + echo "3. 删除所有卷" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "新しいボリュームを作成します" - read -e -p "新しいボリューム名を設定します:" dockerjuan + send_stats "新建卷" + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7023,7 +7020,7 @@ linux_docker() { ;; 3) - send_stats "すべてのボリュームを削除します" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7032,7 +7029,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7045,7 +7042,7 @@ linux_docker() { ;; 7) clear - send_stats "Dockerクリーニング" + send_stats "Docker清理" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7054,13 +7051,13 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear - send_stats "Dockerソース" + send_stats "Docker源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7073,19 +7070,19 @@ linux_docker() { 11) clear - send_stats "Docker V6が開いています" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker V6レベル" + send_stats "Docker v6 关" docker_ipv6_off ;; 20) clear - send_stats "Dockerアンインストール" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7097,7 +7094,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7106,7 +7103,7 @@ linux_docker() { kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7123,151 +7120,151 @@ linux_test() { while true; do clear - # send_stats「テストスクリプトコレクション」 - echo -e "テストスクリプトコレクション" + # 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ストリーミングメディアのロック解除検出" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}ネットワーク速度測定" - echo -e "${gl_kjlan}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" - echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" - echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" - echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}网络线路测速" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}IICU/GB5 CPUパフォーマンステストスクリプト" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}包括的なテスト" - echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" - echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}综合性测试" + echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" + 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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "CHATGPTはステータス検出のロックを解除します" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "リージョンストリーミングメディアのロック解除テスト" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "YeahWUストリーミングメディアのロック解除検出" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "XYKT_IP品質の身体検査スクリプト" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "MTR_TRACE 3ネットワークリターンラインテスト" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "SuperSpeed Three-Net速度測定" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace高速バックホールテストスクリプト" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "Nxtraceは、IPバックホールテストスクリプトを指定します" - echo "参照できるIPのリスト" + send_stats "nxtrace指定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 "広州通信:58.60.188.222" - echo "広州ユニコム:210.21.196.6" - echo "広州モバイル:120.196.165.24" - echo "成都通信:61.139.2.69" - echo "成都ユニコム:119.6.6.6" - echo "成都モバイル: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 "北京电信: 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "指定されたIPを入力してください:" testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "Ludashi2020 3ネットワークラインテスト" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "I-ABC多機能速度テストスクリプト" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "ネットワーク品質のテストスクリプト" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "YABSパフォーマンステスト" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "ベンチパフォーマンステスト" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX Fusion Monster Review" + 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 ;; @@ -7277,7 +7274,7 @@ linux_test() { ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7293,51 +7290,51 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud Scriptコレクション" - echo -e "Oracle Cloud Scriptコレクション" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}アイドルマシンアクティブスクリプトをインストールします" - echo -e "${gl_kjlan}2. ${gl_bai}アイドルマシンアクティブスクリプトをアンインストールします" + 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}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "アクティブスクリプト:CPUが10-20%を占めるメモリは20%を占めています" - read -e -p "必ずインストールしますか? (y/n):" choice + 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 + # 提示用户输入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 + 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 + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # Dockerコンテナを実行します + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7345,14 +7342,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloudインストールアクティブスクリプト" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7360,20 +7357,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "システムを再インストールします" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - read -e -p "必ず続行しますか? (y/n):" choice + 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 + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7385,28 +7382,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "選択の無効な、再入力してください。" + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "再インストールされたパスワードを入力してください:" vpspasswd + 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再インストールシステムスクリプト" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "この機能は開発段階にあるので、お楽しみに!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7416,15 +7413,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7445,7 +7442,7 @@ docker_tato() { 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}" + 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 } @@ -7453,20 +7450,20 @@ docker_tato() { 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 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}" +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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7494,31 +7491,31 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp webサイトビルディング" - echo -e "${gl_huang}LDNMP Webサイトビルディング" + # 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}WordPressをインストールします${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" - echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" - echo -e "${gl_huang}9. ${gl_bai}LinkStack共有リンクプラットフォームをインストールします${gl_huang}20. ${gl_bai}動的サイトをカスタマイズします" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" - echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" - echo -e "${gl_huang}27. ${gl_bai}AIペイントプロンプトワードジェネレーターをインストールします${gl_huang}28. ${gl_bai}サイトの逆プロキシロードバランス" - echo -e "${gl_huang}30. ${gl_bai}静的サイトをカスタマイズします" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7532,10 +7529,10 @@ linux_ldnmp() { 3) clear - # ディスクフォーラム + # Discuz论坛 webname="Discuz论坛" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7558,21 +7555,21 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; 4) clear - # Kedao Cloudデスクトップ + # 可道云桌面 webname="可道云桌面" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7594,20 +7591,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" - echo "Redisホスト:Redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # Apple CMS + # 苹果CMS webname="苹果CMS" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7633,24 +7630,24 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベースプレフィックス:mac_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "インストールが成功した後、バックグラウンドアドレスにログインします" + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 一本足のカウントカード + # 独脚数卡 webname="独脚数卡" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7671,34 +7668,34 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" - echo "Redisアドレス:Redis" - echo "Redisパスワード:デフォルトで記入されていません" - echo "Redisポート:6379" + echo "redis地址: redis" + echo "redis密码: 默认不填写" + echo "redis端口: 6379" echo "" - echo "ウェブサイトURL:https://$yuming" - echo "バックグラウンドログインパス: /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "ユーザー名:admin" - echo "パスワード:管理者" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" - echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # フララムフォーラム + # flarum论坛 webname="flarum论坛" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7735,12 +7732,12 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:flarum_" - echo "管理者情報は自分で設定されます" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -7748,8 +7745,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7773,11 +7770,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースプレフィックス:typecho_" - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -7786,8 +7783,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7812,18 +7809,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7840,10 +7837,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -7853,20 +7850,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.phpが配置されているパス" + 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 "(/home/web/html/に似たindex.phpのパスを入力してください$yuming/wordpress/): " index_lujing + 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 -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1。PHPの最新バージョン| 2。Php7.4:" pho_v + 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 @@ -7877,15 +7874,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "選択の無効な、再入力してください。" + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "インストールされた拡張機能" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -7895,25 +7892,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -7923,10 +7920,10 @@ linux_ldnmp() { 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 "データベースインポートテーブルデータ" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "データベースのインポートが完了しました" + echo "数据库导入完成" ;; *) echo @@ -7938,12 +7935,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:$prefix" - echo "管理者ログイン情報は自分で設定されます" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -7956,10 +7953,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "ジャンプドメイン名を入力してください:" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -7981,7 +7978,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -7992,11 +7989,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" - read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8016,8 +8013,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8039,8 +8036,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8057,8 +8054,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8091,8 +8088,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8109,10 +8106,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8122,12 +8119,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.htmlが配置されているパス" + 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 "(/home/web/html/に似たindex.htmlへのパスを入力してください$yuming/index/): " index_lujing + 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 @@ -8152,21 +8149,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP環境バックアップ" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "バックアップファイルが作成されました: /home /$backup_filename" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8174,9 +8171,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" + echo "文件已传送至远程服务器home目录。" else - echo "転送されるファイルは見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; @@ -8184,7 +8181,7 @@ linux_ldnmp() { break ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8192,9 +8189,9 @@ linux_ldnmp() { 33) clear - send_stats "タイミングのリモートバックアップ" - read -e -p "リモートサーバーIPを入力してください:" useip - read -e -p "リモートサーバーのパスワードを入力してください:" usepasswd + 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 @@ -8204,18 +8201,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1。毎週のバックアップ2。毎日のバックアップ" - read -e -p "選択を入力してください:" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "毎週のバックアップ(0-6、0は日曜日を表す)の曜日を選択します。" weekday + 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 + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8229,19 +8226,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP環境修復" - echo "利用可能なサイトバックアップ" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + 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 @@ -8251,7 +8248,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8260,7 +8257,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "圧縮パッケージは見つかりませんでした。" + echo "没有找到压缩包。" fi ;; @@ -8278,11 +8275,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP環境を更新します" - echo "LDNMP環境を更新します" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "コンポーネントの新しいバージョンを発見します" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8302,13 +8299,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" + echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5。完全な環境を更新します" + echo "5. 更新完整环境" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8317,7 +8314,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8328,13 +8325,13 @@ linux_ldnmp() { 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}仕上げる" + 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 + 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 @@ -8367,8 +8364,8 @@ linux_ldnmp() { 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}仕上げる" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 4) @@ -8379,15 +8376,15 @@ linux_ldnmp() { 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}仕上げる" + 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環境を完全に更新します" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8413,7 +8410,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP環境をアンインストールします" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8427,7 +8424,7 @@ linux_ldnmp() { ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8437,7 +8434,7 @@ linux_ldnmp() { ;; *) - echo "無効な入力!" + echo "无效的输入!" esac break_end @@ -8455,12 +8452,12 @@ linux_panel() { while true; do clear - echo -e "アプリケーション市場" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # ループで色を設定します + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8469,59 +8466,59 @@ linux_panel() { fi done - echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" - echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" - echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" - echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" - echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" - echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" - echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" - echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" - echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" - echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" - echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" - echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" - echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" - echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" - echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" - echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" - echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" - echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" - echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" - echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -8697,27 +8694,27 @@ linux_panel() { ;; 7) clear - send_stats "ネザを作る" + send_stats "搭建哪吒" local docker_name="nezha-dashboard" local docker_port=8008 while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezhaの監視$check_docker $update_status" - echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" - echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1。使用します" + echo "1. 使用" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -8773,7 +8770,7 @@ linux_panel() { ;; 9) - send_stats "郵便局を建設します" + send_stats "搭建邮局" clear install telnet local docker_name=“mailserver” @@ -8782,43 +8779,43 @@ linux_panel() { check_docker_image_update $docker_name clear - echo -e "郵便局サービス$check_docker $update_status" - echo "Poste.ioはオープンソースメールサーバーソリューションです。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "アクセスアドレス:" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "これらのDNSレコードを最初に解析します" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -8828,7 +8825,7 @@ linux_panel() { echo "TXT ? ?" echo "" echo "------------------------" - echo "任意のキーを押して続行します..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -8847,9 +8844,9 @@ linux_panel() { grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "Poste.ioがインストールされています" + echo "poste.io已经安装完成" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -8872,9 +8869,9 @@ linux_panel() { grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "Poste.ioがインストールされています" + echo "poste.io已经安装完成" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -8885,7 +8882,7 @@ linux_panel() { rm -rf /home/docker/mail local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; *) @@ -8918,7 +8915,7 @@ linux_panel() { clear ip_address - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -8928,7 +8925,7 @@ linux_panel() { 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がインストールされています" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -8938,7 +8935,7 @@ linux_panel() { docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9019,7 +9016,7 @@ linux_panel() { cd /home/docker/cloud/ docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -9033,7 +9030,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9173,27 +9170,27 @@ linux_panel() { ;; 19) - send_stats "サンダープールを構築します" + send_stats "搭建雷池" local docker_name=safeline-mgt local docker_port=9443 while true; do check_docker_app clear - echo -e "サンダープールサービス$check_docker" - echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9203,7 +9200,7 @@ linux_panel() { local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "サンダープールWAFパネルがインストールされています" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9216,7 +9213,7 @@ linux_panel() { local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "サンダープールWAFパネルが更新されました" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9227,7 +9224,7 @@ linux_panel() { docker compose down --rmi all local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9616,7 +9613,7 @@ linux_panel() { local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="公式ウェブサイトの紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -9667,7 +9664,7 @@ linux_panel() { ;; 38) - send_stats "Xiaoyaファミリーバケット" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -9862,9 +9859,9 @@ linux_panel() { prometheus_install clear ip_address - echo "インストール" + echo "已经安装完成" check_docker_app_ip - echo "最初のユーザー名とパスワードは次のとおりです" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -9882,7 +9879,7 @@ linux_panel() { docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9966,7 +9963,7 @@ linux_panel() { 51) clear - send_stats "PVEチキン" + send_stats "PVE开小鸡" 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 ;; @@ -10081,7 +10078,7 @@ linux_panel() { docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10096,7 +10093,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10123,7 +10120,7 @@ linux_panel() { docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10138,7 +10135,7 @@ linux_panel() { docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10146,7 +10143,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10166,17 +10163,17 @@ linux_panel() { docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip - echo "初期ユーザー名:admin" - echo "最初のパスワード:changeme" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "アプリが更新されました" + echo "应用已更新" } @@ -10186,7 +10183,7 @@ linux_panel() { cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10231,7 +10228,7 @@ linux_panel() { sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10247,7 +10244,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10499,7 +10496,7 @@ linux_panel() { docker_rum() { - read -e -p "libretvログインパスワードを設定します。" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10528,7 +10525,7 @@ linux_panel() { docker_rum() { - read -e -p "MOONTVログインパスワードを設定します。" app_passwd + read -e -p "设置MoonTV的登录密码: " app_passwd docker run -d \ --name moontv \ @@ -10611,8 +10608,8 @@ linux_panel() { docker_rum() { - read -e -p "設定${docker_name}ログインユーザー名:" app_use - read -e -p "設定${docker_name}ログインパスワード:" app_passwd + read -e -p "设置${docker_name}的登录用户名: " app_use + read -e -p "设置${docker_name}的登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -10705,11 +10702,11 @@ linux_panel() { install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 公式のDocker-ComposeおよびEnvファイルをダウンロードします + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # ランダムキーとパスワードを生成します + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10718,17 +10715,17 @@ linux_panel() { sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 管理者アカウント情報を追加します + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # コンテナを起動します + # 启动容器 docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10738,7 +10735,7 @@ linux_panel() { curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 元の変数を保持します + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10755,7 +10752,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10804,7 +10801,7 @@ linux_panel() { cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10818,7 +10815,7 @@ linux_panel() { kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -10831,35 +10828,35 @@ linux_work() { while true; do clear - send_stats "バックエンドワークスペース" - echo -e "バックエンドワークスペース" - echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" - echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "現在既存のワークスペースのリスト" + 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}ワークスペースNo. 2" - echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" - echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" - echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" - echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" - echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" - echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" - echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" - echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 10" + 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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -10867,7 +10864,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -10875,63 +10872,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -10943,21 +10940,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常駐モード" - echo -e "SSH常駐モード${tmux_sshd_status}" - echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1。2をオンにします。オフにします" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" gongzuoqu_del + 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 + 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 ;; @@ -10973,29 +10970,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "カスタムワークスペース" + send_stats "自定义工作区" ;; 23) - read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "バックグラウンドワークスペースにコマンドを注入します" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "ワークスペースを削除します" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -11020,54 +11017,54 @@ linux_Settings() { while true; do clear - # send_stats「システムツール」 - echo -e "システムツール" + # 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}指定されたバージョンのPythonをインストールします" - 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}ルートアカウントを無効にして新しいアカウントを作成します${gl_kjlan}10. ${gl_bai}優先順位IPv4/IPv6を切り替えます" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}ウイルススキャンツール${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}ファイルマネージャー" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "ショートカットキーを入力してください(出口に0を入力してください):" kuaijiejian + 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 "スクリプトのショートカットキーが設定されています" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11075,34 +11072,34 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定します" - echo "ログインパスワードを設定します" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "ルートパスワードモード" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "Pyバージョン管理" - echo "Pythonバージョン管理" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 3.12 3.11 3.10 3.9 3.8 2.7" + echo "查询更多版本: https://www.python.org/downloads/" echo "------------" - read -e -p "インストールするPythonバージョン番号を入力します(Enter 0からExit):" py_new_v + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "スクリプトPy管理" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -11135,7 +11132,7 @@ linux_Settings() { 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 "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi @@ -11164,55 +11161,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "スイッチスクリプトPyバージョン" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "オープンポート" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "すべてのポートが開いています" + echo "端口已全部开放" ;; 6) root_use - send_stats "SSHポートを変更します" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 現在のSSHポート番号をお読みください + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # ユーザーに新しいSSHポート番号を入力するように促します - read -e -p "新しいSSHポート番号を入力してください:" new_port + # 提示用户输入新的 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ポートが変更されました" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSHポート変更を終了します" + send_stats "退出SSH端口修改" break else - echo "ポート番号は無効です。1〜65535の数字を入力してください。" - send_stats "無効なSSHポート入力" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "入力が無効です。番号を入力してください。" - send_stats "無効なSSHポート入力" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -11231,8 +11228,8 @@ EOF ;; 9) root_use - send_stats "新しいユーザーはルートを無効にします" - read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11245,49 +11242,49 @@ EOF passwd -l root - echo "操作が完了しました。" + echo "操作已完成。" ;; 10) root_use - send_stats "V4/V6の優先度を設定します" + send_stats "设置v4/v6优先级" while true; do clear - echo "V4/V6の優先度を設定します" + 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}優先度" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "優先ネットワークを選択します。" choice + 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の優先度に切り替えました" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "IPv6の優先度に切り替えました" - send_stats "IPv6の優先度に切り替えました" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -11305,43 +11302,43 @@ EOF 12) root_use - send_stats "仮想メモリを設定します" + send_stats "设置虚拟内存" while true; do clear - echo "仮想メモリを設定します" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G仮想メモリが設定されています" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G仮想メモリが設定されています" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G仮想メモリが設定されています" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "カスタム仮想メモリが設定されています" + send_stats "已设置自定义虚拟内存" ;; *) @@ -11354,8 +11351,8 @@ EOF 13) while true; do root_use - send_stats "ユーザー管理" - echo "ユーザーリスト" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11366,58 +11363,58 @@ EOF echo "" - echo "アカウント操作" + echo "账户操作" echo "------------------------" - echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3.最高の権限を与える4。最高の権限をキャンセルします" + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5.アカウントを削除します" + echo "5. 删除账号" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 新しいユーザーを作成し、パスワードを設定します + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作が完了しました。" + echo "操作已完成。" ;; 2) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 新しいユーザーを作成し、パスワードを設定します + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 新規ユーザーのsudo許可を付与します + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers - echo "操作が完了しました。" + echo "操作已完成。" ;; 3) - read -e -p "ユーザー名を入力してください:" username - # 新規ユーザーのsudo許可を付与します + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers ;; 4) - read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudoアクセス許可を削除します + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "削除するにはユーザー名を入力してください:" username - # ユーザーとそのホームディレクトリを削除します + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -11430,50 +11427,50 @@ EOF 14) clear - send_stats "ユーザー情報ジェネレーター" - echo "ランダムユーザー名" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "ランダムユーザー名$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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つのランダムユーザー名を生成します + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "ランダムuuid" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "ランダムuuid$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16ビットランダムパスワード" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32ビットランダムパスワード" + 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" + echo "随机密码 $i: $password" done echo "" @@ -11481,46 +11478,46 @@ EOF 15) root_use - send_stats "タイムゾーンを変更します" + send_stats "换时区" while true; do clear - echo "システム時間情報" + echo "系统时间信息" - # 現在のシステムタイムゾーンを取得します + # 获取当前系统时区 local timezone=$(current_timezone) - # 現在のシステム時間を取得します + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # タイムゾーンと時間を表示します - echo "現在のシステムタイムゾーン:$timezone" - echo "現在のシステム時間:$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "タイムゾーンの切り替え" + echo "时区切换" echo "------------------------" - echo "アジア" - echo "1。中国の上海時間2。中国の香港時間" - echo "3。日本の東京時間4。韓国のソウル時間" - echo "5。シンガポール時間6。インドのコルカタ時間" - echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" - echo "9。タイのバンコクでの時間" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "アメリカ" - echo "21。WesternTime22。東部時間" - echo "23。カナダ時間24。メキシコの時間" - echo "25。ブラジル時間26。アルゼンチン時間" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31。UTCグローバル標準時間" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11563,21 +11560,21 @@ EOF 18) root_use - send_stats "ホスト名を変更します" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "新しいホスト名を入力してください(出口に0を入力してください):" new_hostname + 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などの他のシステム。 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11595,11 +11592,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "ホスト名は次のように変更されています。$new_hostname" - send_stats "ホスト名が変更されました" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "終了すると、ホスト名は変更されていません。" + echo "已退出,未更改主机名。" break fi done @@ -11607,32 +11604,32 @@ EOF 19) root_use - send_stats "システムの更新ソースを変更します" + send_stats "换系统更新源" clear - echo "更新ソース領域を選択します" - echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "中国本土のデフォルトソース" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国本土の教育源" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外起源" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "キャンセル" + echo "已取消" ;; esac @@ -11640,62 +11637,62 @@ EOF ;; 20) - send_stats "タイミングタスク管理" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "タイミングされたタスクリスト" + echo "定时任务列表" crontab -l echo "" - echo "動作します" + echo "操作" echo "------------------------" - echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1。毎月のタスク2。毎週のタスク" - echo "3。毎日のタスク4。時間ごとのタスク" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "選択を入力してください:" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "毎月何日を選択してタスクを実行しますか? (1-30):" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "時限タスクを追加します" + send_stats "添加定时任务" ;; 2) - read -e -p "削除する必要があるキーワードを入力してください。" kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "タイミングタスクを削除します" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "タイミングタスクを編集します" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -11707,32 +11704,32 @@ EOF 21) root_use - send_stats "ローカルホストの解析" + send_stats "本地host解析" while true; do clear - echo "ネイティブホストのペルシングリスト" - echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "動作します" + echo "操作" echo "------------------------" - echo "1.新しい解析2を追加します。解析アドレスを削除します" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "ローカルホストの解析が追加されました" + send_stats "本地host解析新增" ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "ローカルホストの解析と削除" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -11743,7 +11740,7 @@ EOF 22) root_use - send_stats "SSH防御" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -11755,20 +11752,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防衛プログラム$check_docker" - echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" - echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 安装防御程序" echo "------------------------" - echo "2。SSH傍受記録を表示します" - echo "3。リアルタイムログ監視" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 卸载防御程序" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -11791,7 +11788,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -11804,47 +11801,47 @@ EOF 23) root_use - send_stats "電流制限シャットダウン機能" + send_stats "限流关机功能" while true; do clear - echo "電流制限シャットダウン機能" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # limiting_shut_down.shファイルが存在するかどうかを確認してください + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gbの値を取得します + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 新しい仮想メモリサイズを入力します - echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" - read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -11857,15 +11854,15 @@ EOF (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 "現在の制限シャットダウンが設定されています" + 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 "現在の制限シャットダウン関数はオフになっています" + echo "已关闭限流关机功能" ;; *) break @@ -11878,40 +11875,40 @@ EOF 24) root_use - send_stats "秘密キーログイン" + send_stats "私钥登录" while true; do clear - echo "ルート秘密キーログインモード" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "キーペアが生成され、SSHログインのより安全な方法" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "新しいキーを生成します" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "既存の公開キーをインポートします" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "地元の秘密の鍵を表示します" + send_stats "查看本机密钥" echo "------------------------" - echo "公開鍵情報" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "秘密のキー情報" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -11927,18 +11924,18 @@ EOF 25) root_use - send_stats "電報警告" - echo "TG-BOTモニタリングと早期警告機能" - echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" - echo "しきい値に達した後、ユーザーはユーザーに送信されます" - echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" - read -e -p "必ず続行しますか? (y/n):" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "電報警告が有効になっています" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -11960,7 +11957,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 〜/.Profileファイルに追加します + # 添加到 ~/.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 @@ -11971,21 +11968,21 @@ EOF source ~/.profile clear - echo "TG-BOT早期警告システムが開始されました" - echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "SSHの高リスクの脆弱性を修正します" + 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 @@ -12029,7 +12026,7 @@ EOF ;; 37) clear - send_stats "コマンドラインの履歴" + 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; } @@ -12047,67 +12044,67 @@ EOF 39) clear - send_stats "コマンドラインの履歴" + send_stats "命令行历史记录" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) ;; 41) clear - send_stats "メッセージボード" - echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "ワンストップチューニング" - echo "ワンストップシステムの最適化" + 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 "将对以下内容进行操作与优化" + 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. Linux系统内核参数优化切换到${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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10。システムジャンクファイルをクリーンアップします" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12124,25 +12121,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10。 DNSアドレスを自動的に最適化します${gl_huang}${gl_bai}" + 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 -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。 Linuxシステムのカーネルパラメーターの最適化" - echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -12150,7 +12147,7 @@ EOF 99) clear - send_stats "システムを再起動します" + send_stats "重启系统" server_reboot ;; 100) @@ -12166,32 +12163,32 @@ EOF local status_message="无法确定的状态" fi - echo "プライバシーとセキュリティ" - echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。" + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "現在のステータス:$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1。コレクションをオンにします" - echo "2。コレクションを閉じます" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + 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 "プライバシーとセキュリティコレクションが有効になっています" + 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 "プライバシーとセキュリティは収集のために閉鎖されています" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -12207,11 +12204,11 @@ EOF 102) clear - send_stats "テックライオンスクリプトをアンインストールします" - echo "テックライオンスクリプトをアンインストールします" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" - read -e -p "必ず続行しますか? (y/n):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -12219,16 +12216,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "スクリプトはアンインストールされています、さようなら!" + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -12238,7 +12235,7 @@ EOF ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -12256,187 +12253,187 @@ EOF linux_file() { root_use - send_stats "ファイルマネージャー" + send_stats "文件管理器" while true; do clear - echo "ファイルマネージャー" + echo "文件管理器" echo "------------------------" - echo "現在のパス" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" - echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" - echo "15.ファイルを削除します" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" - echo "25。ファイルを別のサーバーに渡します" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "ディレクトリ名を入力してください:" dirname - cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" - send_stats "ディレクトリに移動します" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "作成するにはディレクトリ名を入力してください。" dirname - mkdir -p "$dirname" && echo "作成されたディレクトリ" || echo "作成に失敗しました" - send_stats "ディレクトリを作成します" + 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 "ディレクトリ権限を変更します" + 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 "ディレクトリの名前を変更します" + 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 "ディレクトリを削除します" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "前のメニューディレクトリに戻ります" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "作成するにはファイル名を入力してください。" filename - touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" - send_stats "ファイルを作成します" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "編集するにはファイル名を入力してください:" filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "ファイルを編集します" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "ファイル名を入力してください:" filename - read -e -p "許可を入力してください(755など):" perm - chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました" - send_stats "ファイル権限を変更します" + 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 "ファイルの名前を変更します" + 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 "ファイルを削除します" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" - send_stats "圧縮ファイル/ディレクトリ" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "ファイル名(.tar.gz)を入力してください:" filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" - send_stats "ファイル/ディレクトリを解凍します" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" - send_stats "ファイルまたはディレクトリを移動します" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # -Rオプションを使用して、ディレクトリを再帰的にコピーします - cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" - send_stats "ファイルまたはディレクトリをコピーします" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "転送されるファイルパスを入力してください。" file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "エラー:ファイルは存在しません。" - send_stats "ファイルの転送に失敗しました:ファイルは存在しません" + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" - send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "エラー:リモートサーバーのパスワードを入力してください。" - send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "ログインポートを入力してください(デフォルト22):" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "スクリプトは最新です$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -12734,15 +12731,15 @@ while true; do (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 "自動スクリプトの更新をオンにします" + 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 "スクリプト自動更新を閉じます" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -12764,41 +12761,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "テクノロジーライオンスクリプトツールボックスv$sh_v" -echo -e "コマンドライン入力${gl_huang}k${gl_kjlan}スクリプトをすばやく開始します${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}ワープ管理" -echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" -echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" -echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" -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}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu Serverオープニングスクリプト" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "選択を入力してください:" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "システムの更新" ; linux_update ;; - 3) clear ; send_stats "システムのクリーンアップ" ; linux_clean ;; + 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 + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -12809,13 +12806,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "無効な入力!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -12823,47 +12820,47 @@ done k_info() { -send_stats "Kコマンド参照ユースケース" +send_stats "k命令参考用例" echo "-------------------" -echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "以下は、Kコマンドリファレンスユースケースです。" -echo "スクリプトkを開始します" -echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" -echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" -echo "システムKアップデートを更新| Kアップデート" -echo "クリーンシステムガベージkクリーン| kきれい" -echo "システムパネルk dd |を再インストールしますk再インストール" -echo "BBR3コントロールパネルK BBR3 | K BBRV3" -echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" -echo "仮想メモリkスワップ2048を設定します" -echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" -echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" -echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" -echo "SSHリモート接続ツールK SSH | Kリモート接続" -echo "rsyncリモート同期ツールk rsync | Kリモート同期" -echo "ハードディスク管理ツールKディスク| Kハードディスク管理" -echo "イントラネット浸透(サーバー側)K FRP" -echo "イントラネット浸透(クライアント)K FRPC" -echo "ソフトウェアStart K Start SSHD | k sshdを開始します" -echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" -echo "ソフトウェア再起動k再起動sshd | k再起動sshd" -echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" -echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" -echo "ドメイン名証明書アプリケーションK SSL" -echo "ドメイン名証明書の有効期限クエリK SSL PS" -echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" -echo "Docker Container Management K Docker PS | K Dockerコンテナ" -echo "Docker Image Management K Docker IMG | K Docker画像" -echo "LDNMPサイト管理k Web" -echo "LDNMPキャッシュクリーンアップK Webキャッシュ" -echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" -echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" -echo "ロードバランスkロードバランス| kロードバランシングをインストールします" -echo "ファイアウォールパネルk fhq | kファイアウォール" -echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" } @@ -12871,19 +12868,19 @@ echo "ブロック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 "ソフトウェアをインストールします" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "ソフトウェアをアンインストールします" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -12917,7 +12914,7 @@ else rsync_run) shift - send_stats "タイム付きRSYNC同期" + send_stats "定时rsync同步" run_task "$@" ;; @@ -12936,7 +12933,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -12949,13 +12946,13 @@ else swap) shift - send_stats "仮想メモリをすばやく設定します" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンをすばやく設定します" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -12999,42 +12996,42 @@ else status|状态) shift - send_stats "ソフトウェアステータスビュー" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "ソフトウェアスタートアップ" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "ソフトウェアの一時停止" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "ソフトウェアの再起動" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "ソフトウェアが起動します" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "証明書のステータスを確認してください" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "すぐに証明書を申請してください" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "すぐに証明書を申請してください" + send_stats "快速申请证书" else k_info fi @@ -13044,15 +13041,15 @@ else shift case $1 in install|安装) - send_stats "Dockerをすばやくインストールします" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "クイックコンテナ管理" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "クイックミラー管理" + send_stats "快捷镜像管理" docker_image ;; *) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index ab2dde8ff..7f7308d0c 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="true" +permission_granted="false" ENABLE_STATS="true" @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -1185,7 +1185,7 @@ iptables_panel() { 5) # IP 화이트리스트 - read -e -p "해제 할 IP 또는 IP 세그먼트를 입력하십시오." o_ip + read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip allow_ip $o_ip ;; 6) @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 생성 해야하는지 확인하십시오 +# 가상 메모리를 만들어야하는지 확인하십시오 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1556,7 +1556,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -2119,7 +2119,7 @@ web_security() { 22) send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" echo "--------------" echo "CF 매개 변수 가져 오기 :" echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" @@ -2363,8 +2363,16 @@ web_optimization() { } + + + + + + + + check_docker_app() { - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2375,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker = "$ {gl_lv} $ {gl_bai} 설치" # else # check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" @@ -2719,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2832,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -3225,8 +3233,6 @@ ldnmp_wp() { 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 @@ -3238,11 +3244,6 @@ ldnmp_wp() { restart_ldnmp nginx_web_on -# Echo "데이터베이스 이름 : $ dbname" -# Echo "사용자 이름 : $ dbuse" -# echo "비밀번호 : $ dbusepasswd" -# Echo "데이터베이스 주소 : mysql" -# 에코 "테이블 접두사 : wp_" } @@ -3293,7 +3294,6 @@ ldnmp_Proxy_backend() { add_yuming fi - # 사용자가 입력 한 여러 IP를 얻습니다 : 포트 (공간별로 분리) if [ -z "$reverseproxy_port" ]; then read -e -p "공간으로 분리 된 여러 반세대 IP+ 포트를 입력하십시오 (예 : 127.0.0.1:3000 127.0.1:3002) :" reverseproxy_port fi @@ -3310,13 +3310,11 @@ ldnmp_Proxy_backend() { 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 @@ -3343,11 +3341,11 @@ 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 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}" + local db_output="${gl_lv}${db_count}${gl_bai}" clear send_stats "LDNMP 사이트 관리" @@ -3355,8 +3353,7 @@ ldnmp_web_status() { echo "------------------------" ldnmp_v - # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' - echo -e "${output}인증서 만료 시간" + echo -e "대지:${output}인증서 만료 시간" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3369,7 +3366,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "${db_output}" + 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" @@ -3939,7 +3936,7 @@ frps_panel() { 8) send_stats "IP 액세스를 차단하십시오" - echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단하십시오." + echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단할 수 있습니다." read -e -p "차단 해야하는 포트를 입력하십시오." frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -5807,7 +5804,7 @@ list_connections() { # 새 연결을 추가하십시오 add_connection() { send_stats "새 연결을 추가하십시오" - echo "새 연결 예제 :" + echo "새 연결을 만드는 예 :" echo "- 연결 이름 : my_server" echo "-IP 주소 : 192.168.1.100" echo "- 사용자 이름 : 루트" @@ -6550,7 +6547,7 @@ linux_tools() { 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}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}모든 것을 제거하십시오" @@ -6749,7 +6746,7 @@ linux_tools() { 32) clear - send_stats "모든 설치 (게임 및 스크린 세이버 제외)" + send_stats "모든 설치 (게임 및 화면 보호기 제외)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; @@ -7453,20 +7450,20 @@ docker_tato() { 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 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}" +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" + echo -e "${gl_lv}환경이 설치됩니다${gl_bai}대지:$output데이터 베이스:$db_output" fi fi @@ -7682,7 +7679,7 @@ linux_ldnmp() { echo "Redis Port : 6379" echo "" echo "웹 사이트 URL : https : //$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "백엔드 로그인 경로 : /admin" echo "------------------------" echo "사용자 이름 : 관리자" echo "비밀번호 : 관리자" @@ -7913,7 +7910,7 @@ linux_ldnmp() { ;; 2) echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download_db + read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8707,7 +8704,7 @@ linux_panel() { echo -e "Nezha 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8797,7 +8794,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "액세스 주소 :" echo "https://$yuming" @@ -9183,7 +9180,7 @@ linux_panel() { echo -e "썬더 풀 서비스$check_docker" echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" @@ -11066,7 +11063,7 @@ 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 "바로 가기 키가 설정되었습니다" + echo "바로 가기 키가 설정되어 있습니다" send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 82089bc1d..d4a764461 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -13,7 +13,7 @@ gl_kjlan='\033[96m' canshu="default" -permission_granted="true" +permission_granted="false" ENABLE_STATS="true" @@ -2363,8 +2363,16 @@ web_optimization() { } + + + + + + + + check_docker_app() { - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2375,7 +2383,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then +# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then # check_docker="${gl_lv}已安裝${gl_bai}" # else # check_docker="${gl_hui}未安裝${gl_bai}" @@ -2719,7 +2727,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2832,7 +2840,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -3225,8 +3233,6 @@ ldnmp_wp() { 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 @@ -3238,11 +3244,6 @@ ldnmp_wp() { restart_ldnmp nginx_web_on -# echo "數據庫名: $dbname" -# echo "用戶名: $dbuse" -# echo "密碼: $dbusepasswd" -# echo "數據庫地址: mysql" -# echo "表前綴: wp_" } @@ -3293,7 +3294,6 @@ ldnmp_Proxy_backend() { 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 @@ -3310,13 +3310,11 @@ ldnmp_Proxy_backend() { sed -i "s/yuming.com/$yuming/g" /home/web/conf.d/$yuming.conf - # 動態生成 upstream 配置 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 @@ -3343,11 +3341,11 @@ 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 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}" + local db_output="${gl_lv}${db_count}${gl_bai}" clear send_stats "LDNMP站點管理" @@ -3355,8 +3353,7 @@ ldnmp_web_status() { echo "------------------------" ldnmp_v - # ls -t /home/web/conf.d | sed 's/\.[^.]*$//' - echo -e "${output}證書到期時間" + echo -e "站點:${output}證書到期時間" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3369,7 +3366,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "${db_output}" + 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" @@ -7453,20 +7450,20 @@ docker_tato() { 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 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}" +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" + echo -e "${gl_lv}環境已安裝${gl_bai}站點:$output資料庫:$db_output" fi fi @@ -8707,7 +8704,7 @@ linux_panel() { echo -e "哪吒監控$check_docker $update_status" echo "開源、輕量、易用的服務器監控與運維工具" echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -8797,7 +8794,7 @@ linux_panel() { fi echo "" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) echo "訪問地址:" echo "https://$yuming" @@ -9183,7 +9180,7 @@ linux_panel() { echo -e "雷池服務$check_docker" echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" From 76bfe88ea8fe795ab8c50ae1ccf390b29fb25e15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:12:28 +0800 Subject: [PATCH 016/553] Update kejilion.sh --- cn/kejilion.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2d8da0e91..d30ad375e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="CN" +canshu="default" permission_granted="false" ENABLE_STATS="true" @@ -4076,8 +4076,8 @@ yt_menu_pro() { 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 + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp + chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." @@ -4085,7 +4085,7 @@ yt_menu_pro() { 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." - sudo yt-dlp -U + yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." @@ -4093,7 +4093,7 @@ yt_menu_pro() { 3) send_stats "正在卸载 yt-dlp..." echo "正在卸载 yt-dlp..." - sudo rm -f /usr/local/bin/yt-dlp + rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "卸载完成。按任意键继续..." @@ -10409,7 +10409,7 @@ linux_panel() { mkdir -p /home/docker/astrbot/data - sudo docker run -d \ + docker run -d \ -p ${docker_port}:6185 \ -p 6195:6195 \ -p 6196:6196 \ From 756bdbba1558dd6779ff68f49a551e5e4c03d05a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:12:48 +0800 Subject: [PATCH 017/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index d30ad375e..55faf3817 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="default" +canshu="CN" permission_granted="false" ENABLE_STATS="true" From 3392bc8e50590796b291343ba0f4e9ecb278a998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:13:22 +0800 Subject: [PATCH 018/553] Update kejilion.sh --- kejilion.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 39cd0eba5..d30ad375e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -4076,8 +4076,8 @@ yt_menu_pro() { 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 + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp + chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." @@ -4085,7 +4085,7 @@ yt_menu_pro() { 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." - sudo yt-dlp -U + yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." @@ -4093,7 +4093,7 @@ yt_menu_pro() { 3) send_stats "正在卸载 yt-dlp..." echo "正在卸载 yt-dlp..." - sudo rm -f /usr/local/bin/yt-dlp + rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "卸载完成。按任意键继续..." @@ -10409,7 +10409,7 @@ linux_panel() { mkdir -p /home/docker/astrbot/data - sudo docker run -d \ + docker run -d \ -p ${docker_port}:6185 \ -p 6195:6195 \ -p 6196:6196 \ From 40b88e73a73a7af20ffbfcff694bef0078405fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:29:50 +0800 Subject: [PATCH 019/553] Update kejilion.sh --- cn/kejilion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 55faf3817..b7734a1a9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11238,6 +11238,8 @@ EOF useradd -m -s /bin/bash "$new_username" passwd "$new_username" + install sudo + echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root From 0fe76b122051603902d1bc5b82b590aa668d7d6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:30:32 +0800 Subject: [PATCH 020/553] Update kejilion.sh --- kejilion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index d30ad375e..9e927dcc1 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11238,6 +11238,8 @@ EOF useradd -m -s /bin/bash "$new_username" passwd "$new_username" + install sudo + echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root From dd0d2293297df6e532320529e62248108708e7c6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 11 Aug 2025 10:03:17 +0000 Subject: [PATCH 021/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-11=2010:03:17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 12 +- jp/kejilion.sh | 164 +++---- kr/kejilion.sh | 1242 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 12 +- 4 files changed, 719 insertions(+), 711 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 839b9a966..cb43a64c1 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -4076,8 +4076,8 @@ yt_menu_pro() { send_stats "Installing yt-dlp..." echo "Installing 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 + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp + chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "The installation is complete. Press any key to continue..." @@ -4085,7 +4085,7 @@ yt_menu_pro() { 2) send_stats "Update yt-dlp..." echo "Update yt-dlp..." - sudo yt-dlp -U + yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "Update completed. Press any key to continue..." @@ -4093,7 +4093,7 @@ yt_menu_pro() { 3) send_stats "Uninstalling yt-dlp..." echo "Uninstalling yt-dlp..." - sudo rm -f /usr/local/bin/yt-dlp + rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "Uninstall is complete. Press any key to continue..." @@ -10409,7 +10409,7 @@ linux_panel() { mkdir -p /home/docker/astrbot/data - sudo docker run -d \ + docker run -d \ -p ${docker_port}:6185 \ -p 6195:6195 \ -p 6196:6196 \ @@ -11238,6 +11238,8 @@ EOF useradd -m -s /bin/bash "$new_username" passwd "$new_username" + install sudo + echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 01a706586..a13c90652 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# コマンドを実行する関数を定義します +# 定义一个函数来执行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! -# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 -# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# ユーザーに条件に同意するように促します +# 提示用户同意条款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" - echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" - echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" + echo "首次使用脚本,请先阅读并同意用户许可协议。" + echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "上記の条件に同意しますか? (y/n):" user_input + read -r -p "是否同意以上条款?(y/n): " user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "ライセンスの同意" + 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 "許可の拒否" + send_stats "许可拒绝" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}インストール$package...${gl_bai}" + echo -e "${gl_huang}正在安装 $package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "現在利用可能なスペース:$((available_space_mb/1024))g" - echo "最小需要スペース:${required_gb}G" - echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" - send_stats "ディスクスペースが不十分です" + echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" + echo "当前可用空间: $((available_space_mb/1024))G" + echo "最小需求空间: ${required_gb}G" + echo "无法继续安装,请清理磁盘空间后重试。" + send_stats "磁盘空间不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}アンインストール$package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return 1 fi done } -# さまざまな分布に適したUniversal SystemCTL関数 +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# サービスを再起動します +# 重启服务 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1サービスは再開されました。" + echo "$1 服务已重启。" else - echo "エラー:再起動$1サービスは失敗しました。" + echo "错误:重启 $1 服务失败。" fi } -# サービスを開始します +# 启动服务 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1サービスが開始されました。" + echo "$1 服务已启动。" else - echo "エラー:開始$1サービスは失敗しました。" + echo "错误:启动 $1 服务失败。" fi } -# サービスを停止します +# 停止服务 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1サービスは停止しました。" + echo "$1 服务已停止。" else - echo "エラー:停止します$1サービスは失敗しました。" + echo "错误:停止 $1 服务失败。" fi } -# サービスのステータスを確認します +# 查看服务状态 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1サービスステータスが表示されます。" + echo "$1 服务状态已显示。" else - echo "エラー:表示できません$1サービスステータス。" + echo "错误:无法显示 $1 服务状态。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME電源を入れるように設定します。" + echo "$SERVICE_NAME 已设置为开机自启。" } break_end() { - echo -e "${gl_lv}操作が完了しました${gl_bai}" - echo "任意のキーを押して続行します..." + echo -e "${gl_lv}操作完成${gl_bai}" + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -425,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker環境のインストール...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -500,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Dockerコンテナ管理" - echo "Dockerコンテナリスト" + send_stats "Docker容器管理" + echo "Docker容器列表" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "コンテナ操作" + echo "容器操作" echo "------------------------" - echo "1.新しいコンテナを作成します" + echo "1. 创建新的容器" echo "------------------------" - echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" - echo "3.指定された容器を停止します7。すべての容器を停止します" - echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" - echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" + echo "2. 启动指定容器 6. 启动所有容器" + echo "3. 停止指定容器 7. 停止所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11。指定されたコンテナを入力します12。コンテナログを表示します" - echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "新しいコンテナを作成します" - read -e -p "作成コマンドを入力してください:" dockername + send_stats "新建容器" + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "指定された容器を起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) - send_stats "指定された容器を停止します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "停止指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "指定されたコンテナを削除します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "指定された容器を再起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "重启指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker restart $dockername ;; 6) - send_stats "すべてのコンテナを起動します" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) - send_stats "すべてのコンテナを停止します" + send_stats "停止所有容器" docker stop $(docker ps -q) ;; 8) - send_stats "すべてのコンテナを削除します" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "すべてのコンテナを再起動します" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) send_stats "进入容器" - read -e -p "コンテナ名を入力してください:" dockername + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "コンテナログを表示します" - read -e -p "コンテナ名を入力してください:" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "コンテナネットワークを表示します" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,13 +604,13 @@ while true; do break_end ;; 14) - send_stats "コンテナの占有を表示します" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "コンテナポートアクセスを許可します" + send_stats "允许容器端口访问" read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" @@ -620,8 +620,8 @@ while true; do ;; 16) - send_stats "コンテナポートアクセスをブロックします" - read -e -p "コンテナ名を入力してください:" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,7 +640,7 @@ done docker_image() { while true; do clear - send_stats "Docker画像管理" + send_stats "Docker镜像管理" echo "Docker镜像列表" docker image ls echo "" @@ -4076,8 +4076,8 @@ yt_menu_pro() { 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 + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp + chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." @@ -4085,7 +4085,7 @@ yt_menu_pro() { 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." - sudo yt-dlp -U + yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." @@ -4093,7 +4093,7 @@ yt_menu_pro() { 3) send_stats "正在卸载 yt-dlp..." echo "正在卸载 yt-dlp..." - sudo rm -f /usr/local/bin/yt-dlp + rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "卸载完成。按任意键继续..." @@ -10409,7 +10409,7 @@ linux_panel() { mkdir -p /home/docker/astrbot/data - sudo docker run -d \ + docker run -d \ -p ${docker_port}:6185 \ -p 6195:6195 \ -p 6196:6196 \ @@ -11238,6 +11238,8 @@ EOF useradd -m -s /bin/bash "$new_username" passwd "$new_username" + install sudo + echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 7f7308d0c..3ee9acbaf 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -4076,8 +4076,8 @@ yt_menu_pro() { 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 + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp + chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." @@ -4085,7 +4085,7 @@ yt_menu_pro() { 2) send_stats "yt-dlp 업데이트 ..." echo "yt-dlp 업데이트 ..." - sudo yt-dlp -U + yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." @@ -4093,7 +4093,7 @@ yt_menu_pro() { 3) send_stats "yt-dlp 제거 ..." echo "yt-dlp 제거 ..." - sudo rm -f /usr/local/bin/yt-dlp + rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." @@ -10166,14 +10166,14 @@ linux_panel() { echo "설치" check_docker_app_ip echo "초기 사용자 이름 : 관리자" - echo "초기 비밀번호 : changeme" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "앱이 업데이트되었습니다" + echo "应用已更新" } @@ -10409,7 +10409,7 @@ linux_panel() { mkdir -p /home/docker/astrbot/data - sudo docker run -d \ + docker run -d \ -p ${docker_port}:6185 \ -p 6195:6195 \ -p 6196:6196 \ @@ -10496,7 +10496,7 @@ linux_panel() { docker_rum() { - read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10525,7 +10525,7 @@ linux_panel() { docker_rum() { - read -e -p "MOONTV 로그인 비밀번호 설정 :" app_passwd + read -e -p "设置MoonTV的登录密码: " app_passwd docker run -d \ --name moontv \ @@ -10608,8 +10608,8 @@ linux_panel() { docker_rum() { - read -e -p "설정${docker_name}로그인 사용자 이름 :" app_use - read -e -p "설정${docker_name}로그인 비밀번호 :" app_passwd + read -e -p "设置${docker_name}的登录用户名: " app_use + read -e -p "设置${docker_name}的登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -10702,11 +10702,11 @@ linux_panel() { install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 임의의 키와 암호를 생성합니다 + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10715,17 +10715,17 @@ linux_panel() { sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 관리자 계정 정보를 추가하십시오 + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 컨테이너를 시작하십시오 + # 启动容器 docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10735,7 +10735,7 @@ linux_panel() { curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 원래 변수를 유지하십시오 + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10752,7 +10752,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10801,7 +10801,7 @@ linux_panel() { cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10815,7 +10815,7 @@ linux_panel() { kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -10828,35 +10828,35 @@ linux_work() { while true; do clear - send_stats "백엔드 작업 공간" - echo -e "백엔드 작업 공간" - echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." - echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." - echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "현재 기존 작업 공간 목록" + 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}작업 공간 No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" - echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" - echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" - echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" - echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}작업 공간 번호 10" + 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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -10864,7 +10864,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -10872,63 +10872,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -10940,21 +10940,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH 거주 모드" - echo -e "SSH 거주 모드${tmux_sshd_status}" - echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1. 2를 켜십시오. 2를 끕니다" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" gongzuoqu_del + 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 + 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 ;; @@ -10970,29 +10970,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "사용자 정의 작업 공간" + send_stats "自定义工作区" ;; 23) - read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "배경 작업 공간에 명령을 주입합니다" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "작업 공간을 삭제합니다" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -11017,54 +11017,54 @@ linux_Settings() { while true; do clear - # Send_stats "시스템 도구" - echo -e "시스템 도구" + # 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}지정된 버전의 Python을 설치하십시오" - 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${gl_kjlan}10. ${gl_bai}우선 순위 IPv4/IPv6을 전환하십시오" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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 고위험 취약점을 수정하십시오" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}바이러스 스캐닝 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "바로 가기 키를 입력하십시오 (종료하려면 0을 입력하십시오) :" kuaijiejian + 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 "스크립트 바로 가기 키가 설정되었습니다" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11072,34 +11072,34 @@ linux_Settings() { 2) clear - send_stats "로그인 비밀번호를 설정하십시오" - echo "로그인 비밀번호를 설정하십시오" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "루트 비밀번호 모드" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "PY 버전 관리" - echo "파이썬 버전 관리" - echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 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 + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "스크립트 PY 관리" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -11132,7 +11132,7 @@ linux_Settings() { 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 "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi @@ -11161,55 +11161,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" - send_stats "스크립트 Py 버전을 스위치하십시오" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "포트 열기" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "모든 포트가 열려 있습니다" + echo "端口已全部开放" ;; 6) root_use - send_stats "SSH 포트를 수정하십시오" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 현재 SSH 포트 번호를 읽으십시오 + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # 사용자에게 새 SSH 포트 번호를 입력하라는 메시지 - read -e -p "새로운 SSH 포트 번호를 입력하십시오 :" new_port + # 提示用户输入新的 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 포트가 수정되었습니다" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSH 포트 수정을 종료하십시오" + send_stats "退出SSH端口修改" break else - echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "입력이 유효하지 않으므로 번호를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -11228,8 +11228,8 @@ EOF ;; 9) root_use - send_stats "신규 사용자는 루트를 비활성화합니다" - read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11238,53 +11238,55 @@ EOF useradd -m -s /bin/bash "$new_username" passwd "$new_username" + install sudo + echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 10) root_use - send_stats "V4/V6 우선 순위를 설정하십시오" + send_stats "设置v4/v6优先级" while true; do clear - echo "V4/V6 우선 순위를 설정하십시오" + 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}우선 사항" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1. IPv4 우선 순위 2. IPv6 우선 순위 3. IPv6 수리 도구" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선호하는 네트워크를 선택하십시오." choice + 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 우선 순위로 전환되었습니다" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "IPv6 우선 순위로 전환되었습니다" - send_stats "IPv6 우선 순위로 전환되었습니다" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." - send_stats "IPv6 수정" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -11302,43 +11304,43 @@ EOF 12) root_use - send_stats "가상 메모리를 설정합니다" + send_stats "设置虚拟内存" while true; do clear - echo "가상 메모리를 설정합니다" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G 가상 메모리가 설정되었습니다" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G 가상 메모리가 설정되었습니다" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "사용자 정의 가상 메모리가 설정되었습니다" + send_stats "已设置自定义虚拟内存" ;; *) @@ -11351,8 +11353,8 @@ EOF 13) while true; do root_use - send_stats "사용자 관리" - echo "사용자 목록" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11363,58 +11365,58 @@ EOF echo "" - echo "계정 운영" + echo "账户操作" echo "------------------------" - echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5. 계정을 삭제하십시오" + echo "5. 删除账号" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 2) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 새로운 사용자에게 허가를 부여하십시오 + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 3) - read -e -p "사용자 이름을 입력하십시오 :" username - # 새로운 사용자에게 허가를 부여하십시오 + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers ;; 4) - read -e -p "사용자 이름을 입력하십시오 :" username - # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "삭제하려면 사용자 이름을 입력하십시오." username - # 사용자와 홈 디렉토리를 삭제하십시오 + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -11427,50 +11429,50 @@ EOF 14) clear - send_stats "사용자 정보 생성기" - echo "임의의 사용자 이름" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "임의의 사용자 이름$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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 개의 임의의 사용자 이름을 생성합니다 + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "무작위 uuid" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "무작위 uuid$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16 비트 랜덤 비밀번호" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32 비트 랜덤 비밀번호" + 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" + echo "随机密码 $i: $password" done echo "" @@ -11478,46 +11480,46 @@ EOF 15) root_use - send_stats "시간대를 변경하십시오" + send_stats "换时区" while true; do clear - echo "시스템 시간 정보" + echo "系统时间信息" - # 현재 시스템 시간대를 얻으십시오 + # 获取当前系统时区 local timezone=$(current_timezone) - # 현재 시스템 시간을 얻으십시오 + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 시간대와 시간을 보여줍니다 - echo "현재 시스템 시간대 :$timezone" - echo "현재 시스템 시간 :$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "시간대 스위칭" + echo "时区切换" echo "------------------------" - echo "아시아" - echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" - echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" - echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" - echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" - echo "9. 태국 방콕에서의 시간" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "미국" - echo "21. 서양 시간 22. 동부 시간" - echo "23. 캐나다 시간 24. 멕시코 시간" - echo "25. 브라질 시간 26. 아르헨티나 시간" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31. UTC 글로벌 표준 시간" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11560,21 +11562,21 @@ EOF 18) root_use - send_stats "호스트 이름을 수정하십시오" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "새 호스트 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_hostname + 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 등과 같은 다른 시스템 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11592,11 +11594,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" - send_stats "호스트 이름이 변경되었습니다" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "종료, 호스트 이름이 변경되지 않았습니다." + echo "已退出,未更改主机名。" break fi done @@ -11604,32 +11606,32 @@ EOF 19) root_use - send_stats "시스템 업데이트 소스를 변경하십시오" + send_stats "换系统更新源" clear - echo "업데이트 소스 영역을 선택하십시오" - echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "중국 본토의 기본 소스" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "중국 본토의 교육 원" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "해외 출신" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "취소" + echo "已取消" ;; esac @@ -11637,62 +11639,62 @@ EOF ;; 20) - send_stats "타이밍 작업 관리" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "시간이 정한 작업 목록" + echo "定时任务列表" crontab -l echo "" - echo "작동하다" + echo "操作" echo "------------------------" - echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1. 월간 작업 2. 주간 작업" - echo "3. 일일 작업 4. 시간당 작업" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "선택을 입력하십시오 :" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "작업을 수행하려면 매월 어느 날을 선택합니까? (1-30) :" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "시간이 정한 작업을 추가하십시오" + send_stats "添加定时任务" ;; 2) - read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "타이밍 작업을 삭제하십시오" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "타이밍 작업 편집" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -11704,32 +11706,32 @@ EOF 21) root_use - send_stats "지역 호스트 구문 분석" + send_stats "本地host解析" while true; do clear - echo "기본 호스트 구문 분석 목록" - echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "작동하다" + echo "操作" echo "------------------------" - echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "로컬 호스트 구문 분석이 추가되었습니다" + send_stats "本地host解析新增" ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "로컬 호스트 구문 분석 및 삭제" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -11740,7 +11742,7 @@ EOF 22) root_use - send_stats "SSH 방어" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -11752,20 +11754,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH 방어 프로그램$check_docker" - echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" - echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 安装防御程序" echo "------------------------" - echo "2. SSH 차단 레코드보기" - echo "3. 실시간 로그 모니터링" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -11788,7 +11790,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -11801,47 +11803,47 @@ EOF 23) root_use - send_stats "현재 제한 종료 기능" + send_stats "限流关机功能" while true; do clear - echo "현재 제한 종료 기능" - echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # limiting_shut_down.sh 파일이 있는지 확인하십시오 + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gb의 값을 얻으십시오 + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 새 가상 메모리 크기를 입력하십시오 - echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." - read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -11854,15 +11856,15 @@ EOF (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 "전류 제한 종료가 설정되었습니다" + 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 "전류 제한 종료 기능이 꺼졌습니다" + echo "已关闭限流关机功能" ;; *) break @@ -11875,40 +11877,40 @@ EOF 24) root_use - send_stats "개인 키 로그인" + send_stats "私钥登录" while true; do clear - echo "루트 비공개 키 로그인 모드" - echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "새로운 키를 생성하십시오" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "기존 공개 키를 가져옵니다" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "로컬 비밀 키를보십시오" + send_stats "查看本机密钥" echo "------------------------" - echo "공개 키 정보" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "개인 키 정보" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -11924,18 +11926,18 @@ EOF 25) root_use - send_stats "전보 경고" - echo "TG-BOT 모니터링 및 조기 경고 기능" - echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." - echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" - read -e -p "계속할거야? (Y/N) :" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "전보 경고가 활성화되었습니다" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -11957,7 +11959,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # ~/.profile 파일에 추가하십시오 + # 添加到 ~/.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 @@ -11968,21 +11970,21 @@ EOF source ~/.profile clear - echo "TG-BOT 조기 경고 시스템이 시작되었습니다" - echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "SSH에서 고위험 취약점을 수정하십시오" + 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 @@ -12026,7 +12028,7 @@ EOF ;; 37) clear - send_stats "명령 줄 기록" + 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; } @@ -12044,67 +12046,67 @@ EOF 39) clear - send_stats "명령 줄 기록" + send_stats "命令行历史记录" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) ;; 41) clear - send_stats "게시판" - echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "원 스톱 튜닝" - echo "원 스톱 시스템 최적화" + 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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "원 스톱 튜닝 시작" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 시스템 정크 파일 정리" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12121,25 +12123,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소를 자동으로 최적화합니다${gl_huang}${gl_bai}" + 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 -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. Linux 시스템의 커널 매개 변수 최적화" - echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -12147,7 +12149,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하십시오" + send_stats "重启系统" server_reboot ;; 100) @@ -12163,32 +12165,32 @@ EOF local status_message="无法确定的状态" fi - echo "개인 정보 및 보안" - echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." - echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "현재 상태 :$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1. 수집을 켭니다" - echo "2. 컬렉션을 닫습니다" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 "개인 정보 보호 및 보안 컬렉션이 활성화되었습니다" + 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 "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -12204,11 +12206,11 @@ EOF 102) clear - send_stats "기술 라이온 스크립트를 제거하십시오" - echo "기술 라이온 스크립트를 제거하십시오" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." - read -e -p "계속할거야? (Y/N) :" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -12216,16 +12218,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "대본은 제거되었습니다." + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -12235,7 +12237,7 @@ EOF ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -12253,187 +12255,187 @@ EOF linux_file() { root_use - send_stats "파일 관리자" + send_stats "文件管理器" while true; do clear - echo "파일 관리자" + echo "文件管理器" echo "------------------------" - echo "현재 경로" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" - echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" - echo "15. 파일을 삭제하십시오" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" - echo "25. 파일을 다른 서버로 전달합니다" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "디렉토리 이름을 입력하십시오 :" dirname - cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" - send_stats "디렉토리로 이동하십시오" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "작성하려면 디렉토리 이름을 입력하십시오." dirname - mkdir -p "$dirname" && echo "디렉토리가 생성되었습니다" || echo "창조가 실패했습니다" - send_stats "디렉토리를 만듭니다" + 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 "디렉토리 권한을 수정하십시오" + 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 "디렉토리의 이름을 바꿉니다" + 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 "디렉토리 삭제" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "이전 메뉴 디렉토리로 돌아갑니다" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "작성하려면 파일 이름을 입력하십시오." filename - touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" - send_stats "파일을 만듭니다" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "편집 할 파일 이름을 입력하십시오." filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "파일 편집" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "파일 이름을 입력하십시오 :" filename - read -e -p "권한을 입력하십시오 (예 : 755) :" perm - chmod "$perm" "$filename" && echo "권한이 수정되었습니다" || echo "수정이 실패했습니다" - send_stats "파일 권한을 수정하십시오" + 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 "파일의 이름을 바꿉니다" + 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 "파일 삭제" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" - send_stats "압축 파일/디렉토리" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" - send_stats "압축 파일/디렉토리 해제" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." - send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" - send_stats "파일 또는 디렉토리를 이동하십시오" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." - send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 - cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사합니다" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "오류 : 파일이 존재하지 않습니다." - send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "오류 : 원격 서버 비밀번호를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "로그인 포트 (기본값 22)를 입력하십시오 :" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "스크립트는 최신입니다$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -12731,15 +12733,15 @@ while true; do (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 "자동 스크립트 업데이트를 켜십시오" + 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 "스크립트 자동 업데이트를 닫습니다" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -12761,41 +12763,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "기술 라이온 스크립트 도구 상자 v$sh_v" -echo -e "명령 줄 입력${gl_huang}k${gl_kjlan}스크립트를 신속하게 시작하십시오${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" +echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu 서버 오프닝 스크립트" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "선택을 입력하십시오 :" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "시스템 업데이트" ; linux_update ;; - 3) clear ; send_stats "시스템 정리" ; linux_clean ;; + 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 + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -12806,13 +12808,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "잘못된 입력!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -12820,47 +12822,47 @@ done k_info() { -send_stats "K 명령 참조 사용 사례" +send_stats "k命令参考用例" echo "-------------------" -echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "다음은 K 명령 참조 유스 케이스입니다." -echo "스크립트 시작 k" -echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" -echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" -echo "업데이트 시스템 K 업데이트 | K 업데이트" -echo "깨끗한 시스템 쓰레기 K Clean | K 청소" -echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" -echo "BBR3 제어판 K BBR3 | K bbrv3" -echo "커널 튜닝 패널 K nhyh | K 커널 최적화" -echo "가상 메모리 K 스왑 2048을 설정하십시오" -echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" -echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" -echo "시스템 백업 기능 K 백업 | K bf | K 백업" -echo "SSH 원격 연결 도구 K SSH | K 원격 연결" -echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" -echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" -echo "인트라넷 침투 (서버 측) K frps" -echo "인트라넷 침투 (클라이언트) K frpc" -echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" -echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" -echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" -echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" -echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" -echo "도메인 이름 인증서 응용 프로그램 K SSL" -echo "도메인 이름 인증서 만료 쿼리 K SSL PS" -echo "도커 환경 설치 K 도커 설치 | K 도커 설치" -echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" -echo "Docker Image Management K Docker img | K Docker Image" -echo "LDNMP 사이트 관리 K 웹" -echo "LDNMP 캐시 정리 K 웹 캐시" -echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" -echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." -echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" -echo "방화벽 패널 K FHQ | K 방화벽" -echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" } @@ -12868,19 +12870,19 @@ echo "블록 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 "소프트웨어를 설치하십시오" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "소프트웨어를 제거하십시오" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -12914,7 +12916,7 @@ else rsync_run) shift - send_stats "시간이 정한 RSYNC 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -12933,7 +12935,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -12946,13 +12948,13 @@ else swap) shift - send_stats "가상 메모리를 신속하게 설정했습니다" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정하십시오" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -12996,42 +12998,42 @@ else status|状态) shift - send_stats "소프트웨어 상태보기" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "소프트웨어 시작" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "소프트웨어 일시 정지" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "소프트웨어 재시작" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "소프트웨어 부츠" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "인증서 상태를 확인하십시오" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "인증서를 신속하게 신청하십시오" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "인증서를 신속하게 신청하십시오" + send_stats "快速申请证书" else k_info fi @@ -13041,15 +13043,15 @@ else shift case $1 in install|安装) - send_stats "Docker를 신속하게 설치하십시오" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 미러 관리" + send_stats "快捷镜像管理" docker_image ;; *) diff --git a/tw/kejilion.sh b/tw/kejilion.sh index d4a764461..40c625d50 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -4076,8 +4076,8 @@ yt_menu_pro() { 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 + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp + chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "安裝完成。按任意鍵繼續..." @@ -4085,7 +4085,7 @@ yt_menu_pro() { 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." - sudo yt-dlp -U + yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt echo "更新完成。按任意鍵繼續..." @@ -4093,7 +4093,7 @@ yt_menu_pro() { 3) send_stats "正在卸載 yt-dlp..." echo "正在卸載 yt-dlp..." - sudo rm -f /usr/local/bin/yt-dlp + rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt echo "卸載完成。按任意鍵繼續..." @@ -10409,7 +10409,7 @@ linux_panel() { mkdir -p /home/docker/astrbot/data - sudo docker run -d \ + docker run -d \ -p ${docker_port}:6185 \ -p 6195:6195 \ -p 6196:6196 \ @@ -11238,6 +11238,8 @@ EOF useradd -m -s /bin/bash "$new_username" passwd "$new_username" + install sudo + echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers passwd -l root From 2fe842655b36e4aae6b9e70d94e1dc1d85b6d1e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:28:57 +0800 Subject: [PATCH 022/553] Update kejilion.sh --- cn/kejilion.sh | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b7734a1a9..43b646c7f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8514,7 +8514,7 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color80}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -10810,6 +10810,33 @@ linux_panel() { + 82) + + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 + + docker_rum() { + + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p 3001:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest + + } + + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 0) kejilion From dfd47bb01051f7156c7c3b0a928863b9ff3d5786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:29:29 +0800 Subject: [PATCH 023/553] Update kejilion.sh --- kejilion.sh | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 9e927dcc1..32f681ff3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8514,7 +8514,7 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color80}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -10810,6 +10810,33 @@ linux_panel() { + 82) + + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 + + docker_rum() { + + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p 3001:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest + + } + + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 0) kejilion From 4519740572a99a53007110ea5318c4c929656c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:30:31 +0800 Subject: [PATCH 024/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 698418fe6..fe7f3692b 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1251,6 +1251,7 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 ------------------------ 2025-08-10 v4.0.6 系统工具重装系统新增Debian13的重装选项。Debian13 性能 安全 稳定全面提升。 +应用市场新增gpt-load高性能AI透明代理的安装及使用。 ------------------------ From a546f2443c4474a625971ef8169229f97006f16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:32:00 +0800 Subject: [PATCH 025/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 43b646c7f..b8eeb7701 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8514,7 +8514,7 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color80}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" From af7598f03508d89301ffe1d39c2a6fbbe05c8bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:33:07 +0800 Subject: [PATCH 026/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 32f681ff3..1d26585ad 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8514,7 +8514,7 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color80}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" From eb3dac6df86f341b46ec2e62acf2f183b9b99ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:38:05 +0800 Subject: [PATCH 027/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b8eeb7701..8820f17bd 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10820,7 +10820,7 @@ linux_panel() { mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ - -p 3001:3001 \ + -p ${docker_port}:3001 \ -e AUTH_KEY=sk-123456 \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest From 4dc9f77f0166b0cf170ce2e3787d08530bbc1183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:38:49 +0800 Subject: [PATCH 028/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 1d26585ad..4fa7f8516 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10820,7 +10820,7 @@ linux_panel() { mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ - -p 3001:3001 \ + -p ${docker_port}:3001 \ -e AUTH_KEY=sk-123456 \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest From cab08ada2e26976d512eb542fa7b960cfc42f55e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 12 Aug 2025 17:42:11 +0800 Subject: [PATCH 029/553] Update kejilion.sh --- cn/kejilion.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8820f17bd..cc25e59db 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8515,6 +8515,7 @@ linux_panel() { echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -10838,6 +10839,36 @@ linux_panel() { + 83) + + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 + + docker_rum() { + + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest + + } + + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 0) kejilion ;; From 207407229ad6c26638806558b5ff07fa54e733c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 12 Aug 2025 17:42:51 +0800 Subject: [PATCH 030/553] Update kejilion.sh --- kejilion.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 4fa7f8516..bda8058a5 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8515,6 +8515,7 @@ linux_panel() { echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -10838,6 +10839,36 @@ linux_panel() { + 83) + + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 + + docker_rum() { + + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest + + } + + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 0) kejilion ;; From a1bc681f8b6fa2fcb0afe9e1c6050be1374cbbf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 12 Aug 2025 17:44:26 +0800 Subject: [PATCH 031/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index fe7f3692b..a6702f6d0 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1252,6 +1252,7 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 2025-08-10 v4.0.6 系统工具重装系统新增Debian13的重装选项。Debian13 性能 安全 稳定全面提升。 应用市场新增gpt-load高性能AI透明代理的安装及使用。 +应用市场新增komari服务器监控的安装及使用,平替哪吒监控。 ------------------------ From 316c39f1f75d5b1479db136c84ca800e450a80cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 12 Aug 2025 18:25:51 +0800 Subject: [PATCH 032/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index cc25e59db..98e19b80a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11458,6 +11458,8 @@ EOF # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + install sudo + echo "操作已完成。" ;; @@ -11465,6 +11467,8 @@ EOF read -e -p "请输入用户名: " username # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + + install sudo ;; 4) read -e -p "请输入用户名: " username From e50365e861b909d99aabb04906fb23b4bb401e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 12 Aug 2025 18:26:25 +0800 Subject: [PATCH 033/553] Update kejilion.sh --- kejilion.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index bda8058a5..6eab6e900 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11458,6 +11458,8 @@ EOF # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + install sudo + echo "操作已完成。" ;; @@ -11465,6 +11467,8 @@ EOF read -e -p "请输入用户名: " username # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + + install sudo ;; 4) read -e -p "请输入用户名: " username From f6003942e3fdc6c8329ffe2c66840616c2db46bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:00:12 +0800 Subject: [PATCH 034/553] Update kejilion.sh --- cn/kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 98e19b80a..fec4c8430 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1428,7 +1428,9 @@ install_ssltls() { 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]?))))$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' + # 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 From b3c95d45e93b0ffbbb1e86de491dd33e47c4bce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:01:12 +0800 Subject: [PATCH 035/553] Update kejilion.sh --- kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 6eab6e900..a5ec77011 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1428,7 +1428,9 @@ install_ssltls() { 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]?))))$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' + # 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 From 4fd60e4a669475db4118474c302e71a51189745f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:48:22 +0800 Subject: [PATCH 036/553] Update kejilion.sh --- cn/kejilion.sh | 112 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 109 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index fec4c8430..ca90face8 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.6" +sh_v="4.0.7" gl_hui='\e[37m' @@ -8517,7 +8517,8 @@ linux_panel() { echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9835,7 +9836,7 @@ linux_panel() { docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10871,6 +10872,111 @@ linux_panel() { ;; + + 84) + + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 + + docker_rum() { + + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest + + } + + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 85) + + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + + docker compose up -d + + clear + echo "已经安装完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } + + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "应用已卸载" + } + + docker_app_plus + + + ;; + + + 86) + + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 + + docker_rum() { + + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin + + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin + + + } + + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + 0) kejilion ;; From e471408033d257c243039599482fb84360cf6d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:49:04 +0800 Subject: [PATCH 037/553] Update kejilion.sh --- kejilion.sh | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 109 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index a5ec77011..1029bc317 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.6" +sh_v="4.0.7" gl_hui='\e[37m' @@ -8517,7 +8517,8 @@ linux_panel() { echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9835,7 +9836,7 @@ linux_panel() { docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10871,6 +10872,111 @@ linux_panel() { ;; + + 84) + + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 + + docker_rum() { + + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest + + } + + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 85) + + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + + docker compose up -d + + clear + echo "已经安装完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } + + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "应用已卸载" + } + + docker_app_plus + + + ;; + + + 86) + + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 + + docker_rum() { + + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin + + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin + + + } + + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + 0) kejilion ;; From ef0806d4ebe3c1987f4f8be8c945c8d185c16bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:51:35 +0800 Subject: [PATCH 038/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index a6702f6d0..e8a352142 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1254,6 +1254,9 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增gpt-load高性能AI透明代理的安装及使用。 应用市场新增komari服务器监控的安装及使用,平替哪吒监控。 ------------------------ - - +2025-08-13 v4.0.7 +应用市场新增Wallos个人财务管理工的安装及使用, +应用市场新增immich图片视频管理器的安装及使用, +应用市场新增jellyfin媒体管理系统的安装及使用, +------------------------ From 548bd27ae797f45428ad4294ca3797f53ec6bb31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 17:21:32 +0800 Subject: [PATCH 039/553] Update kejilion.sh --- cn/kejilion.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index ca90face8..b4aa0f371 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8519,6 +8519,7 @@ linux_panel() { echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -10977,6 +10978,63 @@ linux_panel() { ;; + + 87) + + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 + + docker_rum() { + + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv + + } + + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 88) + + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 + + docker_rum() { + + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest + + + } + + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 0) kejilion ;; From f9334bae13c0fd9434afe6048e2829217393fd70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 17:22:12 +0800 Subject: [PATCH 040/553] Update kejilion.sh --- kejilion.sh | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 1029bc317..eaa42b1c9 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8519,6 +8519,7 @@ linux_panel() { echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -10977,6 +10978,63 @@ linux_panel() { ;; + + 87) + + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 + + docker_rum() { + + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv + + } + + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 88) + + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 + + docker_rum() { + + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest + + + } + + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 0) kejilion ;; From 051ef913e49c56d8a176df0be7b8ec4db61a1873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 17:23:24 +0800 Subject: [PATCH 041/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e8a352142..6f035b0e1 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1258,5 +1258,7 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增Wallos个人财务管理工的安装及使用, 应用市场新增immich图片视频管理器的安装及使用, 应用市场新增jellyfin媒体管理系统的安装及使用, +应用市场新增SyncTV一起看片神器的安装及使用, +应用市场新增Owncast自托管直播平台的安装及使用, ------------------------ From 329a6605909b83632e51208da923d06a6b60a2a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 17:46:57 +0800 Subject: [PATCH 042/553] Update kejilion.sh --- cn/kejilion.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b4aa0f371..65605db4e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10998,7 +10998,7 @@ linux_panel() { local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" local docker_passwd="" local app_size="1" docker_app @@ -11027,8 +11027,8 @@ linux_panel() { local docker_describe="开源、免费的自建直播平台" local docker_url="官网介绍: https://owncast.online" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" local app_size="1" docker_app From 48850088f0f9531ad0f24a78fe4f4b2e3e8089b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 13 Aug 2025 17:47:37 +0800 Subject: [PATCH 043/553] Update kejilion.sh --- kejilion.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index eaa42b1c9..5f6a95541 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10998,7 +10998,7 @@ linux_panel() { local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" local docker_passwd="" local app_size="1" docker_app @@ -11027,8 +11027,8 @@ linux_panel() { local docker_describe="开源、免费的自建直播平台" local docker_url="官网介绍: https://owncast.online" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" local app_size="1" docker_app From 4089f898dd892bfb01c27bb1cd2e406761468361 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 14 Aug 2025 03:06:01 +0000 Subject: [PATCH 044/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-14=2003:06:01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 242 ++- jp/kejilion.sh | 4658 +++++++++++++++++++++++++----------------------- kr/kejilion.sh | 1470 ++++++++------- tw/kejilion.sh | 236 ++- 4 files changed, 3759 insertions(+), 2847 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index cb43a64c1..1ae24ad56 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.6" +sh_v="4.0.7" gl_hui='\e[37m' @@ -1428,7 +1428,9 @@ install_ssltls() { 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]?))))$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' + # 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 @@ -5358,7 +5360,7 @@ Kernel_optimize() { echo "Video introduction: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" echo "A variety of system parameter tuning modes are provided, and users can choose and switch according to their own usage scenarios." - echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in the production environment!" + echo -e "${gl_huang}Tip:${gl_bai}Please use it with caution in the production environment!" echo "--------------------" echo "1. High-performance optimization mode: Maximize system performance and optimize file descriptors, virtual memory, network settings, cache management and CPU settings." echo "2. Balanced optimization mode: Balance between performance and resource consumption, suitable for daily use." @@ -7679,7 +7681,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Backend login path: /admin" + echo "Background login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -8514,7 +8516,10 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki Intelligent Document Management System" echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" + echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tools" + echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" + echo -e "${gl_kjlan}87. ${color87}SyncTV movie watching artifact${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9832,7 +9837,7 @@ linux_panel() { docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10810,6 +10815,225 @@ linux_panel() { + 82) + + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 + + docker_rum() { + + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest + + } + + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 83) + + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 + + docker_rum() { + + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest + + } + + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 84) + + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 + + docker_rum() { + + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest + + } + + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 85) + + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + + docker compose up -d + + clear + echo "Installed" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } + + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "The app has been uninstalled" + } + + docker_app_plus + + + ;; + + + 86) + + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 + + docker_rum() { + + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin + + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin + + + } + + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 87) + + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 + + docker_rum() { + + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv + + } + + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 88) + + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 + + docker_rum() { + + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest + + + } + + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app + + ;; + 0) kejilion @@ -11400,6 +11624,8 @@ EOF # Grant new users sudo permissions echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + install sudo + echo "The operation has been completed." ;; @@ -11407,6 +11633,8 @@ EOF read -e -p "Please enter your username:" username # Grant new users sudo permissions echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + + install sudo ;; 4) read -e -p "Please enter your username:" username @@ -11729,7 +11957,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index a13c90652..ad6c57515 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.6" +sh_v="4.0.7" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# 定义一个函数来执行命令 +# コマンドを実行する関数を定義します run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 -# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 +# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! +# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 +# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用户同意条款 +# ユーザーに条件に同意するように促します UserLicenseAgreement() { clear - echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" - echo "首次使用脚本,请先阅读并同意用户许可协议。" - echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" + echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" + echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上条款?(y/n): " user_input + read -r -p "上記の条件に同意しますか? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "许可同意" + 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 "许可拒绝" + send_stats "許可の拒否" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安装 $package...${gl_bai}" + echo -e "${gl_huang}インストール$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "当前可用空间: $((available_space_mb/1024))G" - echo "最小需求空间: ${required_gb}G" - echo "无法继续安装,请清理磁盘空间后重试。" - send_stats "磁盘空间不足" + echo -e "${gl_huang}ヒント:${gl_bai}ディスクスペースが不十分です!" + echo "現在利用可能なスペース:$((available_space_mb/1024))g" + echo "最小需要スペース:${required_gb}G" + echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" + send_stats "ディスクスペースが不十分です" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸载 $package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return 1 fi done } -# 通用 systemctl 函数,适用于各种发行版 +# さまざまな分布に適したUniversal SystemCTL関数 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重启服务 +# サービスを再起動します restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1 服务已重启。" + echo "$1サービスは再開されました。" else - echo "错误:重启 $1 服务失败。" + echo "错误:重启 $1サービスは失敗しました。" fi } -# 启动服务 +# サービスを開始します start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1 服务已启动。" + echo "$1サービスが開始されました。" else - echo "错误:启动 $1 服务失败。" + echo "エラー:開始$1サービスは失敗しました。" fi } -# 停止服务 +# サービスを停止します stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1 服务已停止。" + echo "$1サービスは停止しました。" else - echo "错误:停止 $1 服务失败。" + echo "エラー:停止します$1サービスは失敗しました。" fi } -# 查看服务状态 +# サービスのステータスを確認します status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1 服务状态已显示。" + echo "$1サービスステータスが表示されます。" else - echo "错误:无法显示 $1 服务状态。" + echo "エラー:表示できません$1サービスステータス。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME 已设置为开机自启。" + echo "$SERVICE_NAME電源を入れるように設定します。" } break_end() { - echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意键继续..." + echo -e "${gl_lv}操作が完了しました${gl_bai}" + echo "任意のキーを押して続行します..." read -n 1 -s -r -p "" echo "" clear @@ -425,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}Docker環境のインストール...${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 @@ -500,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker容器管理" - echo "Docker容器列表" + send_stats "Dockerコンテナ管理" + echo "Dockerコンテナリスト" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "容器操作" + echo "コンテナ操作" echo "------------------------" - echo "1. 创建新的容器" + echo "1.新しいコンテナを作成します" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" - echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" + echo "3.指定された容器を停止します7。すべての容器を停止します" + echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" + echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11。指定されたコンテナを入力します12。コンテナログを表示します" + echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + send_stats "新しいコンテナを作成します" + read -e -p "作成コマンドを入力してください:" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を起動します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker start $dockername ;; 3) - send_stats "停止指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を停止します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定されたコンテナを削除します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を再起動します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "すべてのコンテナを起動します" docker start $(docker ps -a -q) ;; 7) - send_stats "停止所有容器" + send_stats "すべてのコンテナを停止します" docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "すべてのコンテナを削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "すべてのコンテナを再起動します" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "コンテナを入力します" + read -e -p "コンテナ名を入力してください:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "コンテナログを表示します" + read -e -p "コンテナ名を入力してください:" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "コンテナネットワークを表示します" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "コンテナの占有を表示します" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "コンテナポートアクセスを許可します" + read -e -p "コンテナ名を入力してください:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "コンテナポートアクセスをブロックします" + read -e -p "コンテナ名を入力してください:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "Docker画像管理" + echo "Docker画像リスト" docker image ls echo "" - echo "镜像操作" + echo "ミラー操作" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1.指定された画像を取得する3。指定された画像を削除します" + echo "2。指定された画像4を更新します。すべての画像を削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "鏡を引っ張ります" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}画像を取得する:$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "画像を更新します" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}更新された画像:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "ミラーを削除します" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "すべての画像を削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -754,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "サポートされていない分布:$ID" return ;; esac else - echo "无法确定操作系统。" + echo "オペレーティングシステムを決定することはできません。" return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" } @@ -775,27 +775,27 @@ docker_ipv6_on() { 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处理配置文件的更新 + # JQを使用して、構成ファイルの更新を処理します local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # 現在の構成には既にIPv6設定があるかどうかを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # 構成を更新し、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}" + echo -e "${gl_huang}現在、IPv6アクセスが有効になっています${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # 構成ファイルが存在するかどうかを確認します if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}配置文件不存在${gl_bai}" + echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" return fi - # 读取当前配置 + # 現在の構成をお読みください local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 使用jq处理配置文件的更新 + # JQを使用して、構成ファイルの更新を処理します local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # 現在のIPv6ステータスを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # 元の構成と新しい構成を比較します if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" fi } @@ -870,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "少なくとも1つのポート番号を提供してください" 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" + echo "ポートが開かれました$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "ポートが開かれました" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "少なくとも1つのポート番号を提供してください" 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" + echo "ポートは閉じた$port" fi done - # 删除已存在的规则(如果有) + # 既存のルールを削除する(ある場合) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # 最初に新しいルールを挿入します iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "ポートは閉じた" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "少なくとも1つの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" + echo "IPをリリースしました$ip" fi done save_iptables_rules - send_stats "已放行IP" + send_stats "IPをリリースしました" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "少なくとも1つの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" + echo "IPブロック$ip" fi done save_iptables_rules - send_stats "已阻止IP" + send_stats "IPブロック" } @@ -990,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # 防御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 @@ -1000,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "DDOS防御をオンにします" } -# 关闭DDoS防御 +# DDOS防御をオフにします disable_ddos_defense() { - # 关闭防御 DDoS + # 防御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 @@ -1015,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "DDOS防御をオフにします" } -# 管理国家IP规则的函数 +# 国家IPルールを管理する機能 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # IPSETが存在しない場合は作成します if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IPエリアファイルをダウンロードします if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" exit 1 fi - # 将 IP 添加到 ipset + # IPSETにIPを追加します while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 使用 iptables 阻止 IP + # iptablesでIPをブロックします 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 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # 許可された国のIPSETを作成する(存在しない場合) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IPエリアファイルをダウンロードします if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" 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 + # IPSETにIPを追加します while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # 指定された国の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 地址" + echo "正常に許可されています$country_codeIPアドレス" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # 国の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 + # Ipsetを破壊します if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に持ち上げられました$country_codeIPアドレスの制限" ;; *) @@ -1116,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "高度なファイアウォール管理" + send_stats "高度なファイアウォール管理" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "ファイアウォール管理" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1.指定されたポート2を開きます。指定されたポートを閉じます" + echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" - echo "7. 清除指定IP" + echo "5。IPホワイトリスト6。IPブラックリスト" + echo "7.指定されたIPをクリアします" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. ping 12を許可します。Pingを無効にします" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" + echo "17.指定国でのIP制限をリリースします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "オープンポート番号を入力してください:" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "指定されたポートを開きます" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "閉じたポート番号を入力してください:" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "指定されたポートを閉じます" ;; 3) - # 开放所有端口 + # すべてのポートを開きます current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "すべてのポートを開きます" ;; 4) - # 关闭所有端口 + # すべてのポートを閉じます current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1180,40 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "すべてのポートを閉じます" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IPホワイトリスト + read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IPブラックリスト + read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip block_ip $c_ip ;; 7) - # 清除指定 IP - read -e -p "请输入清除的IP: " d_ip + # 指定された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" + send_stats "指定されたIPをクリアします" ;; 11) - # 允许 PING + # pingを許可します 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 "允许PING" + send_stats "pingを許可します" ;; 12) - # 禁用 PING + # pingを無効にします 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 "禁用PING" + send_stats "pingを無効にします" ;; 13) enable_ddos_defense @@ -1223,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "許可された国$country_codeIP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "国をブロックします$country_codeIP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "国をきれいにします$country_codeIP" ;; *) @@ -1257,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 現在のシステムですべてのスワップパーティションを取得します local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # 反復して、すべてのスワップパーティションを削除します for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # /swapfileが使用されなくなったことを確認してください swapoff /swapfile - # 删除旧的 /swapfile + # 古い /swapfileを削除します rm -f /swapfile - # 创建新的 swap 分区 + # 新しいスワップパーティションを作成します fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# 仮想メモリを作成する必要があるかどうかを判断します [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # 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版本 + # 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版本 + # 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版本 + # 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}" @@ -1341,7 +1341,7 @@ ldnmp_v() { 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 @@ -1350,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # 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 文件中进行替换 + # 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 @@ -1399,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP環境がインストールされています" echo "------------------------" ldnmp_v @@ -1416,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "更新タスクが更新されました" } @@ -1428,7 +1428,9 @@ install_ssltls() { 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]?))))$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' + # 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 @@ -1451,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yuming公開鍵情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}証明書ストレージパス${gl_bai}" + echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" + echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1468,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1484,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" + echo "サイト情報証明書の有効期限" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1524,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + send_stats "ドメイン名証明書のアプリケーションは失敗しました" + echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" + echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" + echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" + echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" + echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" + echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" + echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" break_end clear - echo "请再次尝试部署 $webname" + echo "もう一度展開してみてください$webname" add_yuming install_ssltls certs_status @@ -1547,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "ドメイン名の再利用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1556,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1621,8 +1623,8 @@ nginx_upgrade() { 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}完成" + send_stats "更新します$ldnmp_pods" + echo "更新します${ldnmp_pods}仕上げる" } @@ -1641,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "ログイン情報:" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "起動する$ldnmp_pods" } @@ -1655,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # 構成ファイルが存在するかどうかを確認します if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # ゾーン_idsを配列に変換します ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # キャッシュをクリーニングするかどうかをユーザーに促します + 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 + echo "CF情報が保存されます$CONFIG_FILE、後でCF情報を変更できます" + read -e -p "API_TOKENを入力してください:" API_TOKEN + read -e -p "CFユーザー名を入力してください:" EMAIL + read -e -p "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" fi fi - # 循环遍历每个 zone_id 并执行清除缓存命令 + # 各ZONE_IDをループして、Clear Cacheコマンドを実行します for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + echo "ゾーン_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" \ @@ -1685,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "キャッシュクリアリクエストが送信されました。" } web_cache() { - send_stats "清理站点缓存" + send_stats "サイトキャッシュをクリーンアップします" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1701,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "サイトデータを削除します" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + 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" + # エラーを避けるために、データベースを削除する前にデータベースが存在するかどうかを確認します + echo "データベースの削除:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1738,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # モードパラメーターに従ってWAFをオンまたはオフにすることにしました if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # 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:加上注释 + # 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' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1801,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 古い定義を削除します sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 「Happy Publishing」で行の前に新しい定義を挿入する awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1828,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 古い定義を削除します sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 「Happy Publishing」で行の前に新しい定義を挿入する awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1856,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # Brotliをオンにする:コメントを削除します sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1870,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # Brotliを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1886,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1912,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # ZSTDをオンにしてください:コメントを削除します sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1927,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # ZSTDを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1943,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1974,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi @@ -1988,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_waf_status check_cf_mode @@ -2002,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" + echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21。CloudFlareモード22。5秒シールドの高負荷" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31。WAF32をオンにしてください。WAFをオフにします" + echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" echo "------------------------" - echo "9. 卸载防御程序" + echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2080,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防衛プログラムがアンインストールされています" ;; 11) @@ -2095,11 +2097,11 @@ web_security() { ;; 21) - send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "CloudFlareモード" + echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください:" 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 @@ -2114,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "5秒シールドでの高負荷" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "CFパラメーターを取得します:" + echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" + echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID cd ~ install jq bc @@ -2145,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "高負荷自動シールドオープニングスクリプトが追加されました" else - echo "自动开盾脚本已存在,无需添加" + echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "サイトWAFが有効になっています" + send_stats "サイトWAFが有効になっています" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "サイトWAFは閉鎖されています" + send_stats "サイトWAFは閉鎖されています" ;; 33) @@ -2187,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# 現在のworker_processesの設定値を取得します current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# 値に応じてモード情報を設定します if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2206,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # Brotliが有効であり、コメントされていないかどうかを確認してください if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # GZIPが有効になっており、コメントされていないかどうかを確認してください if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2236,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "LDNMP環境を最適化します" + echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1。標準モード2。高性能モード(推奨2H4g以上)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" + echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" + echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "サイト標準モード" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2274,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2286,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP環境は標準モードに設定されています" ;; 2) - send_stats "站点高性能模式" + send_stats "サイトの高性能モード" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2314,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2324,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP環境は、高性能モードに設定されています" ;; 3) @@ -2384,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker = "$ {gl_lv} $ {gl_bai}インストール" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" # fi # } @@ -2394,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "アクセスアドレス:" ip_address @@ -2432,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 默认标签为 latest + # デフォルトのラベルは最新です [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # 公式画像のサポートを追加します [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # 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 @@ -2475,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # コンテナのIPアドレスを取得します local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2485,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # 他のすべてのIPSを確認してブロックします 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 + # 指定された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 + # ローカルネットワークを確認してリリースします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 + # 他のすべてのIPSを確認してブロックします 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 + # 指定された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 + # ローカルネットワークを確認してリリースします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 @@ -2522,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" save_iptables_rules } @@ -2533,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # コンテナのIPアドレスを取得します local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2543,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # 他のすべての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 的规则 + # 指定された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 的规则 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2562,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # 他のすべての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 的规则 + # 指定された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 的规则 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2583,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートはサービスにアクセスすることが許可されています" save_iptables_rules } @@ -2597,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法:block_host_port <ポート番号> <承認IP>" return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # 他のすべての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 访问 + # 指定された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 @@ -2624,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # 他のすべての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 访问 + # 指定された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+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" save_iptables_rules } @@ -2656,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # 他のすべての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 访问的规则 + # 指定された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 访问的规则 + # 他のすべての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 访问的规则 + # 指定された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+端口访问该服务" + echo "IP+ポートはサービスにアクセスすることが許可されています" save_iptables_rules } @@ -2738,18 +2740,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2762,12 +2764,12 @@ while true; do grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "$docker_name 已经安装完成" + echo "$docker_nameインストール" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "インストール$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2777,12 +2779,12 @@ while true; do grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "$docker_name 已经安装完成" + echo "$docker_nameインストール" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新$docker_name" + send_stats "更新します$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2791,30 +2793,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "アプリはアンインストールされています" + send_stats "アンインストール$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}ドメインアクセス設定" + send_stats "${docker_name}ドメインアクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IPアクセスを許可します${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2851,18 +2853,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2886,22 +2888,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}ドメインアクセス設定" + send_stats "${docker_name}ドメインアクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IPアクセスを許可します${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2986,17 +2988,17 @@ 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セッションを作成します tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3071,11 +3073,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "再起動" reboot ;; *) - echo "已取消" + echo "キャンセル" ;; esac @@ -3118,8 +3120,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "LDNMP環境を再度インストールできません" + echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" break_end linux_ldnmp fi @@ -3129,10 +3131,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "LDNMP環境をインストールします" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3146,10 +3148,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "Nginx環境をインストールします" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3160,8 +3162,8 @@ 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 "Nginxがインストールされています" +echo -e "現在のバージョン:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3172,7 +3174,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "LDNMP環境を最初にインストールしてください" ldnmp_install_all fi @@ -3182,7 +3184,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "最初にNGINX環境をインストールしてください" nginx_install_all fi @@ -3193,16 +3195,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "あなたの$webname建てられた!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webnameインストール情報は次のとおりです。" } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "あなたの$webname建てられた!" echo "https://$yuming" } @@ -3214,8 +3216,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3255,17 +3257,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "発生防止ポートを入力してください。" port fi nginx_install_status install_ssltls @@ -3288,14 +3290,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "スペースで区切られた複数の生成防止IP+ポートを入力してください(たとえば、127.0.0.1:3000 127.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3348,12 +3350,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMPサイト管理" + echo "LDNMP環境" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "サイト:${output}証明書の有効期限" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3366,35 +3368,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" - echo "3. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" + echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" + echo "5.アクセスログを表示6。エラーログを表示します" + echo "7.グローバル構成の編集8。サイト構成の編集" + echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20.指定されたサイトデータを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + 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 @@ -3403,15 +3405,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "サイトドメイン名を変更します" + echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" + read -e -p "古いドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status - # mysql替换 + # MySQLの交換 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3429,7 +3431,7 @@ ldnmp_web_status() { 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" {} + @@ -3450,10 +3452,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "関連するサイトを作成します" + echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" + read -e -p "既存のドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status @@ -3467,25 +3469,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "アクセスログを表示します" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "エラーログを表示します" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "グローバル構成を編集します" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "サイト構成を編集します" + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3495,7 +3497,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "サイトデータを表示します" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3531,16 +3533,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" + echo "公式ウェブサイトの紹介:$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1。インストール2。管理3。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) check_disk_space 1 @@ -3549,20 +3551,20 @@ while true; do panel_app_install local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - send_stats "${panelname}控制" + send_stats "${panelname}コントロール" ;; 3) panel_app_uninstall local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}アンインストール" ;; *) break @@ -3606,8 +3608,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "FRPサーバーをインストールします" + # ランダムポートと資格情報を生成します local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3628,17 +3630,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # 出力生成情報 ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + 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 "FRPパネル情報" + echo "FRPパネルアドレス:http://$ipv4_address:$dashboard_port" + echo "FRPパネルのユーザー名:$dashboard_user" + echo "FRPパネルパスワード:$dashboard_pwd" echo open_port 8055 8056 @@ -3648,9 +3650,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "FRPクライアントをインストールします" + read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr + read -e -p "外部ネットワークドッキングトークンを入力してください:" token echo mkdir -p /home/frp @@ -3670,17 +3672,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "FRPイントラネットサービスを追加します" + # ユーザーにサービス名と転送情報を入力するように促します + read -e -p "サービス名を入力してください:" service_name + read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "イントラネットIPを入力してください[デフォルト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 + read -e -p "イントラネットポートを入力してください:" local_port + read -e -p "外部ネットワークポートを入力してください:" remote_port - # 将用户输入写入配置文件 + # ユーザー入力を構成ファイルに書き込みます cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3690,8 +3692,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # 出力生成情報 + echo "仕える$service_nameFRPC.TOMLに正常に追加されました" docker restart frpc @@ -3702,12 +3704,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "FRPイントラネットサービスを削除します" + # ユーザーに削除する必要があるサービス名を入力するように促します + read -e -p "削除する必要があるサービス名を入力してください:" service_name + # SEDを使用して、サービスとその関連構成を削除します sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "仕える$service_nameFRPC.TOMLから削除されました" docker restart frpc @@ -3717,7 +3719,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3738,7 +3740,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3747,11 +3749,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前の値をクリアします local_ip="" local_port="" remote_port="" @@ -3780,7 +3782,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスの情報を印刷します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3793,17 +3795,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# 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 的端口 + # 8055/8056以外のポートがあるかどうかを確認してください local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3812,18 +3814,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # 有効なポートがある場合にのみタイトルとコンテンツを表示します if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRPサービス外部アクセスアドレス:" - # 处理 IPv4 地址 + # IPv4アドレスを処理します for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # IPv6アドレスを処理する(存在する場合) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3832,7 +3834,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # HTTPS構成の処理 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3859,32 +3861,32 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local docker_name="frps" local docker_port=8056 while true; do clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRPサーバー$check_frp $update_status" + echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" + 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 "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00。サービスのステータスを更新します0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) install jq grep ss @@ -3892,7 +3894,7 @@ frps_panel() { generate_frps_config local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRP服务端已经安装完成" + echo "FRPサーバーがインストールされています" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3902,7 +3904,7 @@ frps_panel() { donlond_frp frps local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRP服务端已经更新完成" + echo "FRPサーバーが更新されました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3913,37 +3915,37 @@ frps_panel() { close_port 8055 8056 local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "ドメイン名アクセスへの逆イントラネット侵入サービス" + send_stats "FRP外部ドメイン名へのアクセス" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + 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 + send_stats "IPアクセスをブロックします" + echo "アンチジェネレーションドメイン名にアクセスした場合、この関数を使用して、より安全なIP+ポートアクセスをブロックできます。" + read -e -p "ブロックする必要があるポートを入力してください。" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "FRPサービスステータスを更新します" + echo "FRPサービスステータスは更新されました" ;; *) @@ -3956,17 +3958,17 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local docker_name="frpc" local docker_port=8055 while true; do clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRPクライアント$check_frp $update_status" + echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" + echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" + echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3974,13 +3976,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) install jq grep ss @@ -3988,7 +3990,7 @@ frpc_panel() { configure_frpc local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -3998,7 +4000,7 @@ frpc_panel() { donlond_frp frpc local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "FRP客户端已经更新完成" + echo "FRPクライアントが更新されました" ;; 3) @@ -4009,7 +4011,7 @@ frpc_panel() { close_port 8055 local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; 4) @@ -4054,68 +4056,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + 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 -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 "ダウンロードされたビデオリスト:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(まだありません)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" + echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "オプション番号を入力してください:" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "YT-DLPのインストール..." + echo "YT-DLPのインストール..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "安装完成。按任意键继续..." + echo "インストールが完了しました。任意のキーを押して続行します..." read ;; 2) - send_stats "正在更新 yt-dlp..." - echo "正在更新 yt-dlp..." + send_stats "yt-dlpを更新..." + echo "yt-dlpを更新..." yt-dlp -U local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - echo "更新完成。按任意键继续..." + echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "yt-dlpのアンインストール..." + echo "yt-dlpのアンインストール..." rm -f /usr/local/bin/yt-dlp local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "アンインストールが完了しました。任意のキーを押して続行します..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + 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 "下载完成,按任意键继续..." ;; + read -e -p "ダウンロードが完了したら、任意のキーを押して続行します..." ;; 6) - send_stats "批量视频下载" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "#複数のビデオリンクアドレスを入力\ n#https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.Episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "バッチダウンロードを開始します..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4123,31 +4125,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + 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 "执行完成,按任意键继续..." ;; + read -e -p "実行が完了したら、キーを押して続行します..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + 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 "音频下载完成,按任意键继续..." ;; + read -e -p "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "ビデオを削除します" + read -e -p "削除ビデオの名前を入力してください:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4183,7 +4185,7 @@ set_timedate() { -# 修复dpkg中断问题 +# DPKG割り込みの問題を修正します fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4192,7 +4194,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}システムの更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4211,7 +4213,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi } @@ -4219,7 +4221,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4248,13 +4250,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "パッケージマネージャーのキャッシュを掃除します..." apk cache clean - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "APKキャッシュを削除してください..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4272,23 +4274,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "未使用の依存関係をクリーンアップ..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "パッケージマネージャーのキャッシュを掃除します..." pkg clean -y - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi return @@ -4328,26 +4330,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "DNSを最適化します" while true; do clear - echo "优化DNS地址" + echo "DNSアドレスを最適化します" echo "------------------------" - echo "当前DNS地址" + echo "現在のDNSアドレス" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + 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 "2。国内のDNS最適化:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3。DNS構成を手動で編集します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4355,7 +4357,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "外国のDNS最適化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4363,12 +4365,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "国内のDNS最適化" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "DNS構成を手動で編集します" ;; *) break @@ -4391,13 +4393,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # PasswordAuthenticationが見つかった場合は、はいに設定します 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 设置为 yes + # 発見された場合、pubkeyauthenticationはyesに設定されています 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/' \ @@ -4405,7 +4407,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # PasswordAuthenticationも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" @@ -4416,7 +4418,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # バックアップSSH構成ファイル cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4429,7 +4431,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "SSHポートは次のように変更されています。$new_port" sleep 1 @@ -4447,7 +4449,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4459,17 +4461,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" return 1 fi @@ -4487,7 +4489,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" } @@ -4496,26 +4498,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}ルートログインがセットアップされます!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + 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 @@ -4526,41 +4528,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" + echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4576,21 +4578,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" 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 "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "Debian 13を再インストールします" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4598,49 +4600,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "Debian 12を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "Debian 11を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "Debian 10を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "Ubuntu 24.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "Ubuntu 22.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "Ubuntu 20.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "Ubuntu 18.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4649,7 +4651,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "Rockylinux10を再インストールします" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4657,7 +4659,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "Rockylinux9を再インストールします" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4665,7 +4667,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールします" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4673,7 +4675,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "alma9を再インストールします" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4681,7 +4683,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "Oracle10を再インストールします" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4689,7 +4691,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "Oracle9を再インストールします" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4697,7 +4699,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "Fedora42を再インストールします" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4705,7 +4707,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "Fedora41を再インストールします" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4713,7 +4715,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "CENTOS10を再インストールします" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4721,7 +4723,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "CENTOS9を再インストールします" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4729,7 +4731,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールします" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4737,7 +4739,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールします" dd_xitong_3 bash reinstall.sh arch reboot @@ -4745,7 +4747,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "Kaliを再インストールします" dd_xitong_3 bash reinstall.sh kali reboot @@ -4753,7 +4755,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "Openeulerを再インストールします" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4761,7 +4763,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "OpenSuseを再インストールします" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4769,7 +4771,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "飛ぶ牛をリロードします" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4780,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "Windows11を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4786,13 +4788,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "Windows 10を再インストールします" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "Windows 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 @@ -4800,21 +4802,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "Windows Server 22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "Windows Server 19を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "Windows Server 16を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4822,7 +4824,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "Windows11アームを再インストールします" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4839,7 +4841,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3管理" + send_stats "BBRV3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4852,17 +4854,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "XanmodのBBRV3カーネルをインストールしました" + echo "現在のカーネルバージョン:$kernel_version" echo "" - echo "内核管理" + echo "カーネル管理" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) @@ -4872,7 +4874,7 @@ bbrv3() { # 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:添加存储库 + # ステップ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+') @@ -4881,7 +4883,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "Xanmodカーネルが更新されました。再起動後に有効になります" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4891,7 +4893,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" server_reboot ;; @@ -4904,14 +4906,14 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "BBR3加速度をセットアップします" + echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" - echo "VPS是512M内存的,请提前添加1G虚拟内存,防止因内存不足失联!" + echo "Debian/Ubuntuのみをサポートします" + echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" + echo "VPSには512mのメモリがあります。メモリが不十分なため、接触の欠落を防ぐために、事前に1G仮想メモリを追加してください!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) @@ -4919,12 +4921,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "オペレーティングシステムの種類を決定できません" break_end linux_Settings fi @@ -4935,7 +4937,7 @@ bbrv3() { # 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:添加存储库 + # ステップ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+') @@ -4946,17 +4948,17 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + 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 "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac fi @@ -4965,40 +4967,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # 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" + echo "サポートされていないオペレーティングシステム:$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # 検出されたオペレーティングシステム情報を印刷します + echo "検出されたオペレーティングシステム:$os_name $os_version" + # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + 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)..." + echo "Elrepoリポジトリ構成(バージョン9)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "サポートされていないシステムバージョン:$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします + echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" server_reboot } @@ -5006,37 +5008,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "レッドハットカーネル管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "Elrepo Kernelをインストールしました" + echo "現在のカーネルバージョン:$kernel_version" echo "" - echo "内核管理" + echo "カーネル管理" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "更新红帽内核" + 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 "卸载红帽内核" + echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" + send_stats "レッドハットカーネルをアンインストールします" server_reboot ;; @@ -5049,26 +5051,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" + echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "Red Hatカーネルをアップグレードします" server_reboot ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac fi @@ -5079,7 +5081,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5089,19 +5091,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "スキャンするディレクトリを指定してください。" return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + 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 命令参数 + # CLAMSCANコマンドパラメーターを作成します local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5110,7 +5112,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # Dockerコマンドを実行します docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5119,8 +5121,8 @@ clamav_scan() { 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}" + echo -e "${gl_lv}$@スキャンが完了し、ウイルスレポートが保存されます${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}ウイルスがある場合は、お願いします${gl_huang}scan.log${gl_lv}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" } @@ -5132,23 +5134,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "ウイルススキャン管理" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "クラマブウイルススキャンツール" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" + echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアを含む。" echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3。カスタムディレクトリスキャン${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "フルディスクスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5157,7 +5159,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5165,8 +5167,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "カスタムディレクトリスキャン" + read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5183,21 +5185,21 @@ clamav() { -# 高性能模式优化函数 +# 高性能モード最適化関数 optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5209,36 +5211,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 均衡模式优化函数 +# イコライゼーションモード最適化関数 optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5250,36 +5252,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # 透明なページを復元します echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # numaバランスを復元します sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# デフォルト設定関数を復元します restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + 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}" + 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 @@ -5291,37 +5293,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}キャッシュ管理を復元します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" + # 透明なページを復元します echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 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}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5333,16 +5335,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5353,62 +5355,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linuxカーネルチューニング管理" + echo "Linuxシステムにおけるカーネルパラメーターの最適化" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" + echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" + echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" + echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを同時に改善します。" + echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" + echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" + echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" echo "--------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "高性能モードの最適化" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "バランスモードの最適化" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "ウェブサイトの最適化モデル" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "ライブストリーミング最適化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "ゲームサーバーの最適化" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "デフォルト設定を復元します" ;; *) break @@ -5435,7 +5437,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end @@ -5444,17 +5446,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "サポートされていないシステム:$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "サポートされていないシステム、システムタイプは認識できません。" break_end fi } @@ -5464,29 +5466,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "システム言語を切り替えます" while true; do clear - echo "当前系统语言: $LANG" + echo "現在のシステム言語:$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1。英語2。簡素化された中国語3。伝統的な中国語" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "英語に切り替えます" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "簡素化された中国人に切り替えます" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "伝統的な中国人に切り替えます" ;; *) break @@ -5508,7 +5510,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" hash -r break_end @@ -5519,10 +5521,10 @@ break_end shell_bianse() { root_use - send_stats "命令行美化工具" + send_stats "コマンドラインの美化ツール" while true; do clear - echo "命令行美化工具" + 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}#" @@ -5532,9 +5534,9 @@ shell_bianse() { 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 "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -5579,7 +5581,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "システムリサイクルステーション" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5594,17 +5596,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "現在のリサイクルビン${trash_status}" + echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" + echo "3。コンテンツを復元4。リサイクルビンをクリアします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -5612,7 +5614,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" sleep 2 ;; 2) @@ -5620,23 +5622,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + 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 已还原到主目录。" + echo "$file_to_restoreホームディレクトリに復元されました。" else - echo "文件不存在。" + echo "ファイルは存在しません。" fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "リサイクルビンがクリアされました。" fi ;; *) @@ -5648,19 +5650,19 @@ linux_trash() { -# 创建备份 +# バックアップを作成します create_backup() { - send_stats "创建备份" + send_stats "バックアップを作成します" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # ユーザーにバックアップディレクトリを入力するように求めます + echo "バックアップ例を作成します:" + echo "- 単一のディレクトリをバックアップします: /var /www" + echo "- バックアップ複数のディレクトリ: /etc /home /var /log" + echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" + read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input - # 如果用户没有输入目录,则使用默认目录 + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5668,119 +5670,119 @@ create_backup() { "/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 "您选择的备份目录为:" + # ユーザーが選択したディレクトリを印刷します + echo "選択したバックアップディレクトリは次のとおりです。" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # バックアップを作成します + echo "バックアップを作成します$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # コマンドが成功しているかどうかを確認してください if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "バックアップの作成に失敗しました!" exit 1 fi } -# 恢复备份 +# バックアップを復元します restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "バックアップを復元します" + # 復元するバックアップを選択します + read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME - # 检查备份文件是否存在 + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "バックアップファイルは存在しません!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "バックアップの回復$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "バックアップと復元を正常に!" else - echo "备份恢复失败!" + echo "バックアップリカバリに失敗しました!" exit 1 fi } -# 列出备份 +# バックアップをリストします list_backups() { - echo "可用的备份:" + echo "利用可能なバックアップ:" ls -1 "$BACKUP_DIR" } -# 删除备份 +# バックアップを削除します delete_backup() { - send_stats "删除备份" + send_stats "バックアップを削除します" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME - # 检查备份文件是否存在 + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "バックアップファイルは存在しません!" exit 1 fi - # 删除备份 + # バックアップを削除します rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "バックアップは正常に削除されました!" else - echo "备份删除失败!" + echo "バックアップの削除が失敗しました!" exit 1 fi } -# 备份主菜单 +# バックアップメインメニュー linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "システムバックアップ機能" + echo "システムバックアップ機能" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } @@ -5792,56 +5794,56 @@ linux_backup() { -# 显示连接列表 +# 接続リストを表示します list_connections() { - echo "已保存的连接:" + 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 " - 用户名: root" - echo " - 端口: 22" + send_stats "新しい接続を追加します" + echo "新しい接続を作成する例:" + echo "- 接続名:my_server" + echo "- IPアドレス:192.168.1.100" + echo "- ユーザー名:root" + echo "- ポート:22" echo "------------------------" - read -e -p "请输入连接名称: " name - read -e -p "请输入IP地址: " ip - read -e -p "请输入用户名 (默认: root): " user + read -e -p "接続名を入力してください:" name + read -e -p "IPアドレスを入力してください:" ip + read -e -p "ユーザー名(デフォルト:root)を入力してください:" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "ポート番号を入力してください(デフォルト:22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "認証方法を選択してください:" + echo "1。パスワード" + echo "2。キー" + read -e -p "選択(1/2)を入力してください:" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" 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" @@ -5850,89 +5852,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "無効な選択!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "接続が保存されます!" } -# 删除连接 +# 接続を削除します delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "接続を削除します" + read -e -p "削除するには、接続番号を入力してください。" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + 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 "连接已删除!" + echo "接続が削除されました!" } -# 使用连接 +# 接続を使用します use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "接続を使用します" + read -e -p "使用するには、接続番号を入力してください。" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "エラー:対応する接続は見つかりませんでした。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + 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. 目标服务器是否允许使用密钥登录。" + 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 "エラー: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 服务是否正常运行。" + echo "接続に失敗しました!以下を確認してください。" + echo "1.ユーザー名とパスワードが正しいかどうか。" + echo "2。ターゲットサーバーがパスワードログインを許可するかどうか。" + echo "3.ターゲットサーバーのSSHサービスが正常に実行されているかどうか。" fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "SSHリモート接続ツール" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5944,21 +5946,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSHリモート接続ツール" + echo "SSHを介して他のLinuxシステムに接続できます" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無効な選択、もう一度やり直してください。" ;; esac done } @@ -5974,156 +5976,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 利用可能なハードディスクパーティションをリストします list_partitions() { - echo "可用的硬盘分区:" + echo "利用可能なハードディスクパーティション:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# パーティションをマウントします mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "パーティションをマウントします" + read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "パーティションはすでに取り付けられています!" return fi - # 创建挂载点 + # マウントポイントを作成します MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # パーティションをマウントします mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "パーティションマウントに正常に:$MOUNT_POINT" else - echo "分区挂载失败!" + echo "パーティションマウントは失敗しました!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# パーティションをアンインストールします unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "パーティションをアンインストールします" + read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "パーティションはマウントされていません!" return fi - # 卸载分区 + # パーティションをアンインストールします umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "パーティションのアンインストールに正常に:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "パーティションのアンインストールに失敗しました!" fi } -# 列出已挂载的分区 +# マウントされたパーティションをリストします list_mounted_partitions() { - echo "已挂载的分区:" + echo "マウントされたパーティション:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# フォーマットパーティション format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "フォーマットパーティション" + read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "パーティションがマウントされました。最初にアンインストールしてください!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # ファイルシステムタイプを選択します + echo "ファイルシステムタイプを選択してください:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + 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 ;; + *) echo "無効な選択!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # フォーマットを確認します + read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作已取消。" + echo "操作はキャンセルされました。" return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # フォーマットパーティション + echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "パーティション形式は成功しました!" else - echo "分区格式化失败!" + echo "パーティションのフォーマットが失敗しました!" fi } -# 检查分区状态 +# パーティションステータスを確認します check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "パーティションステータスを確認します" + read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # パーティションステータスを確認します + echo "パーティション /dev /$PARTITION状態:" fsck "/dev/$PARTITION" } -# 主菜单 +# メインメニュー disk_manager() { - send_stats "硬盘管理功能" + send_stats "ハードディスク管理機能" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "ハードディスクパーティション管理" + echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" + echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6132,64 +6134,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } -# 显示任务列表 +# タスクリストを表示します list_tasks() { - echo "已保存的同步任务:" + 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 " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + 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 + 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 + echo "認証方法を選択してください:" + echo "1。パスワード" + echo "2。キー" + read -e -p "(1/2)を選択してください:" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" 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" @@ -6197,63 +6199,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "無効なキーコンテンツ!" return fi ;; *) - echo "无效的选择!" + echo "無効な選択!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + 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" ;; + *) 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 "任务已保存!" + echo "タスクが節約されました!" } -# 删除任务 +# タスクを削除します delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "同期タスクを削除します" + read -e -p "削除するには、タスク番号を入力してください。" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + 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 "任务已删除!" + echo "削除されたタスク!" } run_task() { - send_stats "执行同步任务" + send_stats "同期タスクを実行します" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # パラメーターを分析します local direction="push" # 默认是推送到远端 local num @@ -6264,51 +6266,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # 着信タスク番号がない場合は、ユーザーに入力するように促します if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "実行するタスク番号を入力してください:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + 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" + echo "同期をローカルに引く:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # 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 "エラー: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" + echo "エラー:キーファイルが存在しません:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." chmod 600 "$password_or_key" fi @@ -6316,32 +6318,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同步完成!" + echo "同期は完了です!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "同期は失敗しました!以下を確認してください。" + echo "1。ネットワーク接続は正常ですか?" + echo "2。リモートホストにアクセスできますか?" + echo "3。認証情報は正しいですか?" + echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" fi } -# 创建定时任务 +# 時限タスクを作成します schedule_task() { - send_stats "添加同步定时任务" + send_stats "同期タイミングタスクを追加します" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "定期的に同期するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "エラー:有効なタスク番号を入力してください!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + echo "時限実行間隔を選択してください:" + echo "1)1時間に1回実行します" + echo "2)1日1回実行します" + echo "3)週に1回実行します" + read -e -p "オプションを入力してください(1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" @@ -6349,66 +6351,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) 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 "错误: 该任务的定时同步已存在!" + echo "エラー:このタスクのタイミング同期はすでに存在しています!" return fi - # 创建到用户的 crontab + # ユーザーにクロンタブを作成します (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "タイミングタスクが作成されました。$cron_job" } -# 查看定时任务 +# スケジュールされたタスクを表示します view_tasks() { - echo "当前的定时任务:" + echo "現在のタイミングタスク:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# タイミングタスクを削除します delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "同期タイミングタスクを削除します" + read -e -p "削除するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "エラー:有効なタスク番号を入力してください!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "削除されたタスク番号$numタイミングタスク" } -# 任务管理主菜单 +# タスク管理メインメニュー rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "RSYNCリモート同期ツール" + echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1.新しいタスクを作成します2。タスクを削除します" + echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" + echo "5.タイミングタスクを作成6。タイミングタスクを削除します" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6417,9 +6419,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無効な選択、もう一度やり直してください。" ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } @@ -6434,7 +6436,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "システム情報クエリ" ip_address @@ -6484,41 +6486,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + 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}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}ホスト名:${gl_bai}$hostname" + echo -e "${gl_kjlan}システムバージョン:${gl_bai}$os_info" + echo -e "${gl_kjlan}Linuxバージョン:${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}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}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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}オペレーター:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}ランタイム:${gl_bai}$runtime" echo @@ -6531,111 +6533,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats「基本ツール」 + echo -e "基本的なツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}カールダウンロードツール${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}WGETダウンロードツール${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" + echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" + echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" + echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + 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}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}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}41. ${gl_bai}指定されたツールをインストールします${gl_kjlan}42. ${gl_bai}指定されたツールをアンインストールします" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" curl --help - send_stats "安装curl" + send_stats "カールをインストールします" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" wget --help - send_stats "安装wget" + send_stats "WGETをインストールします" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" sudo --help - send_stats "安装sudo" + send_stats "sudoをインストールします" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" socat -h - send_stats "安装socat" + send_stats "SOCATをインストールします" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "HTOPをインストールします" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "IFTOPをインストールします" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" unzip - send_stats "安装unzip" + send_stats "unzipをインストールします" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" tar --help - send_stats "安装tar" + send_stats "タールをインストールします" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" tmux --help - send_stats "安装tmux" + send_stats "tmuxをインストールします" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" ffmpeg --help - send_stats "安装ffmpeg" + send_stats "ffmpegをインストールします" ;; 11) @@ -6643,7 +6645,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "BTOPをインストールします" ;; 12) clear @@ -6652,7 +6654,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "レンジャーをインストールします" ;; 13) clear @@ -6661,7 +6663,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "NCDUをインストールします" ;; 14) clear @@ -6670,7 +6672,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "FZFをインストールします" ;; 15) clear @@ -6679,7 +6681,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "VIMをインストールします" ;; 16) clear @@ -6688,7 +6690,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "ナノをインストールします" ;; @@ -6699,7 +6701,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "gitをインストールします" ;; 21) @@ -6707,67 +6709,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "cmatrixをインストールします" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "SLをインストールします" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "バステットをインストールします" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "nsnakeをインストールします" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "Ninvadersをインストールします" ;; 31) clear - send_stats "全部安装" + 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 "全部安装(不含游戏和屏保)" + send_stats "すべてをインストールします(ゲームやスクリーンセーバーを除く)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + 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 + read -e -p "インストールされているツール名(Wget Curl Sudo htop)を入力してください。" installname install $installname - send_stats "安装指定软件" + send_stats "指定されたソフトウェアをインストールします" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename remove $removename - send_stats "卸载指定软件" + send_stats "指定されたソフトウェアをアンインストールします" ;; 0) @@ -6775,7 +6777,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -6789,27 +6791,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr管理" + 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 "現在のTCPブロッキングアルゴリズム:$congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "AlpineはBBR3を有効にします" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6840,37 +6842,37 @@ linux_docker() { while true; do clear - # send_stats "docker管理" + # send_stats「Docker Management」 echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" + echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" + 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}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}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}卸载Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "Docker環境をインストールします" install_add_docker ;; @@ -6881,22 +6883,22 @@ linux_docker() { 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 "docker全局状态" - echo "Docker版本" + send_stats "Dockerグローバルステータス" + echo "Dockerバージョン" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -6911,8 +6913,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Dockerネットワーク管理" + echo "Dockerネットワークリスト" echo "------------------------------------------------------------" docker network ls echo "" @@ -6936,36 +6938,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "ネットワーク操作" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1.ネットワークを作成します" + echo "2。インターネットに参加してください" + echo "3。ネットワークを終了します" + echo "4.ネットワークを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "ネットワークを作成します" + read -e -p "新しいネットワーク名を設定します:" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + 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 + send_stats "インターネットに参加してください" + read -e -p "出口ネットワーク名:" dockernetwork + read -e -p "これらのコンテナはネットワークを終了します(複数のコンテナ名はスペースで区切られています):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -6974,8 +6976,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "ネットワークを削除します" + read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork docker network rm $dockernetwork ;; @@ -6989,29 +6991,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" - echo "Docker卷列表" + send_stats "Dockerボリューム管理" + echo "Dockerボリュームリスト" docker volume ls echo "" - echo "卷操作" + echo "ボリューム操作" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1.新しいボリュームを作成します" + echo "2。指定されたボリュームを削除します" + echo "3.すべてのボリュームを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + send_stats "新しいボリュームを作成します" + read -e -p "新しいボリューム名を設定します:" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7020,7 +7022,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "すべてのボリュームを削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7029,7 +7031,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7042,7 +7044,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker清理" + send_stats "Dockerクリーニング" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7051,13 +7053,13 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 8) clear - send_stats "Docker源" + send_stats "Dockerソース" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7070,19 +7072,19 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker V6が開いています" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker V6レベル" docker_ipv6_off ;; 20) clear - send_stats "Docker卸载" + send_stats "Dockerアンインストール" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7094,7 +7096,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7103,7 +7105,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7120,151 +7122,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # 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}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + 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ストリーミングメディアのロック解除検出" + echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" + echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" + echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" + echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" + echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" + echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" + echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}ハードウェアパフォーマンステスト" + echo -e "${gl_kjlan}21. ${gl_bai}YABSパフォーマンステスト" + echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPUパフォーマンステストスクリプト" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}包括的なテスト" + echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" + echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "CHATGPTはステータス検出のロックを解除します" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "リージョンストリーミングメディアのロック解除テスト" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "YeahWUストリーミングメディアのロック解除検出" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "XYKT_IP品質の身体検査スクリプト" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "MTR_TRACE 3ネットワークリターンラインテスト" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "SuperSpeed Three-Net速度測定" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace高速バックホールテストスクリプト" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "Nxtraceは、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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + 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 "広州通信:58.60.188.222" + echo "広州ユニコム:210.21.196.6" + echo "広州モバイル:120.196.165.24" + echo "成都通信:61.139.2.69" + echo "成都ユニコム:119.6.6.6" + echo "成都モバイル: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 + read -e -p "指定されたIPを入力してください:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "Ludashi2020 3ネットワークラインテスト" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "I-ABC多機能速度テストスクリプト" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "ネットワーク品質のテストスクリプト" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "YABSパフォーマンステスト" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "ベンチパフォーマンステスト" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + send_stats "SpiritySDX Fusion Monster Review" clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; @@ -7274,7 +7276,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7290,51 +7292,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + send_stats "Oracle Cloud Scriptコレクション" + echo -e "Oracle Cloud Scriptコレクション" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装闲置机器活跃脚本" - echo -e "${gl_kjlan}2. ${gl_bai}卸载闲置机器活跃脚本" + 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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + 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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + 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 + # ユーザーに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 + 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 + read -e -p "メモリの使用率を入力してください[デフォルト:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # Dockerコンテナを実行します docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7342,14 +7344,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "Oracle Cloudインストールアクティブスクリプト" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7357,20 +7359,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" ;; 3) clear - echo "重装系统" + echo "システムを再インストールします" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + 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 + read -e -p "再インストールするシステムを選択してください:1。Debian12| 2。Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7382,28 +7384,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "選択の無効な、再入力してください。" ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + 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 "甲骨文云重装系统脚本" + send_stats "Oracle Cloud再インストールシステムスクリプト" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "この機能は開発段階にあるので、お楽しみに!" ;; 5) clear @@ -7413,15 +7415,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + send_stats "IPv6修正" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7442,7 +7444,7 @@ docker_tato() { 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}" + 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 } @@ -7463,7 +7465,7 @@ 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" + echo -e "${gl_lv}環境がインストールされています${gl_bai}サイト:$outputデータベース:$db_output" fi fi @@ -7491,31 +7493,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP建站" - echo -e "${gl_huang}LDNMP建站" + # send_stats "ldnmp webサイトビルディング" + echo -e "${gl_huang}LDNMP Webサイトビルディング" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールします${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールします${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" + echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" + echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" + 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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}nginxのみをインストールします${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}サイトリダイレクト" + echo -e "${gl_huang}23. ${gl_bai}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" + echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" + echo -e "${gl_huang}27. ${gl_bai}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}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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -7529,10 +7531,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # ディスクフォーラム webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7555,21 +7557,21 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "データベースアドレス:mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:discuz_" ;; 4) clear - # 可道云桌面 + # Kedao Cloudデスクトップ webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7591,20 +7593,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "データベースアドレス:mysql" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベース名:$dbname" + echo "Redisホスト:Redis" ;; 5) clear - # 苹果CMS + # Apple CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7630,24 +7632,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "データベースアドレス:mysql" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベースプレフィックス:mac_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "インストールが成功した後、バックグラウンドアドレスにログインします" echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # 一本足のカウントカード webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7668,34 +7670,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "データベースアドレス:mysql" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" echo "" - echo "redis地址: redis" - echo "redis密码: 默认不填写" - echo "redis端口: 6379" + echo "Redisアドレス:Redis" + echo "Redisパスワード:デフォルトで記入されていません" + echo "Redisポート:6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "ウェブサイトURL:https://$yuming" + echo "バックグラウンドログインパス: /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "ユーザー名:admin" + echo "パスワード:管理者" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" + echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # フララムフォーラム webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7732,12 +7734,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "データベースアドレス:mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:flarum_" + echo "管理者情報は自分で設定されます" ;; @@ -7745,8 +7747,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7770,11 +7772,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "データベースプレフィックス:typecho_" + echo "データベースアドレス:mysql" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベース名:$dbname" ;; @@ -7783,8 +7785,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7809,18 +7811,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "データベースアドレス:mysql" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7837,10 +7839,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -7850,20 +7852,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + 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 + read -e -p "(/home/web/html/に似たindex.phpのパスを入力してください$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 -e "[${gl_huang}3/6${gl_bai}] PHPバージョンを選択してください" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + 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 @@ -7874,15 +7876,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "選択の無効な、再入力してください。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" echo "-------------" - echo "已经安装的扩展" + echo "インストールされた拡張機能" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -7892,25 +7894,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}]データベース管理" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -7920,10 +7922,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "データベースインポートテーブルデータ" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "データベースのインポートが完了しました" ;; *) echo @@ -7935,12 +7937,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "データベースアドレス:mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:$prefix" + echo "管理者ログイン情報は自分で設定されます" ;; @@ -7953,10 +7955,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "ジャンプドメイン名を入力してください:" reverseproxy nginx_install_status install_ssltls certs_status @@ -7978,7 +7980,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -7989,11 +7991,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" + read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8013,8 +8015,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8036,8 +8038,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8054,8 +8056,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8088,8 +8090,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8106,10 +8108,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8119,12 +8121,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + 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 + read -e -p "(/home/web/html/に似たindex.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 @@ -8149,21 +8151,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP環境バックアップ" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /home /$backup_filename" + read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "エラー:リモートサーバーIPを入力してください。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8171,9 +8173,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送されるファイルは見つかりませんでした。" fi break ;; @@ -8181,7 +8183,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac done @@ -8189,9 +8191,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + 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 @@ -8201,18 +8203,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1。毎週のバックアップ2。毎日のバックアップ" + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + 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 + read -e -p "毎日のバックアップの時間を選択します(時間、0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8226,19 +8228,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP環境修復" + echo "利用可能なサイトバックアップ" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + 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 @@ -8248,7 +8250,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8257,7 +8259,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "圧縮パッケージは見つかりませんでした。" fi ;; @@ -8275,11 +8277,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "LDNMP環境を更新します" + echo "LDNMP環境を更新します" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "コンポーネントの新しいバージョンを発見します" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8299,13 +8301,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" + echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" echo "------------------------" - echo "5. 更新完整环境" + echo "5。完全な環境を更新します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8314,7 +8316,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version local version=${version:-latest} cd /home/web/ @@ -8325,13 +8327,13 @@ linux_ldnmp() { 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}完成" + 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 + 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 @@ -8364,8 +8366,8 @@ linux_ldnmp() { 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}完成" + send_stats "更新します$ldnmp_pods" + echo "更新します${ldnmp_pods}仕上げる" ;; 4) @@ -8376,15 +8378,15 @@ linux_ldnmp() { 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}完成" + 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环境" + send_stats "LDNMP環境を完全に更新します" cd /home/web/ docker compose down --rmi all @@ -8410,7 +8412,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "LDNMP環境をアンインストールします" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8424,7 +8426,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -8434,7 +8436,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "無効な入力!" esac break_end @@ -8452,12 +8454,12 @@ linux_panel() { while true; do clear - echo -e "应用市场" + echo -e "アプリケーション市場" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # ループで色を設定します for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8466,59 +8468,62 @@ linux_panel() { fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" + echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" + echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" + echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" + echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" + echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" + echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" + echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" + echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" + echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" + echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" + echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" + echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" + echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" + echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" + echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" + echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" + echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" + echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" + echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" + echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议" + echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" + echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" + echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" + echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) @@ -8694,27 +8699,27 @@ linux_panel() { ;; 7) clear - send_stats "搭建哪吒" + send_stats "ネザを作る" 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://nezha.wiki/guide/dashboard.html" + echo -e "Nezhaの監視$check_docker $update_status" + echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" + echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 使用" + echo "1。使用します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -8770,7 +8775,7 @@ linux_panel() { ;; 9) - send_stats "搭建邮局" + send_stats "郵便局を建設します" clear install telnet local docker_name=“mailserver” @@ -8779,43 +8784,43 @@ linux_panel() { check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "郵便局サービス$check_docker $update_status" + echo "Poste.ioはオープンソースメールサーバーソリューションです。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}ポート$port現在利用可能です${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "アクセスアドレス:" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "これらのDNSレコードを最初に解析します" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -8825,7 +8830,7 @@ linux_panel() { echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "任意のキーを押して続行します..." read -n 1 -s -r -p "" install jq @@ -8844,9 +8849,9 @@ linux_panel() { grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "poste.io已经安装完成" + echo "Poste.ioがインストールされています" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" echo "" @@ -8869,9 +8874,9 @@ linux_panel() { grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "poste.io已经安装完成" + echo "Poste.ioがインストールされています" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" echo "" ;; @@ -8882,7 +8887,7 @@ linux_panel() { rm -rf /home/docker/mail local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; *) @@ -8915,7 +8920,7 @@ linux_panel() { clear ip_address - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -8925,7 +8930,7 @@ linux_panel() { 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已经安装完成" + echo "Rocket.chatがインストールされています" check_docker_app_ip } @@ -8935,7 +8940,7 @@ linux_panel() { docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9016,7 +9021,7 @@ linux_panel() { cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -9030,7 +9035,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9170,27 +9175,27 @@ linux_panel() { ;; 19) - send_stats "搭建雷池" + send_stats "サンダープールを構築します" local docker_name=safeline-mgt local docker_port=9443 while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "サンダープールサービス$check_docker" + echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -9200,7 +9205,7 @@ linux_panel() { local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "雷池WAF面板已经安装完成" + echo "サンダープールWAFパネルがインストールされています" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9213,7 +9218,7 @@ linux_panel() { local app_no=$sub_choice grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt clear - echo "雷池WAF面板已经更新完成" + echo "サンダープールWAFパネルが更新されました" check_docker_app_ip ;; 3) @@ -9224,7 +9229,7 @@ linux_panel() { docker compose down --rmi all local app_no=$sub_choice sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9613,7 +9618,7 @@ linux_panel() { local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -9664,7 +9669,7 @@ linux_panel() { ;; 38) - send_stats "小雅全家桶" + send_stats "Xiaoyaファミリーバケット" clear install_docker check_disk_space 1 @@ -9832,7 +9837,7 @@ linux_panel() { docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -9859,9 +9864,9 @@ linux_panel() { prometheus_install clear ip_address - echo "已经安装完成" + echo "インストール" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "最初のユーザー名とパスワードは次のとおりです" } docker_app_update() { @@ -9879,7 +9884,7 @@ linux_panel() { docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9963,7 +9968,7 @@ linux_panel() { 51) clear - send_stats "PVE开小鸡" + send_stats "PVEチキン" 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 ;; @@ -10078,7 +10083,7 @@ linux_panel() { docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10093,7 +10098,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10120,7 +10125,7 @@ linux_panel() { docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10135,7 +10140,7 @@ linux_panel() { docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10143,7 +10148,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10163,17 +10168,17 @@ linux_panel() { docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "初期ユーザー名:admin" + echo "最初のパスワード:changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "アプリが更新されました" } @@ -10183,7 +10188,7 @@ linux_panel() { cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10228,7 +10233,7 @@ linux_panel() { sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10244,7 +10249,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10496,7 +10501,7 @@ linux_panel() { docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "libretvログインパスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10525,7 +10530,7 @@ linux_panel() { docker_rum() { - read -e -p "设置MoonTV的登录密码: " app_passwd + read -e -p "MOONTVログインパスワードを設定します。" app_passwd docker run -d \ --name moontv \ @@ -10608,8 +10613,8 @@ linux_panel() { docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + read -e -p "設定${docker_name}ログインユーザー名:" app_use + read -e -p "設定${docker_name}ログインパスワード:" app_passwd docker run -d \ --name xunlei \ @@ -10702,11 +10707,11 @@ linux_panel() { install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 公式のDocker-ComposeおよびEnvファイルをダウンロードします curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # ランダムキーとパスワードを生成します local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10715,17 +10720,17 @@ linux_panel() { sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 管理者アカウント情報を追加します echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # コンテナを起動します docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10735,7 +10740,7 @@ linux_panel() { curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 元の変数を保持します source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10752,7 +10757,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10801,7 +10806,7 @@ linux_panel() { cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10810,12 +10815,231 @@ linux_panel() { + 82) + + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 + + docker_rum() { + + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest + + } + + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 83) + + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 + + docker_rum() { + + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest + + } + + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 84) + + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 + + docker_rum() { + + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest + + } + + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 85) + + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + + docker compose up -d + + clear + echo "インストール" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } + + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "アプリはアンインストールされています" + } + + docker_app_plus + + + ;; + + + 86) + + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 + + docker_rum() { + + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin + + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin + + + } + + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 87) + + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 + + docker_rum() { + + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv + + } + + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 88) + + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 + + docker_rum() { + + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest + + + } + + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app + + ;; + 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -10828,35 +11052,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "バックエンドワークスペース" + echo -e "バックエンドワークスペース" + echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" + echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}1. ${gl_bai}ワークスペース番号1" + echo -e "${gl_kjlan}2. ${gl_bai}ワークスペースNo. 2" + echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" + echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" + echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" + echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" + echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" + echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" + echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" + echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -10864,7 +11088,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; @@ -10872,63 +11096,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; @@ -10940,21 +11164,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH常駐モード" + echo -e "SSH常駐モード${tmux_sshd_status}" + echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1。2をオンにします。オフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -10970,29 +11194,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "カスタムワークスペース" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "バックグラウンドワークスペースにコマンドを注入します" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "ワークスペースを削除します" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -11017,54 +11241,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}スクリプトの起動ショートカットキーを設定します${gl_kjlan}2. ${gl_bai}ログインパスワードを変更します" + echo -e "${gl_kjlan}3. ${gl_bai}ルートパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンのPythonをインストールします" + 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}ルートアカウントを無効にして新しいアカウントを作成します${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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + 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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "ショートカットキーが設定されています" + send_stats "スクリプトのショートカットキーが設定されています" break_end linux_Settings done @@ -11072,34 +11296,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "ログインパスワードを設定します" + echo "ログインパスワードを設定します" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "ルートパスワードモード" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "Pyバージョン管理" + echo "Pythonバージョン管理" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + echo -e "現在のPythonバージョン番号:${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 "推奨バージョン: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 + read -e -p "インストールするPythonバージョン番号を入力します(Enter 0からExit):" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "スクリプトPy管理" break_end linux_Settings fi @@ -11132,7 +11356,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi @@ -11161,55 +11385,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" + send_stats "スイッチスクリプトPyバージョン" ;; 5) root_use - send_stats "开放端口" + send_stats "オープンポート" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "すべてのポートが開いています" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "SSHポートを変更します" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 現在の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}" + # 現在のSSHポート番号を印刷します + echo -e "現在のSSHポート番号は次のとおりです。${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # ユーザーに新しい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端口已修改" + send_stats "SSHポートが変更されました" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "SSHポート変更を終了します" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "ポート番号は無効です。1〜65535の数字を入力してください。" + send_stats "無効なSSHポート入力" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "入力が無効です。番号を入力してください。" + send_stats "無効なSSHポート入力" break_end fi done @@ -11228,8 +11452,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "新しいユーザーはルートを無効にします" + read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11244,49 +11468,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "操作が完了しました。" ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "V4/V6の優先度を設定します" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "IPv4の優先度に切り替えました" + send_stats "IPv4の優先度に切り替えました" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "IPv6の優先度に切り替えました" + send_stats "IPv6の優先度に切り替えました" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + send_stats "IPv6修正" ;; *) @@ -11304,43 +11528,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "仮想メモリを設定します" while true; do clear - echo "设置虚拟内存" + 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 -e "現在の仮想メモリ:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G仮想メモリが設定されています" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G仮想メモリが設定されています" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G仮想メモリが設定されています" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "カスタム仮想メモリが設定されています" ;; *) @@ -11353,8 +11577,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "ユーザー管理" + echo "ユーザーリスト" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11365,58 +11589,62 @@ EOF echo "" - echo "账户操作" + echo "アカウント操作" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3.最高の権限を与える4。最高の権限をキャンセルします" echo "------------------------" - echo "5. 删除账号" + echo "5.アカウントを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # ユーザーに新しいユーザー名を入力するように求めます + read -e -p "新しいユーザー名を入力してください:" new_username - # 创建新用户并设置密码 + # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "操作が完了しました。" ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # ユーザーに新しいユーザー名を入力するように求めます + read -e -p "新しいユーザー名を入力してください:" new_username - # 创建新用户并设置密码 + # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 新規ユーザーのsudo許可を付与します echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers - echo "操作已完成。" + install sudo + + echo "操作が完了しました。" ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "ユーザー名を入力してください:" username + # 新規ユーザーのsudo許可を付与します echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + + install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "ユーザー名を入力してください:" username + # sudoersファイルからユーザーのsudo許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "削除するにはユーザー名を入力してください:" username + # ユーザーとそのホームディレクトリを削除します userdel -r "$username" ;; @@ -11429,50 +11657,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "ユーザー情報ジェネレーター" + echo "ランダムユーザー名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "ランダムユーザー名$i: $username" done echo "" - 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个随机用户姓名 + # 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" + echo "ランダムなユーザー名$i: $user_name" done echo "" - echo "随机UUID" + echo "ランダムuuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "ランダムuuid$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "ランダムなパスワード$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "ランダムなパスワード$i: $password" done echo "" @@ -11480,46 +11708,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "タイムゾーンを変更します" while true; do clear - echo "系统时间信息" + echo "システム時間情報" - # 获取当前系统时区 + # 現在のシステムタイムゾーンを取得します local timezone=$(current_timezone) - # 获取当前系统时间 + # 現在のシステム時間を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # タイムゾーンと時間を表示します + echo "現在のシステムタイムゾーン:$timezone" + echo "現在のシステム時間:$current_time" echo "" - echo "时区切换" + echo "タイムゾーンの切り替え" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + 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 "11。英国のロンドン時間12。パリの時間フランスの時間" + echo "13。ベルリン時代、ドイツ14。モスクワ・タイム、ロシア" + echo "15。オランダのユトレヒト時間16。スペインでのマドリード時間" echo "------------------------" - echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "アメリカ" + echo "21。WesternTime22。東部時間" + echo "23。カナダ時間24。メキシコの時間" + echo "25。ブラジル時間26。アルゼンチン時間" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31。UTCグローバル標準時間" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -11562,21 +11790,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "ホスト名を変更します" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # Debian、Ubuntu、Centosなどの他のシステム。 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11594,11 +11822,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "ホスト名は次のように変更されています。$new_hostname" + send_stats "ホスト名が変更されました" sleep 1 else - echo "已退出,未更改主机名。" + echo "終了すると、ホスト名は変更されていません。" break fi done @@ -11606,32 +11834,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "システムの更新ソースを変更します" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "更新ソース領域を選択します" + echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "中国本土のデフォルトソース" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "中国本土の教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "海外起源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "キャンセル" ;; esac @@ -11639,62 +11867,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "タイミングタスク管理" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "タイミングされたタスクリスト" crontab -l echo "" - echo "操作" + echo "動作します" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1。毎月のタスク2。毎週のタスク" + echo "3。毎日のタスク4。時間ごとのタスク" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "毎日タスクを実行する時間を選択しますか? (時間、0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "時限タスクを追加します" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "削除する必要があるキーワードを入力してください。" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "タイミングタスクを削除します" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "タイミングタスクを編集します" ;; *) break # 跳出循环,退出菜单 @@ -11706,32 +11934,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "ローカルホストの解析" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "ネイティブホストのペルシングリスト" + echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" cat /etc/hosts echo "" - echo "操作" + echo "動作します" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1.新しい解析2を追加します。解析アドレスを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "選択を入力してください:" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "ローカルホストの解析が追加されました" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "削除する必要があるコンテンツを解析するために、キーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "ローカルホストの解析と削除" ;; *) break # 跳出循环,退出菜单 @@ -11742,7 +11970,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "SSH防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -11754,20 +11982,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防衛プログラム$check_docker" + echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" + echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2。SSH傍受記録を表示します" + echo "3。リアルタイムログ監視" echo "------------------------" - echo "9. 卸载防御程序" + echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) install_docker @@ -11790,7 +12018,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防衛プログラムがアンインストールされています" ;; *) break @@ -11803,47 +12031,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "電流制限シャットダウン機能" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "電流制限シャットダウン機能" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # limiting_shut_down.shファイルが存在するかどうかを確認してください if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # threshold_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}" + 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}" + echo -e "${gl_hui}現在の制限シャットダウン機能は有効になりません${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 新しい仮想メモリサイズを入力します + echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" + read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day cz_day=${cz_day:-1} cd ~ @@ -11856,15 +12084,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "現在の制限シャットダウン関数はオフになっています" ;; *) break @@ -11877,40 +12105,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "秘密キーログイン" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ルート秘密キーログインモード" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "キーペアが生成され、SSHログインのより安全な方法" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "選択を入力してください:" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "新しいキーを生成します" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "既存の公開キーをインポートします" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "地元の秘密の鍵を表示します" echo "------------------------" - echo "公钥信息" + echo "公開鍵情報" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "秘密のキー情報" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -11926,18 +12154,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "電報警告" + echo "TG-BOTモニタリングと早期警告機能" + echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "しきい値に達した後、ユーザーはユーザーに送信されます" + echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "電報警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -11959,7 +12187,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # 〜/.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 @@ -11970,21 +12198,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-BOT早期警告システムが開始されました" + echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -12028,7 +12256,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -12046,67 +12274,67 @@ EOF 39) clear - send_stats "命令行历史记录" + send_stats "コマンドラインの履歴" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) ;; 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "メッセージボード" + echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "ワンストップチューニングスタート" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10。タイムゾーンをに設定します${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12123,25 +12351,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10。 Linuxシステムのカーネルパラメーターの最適化" + echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac @@ -12149,7 +12377,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "システムを再起動します" server_reboot ;; 100) @@ -12165,32 +12393,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "プライバシーとセキュリティ" + echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" + echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "現在のステータス:$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1。コレクションをオンにします" + echo "2。コレクションを閉じます" echo "--------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "コレクションは閉じた" + send_stats "プライバシーとセキュリティは収集のために閉鎖されています" ;; *) break @@ -12206,11 +12434,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "テックライオンスクリプトをアンインストールします" + echo "テックライオンスクリプトをアンインストールします" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) @@ -12218,16 +12446,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "スクリプトはアンインストールされています、さようなら!" break_end clear exit ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -12237,7 +12465,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -12255,187 +12483,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "ファイルマネージャー" while true; do clear - echo "文件管理器" + echo "ファイルマネージャー" echo "------------------------" - echo "当前路径" + echo "現在のパス" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" + echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" + echo "15.ファイルを削除します" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" + echo "25。ファイルを別のサーバーに渡します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "ディレクトリ名を入力してください:" dirname + cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" + send_stats "ディレクトリに移動します" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "削除するには、ディレクトリ名を入力してください。" dirname + rm -rf "$dirname" && echo "ディレクトリが削除されました" || echo "削除が失敗しました" + send_stats "ディレクトリを削除します" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "前のメニューディレクトリに戻ります" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "作成するにはファイル名を入力してください。" filename + touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" + send_stats "ファイルを作成します" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "編集するにはファイル名を入力してください:" filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "ファイルを編集します" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名文件" + 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 "删除文件" + read -e -p "削除するには、ファイル名を入力してください。" filename + rm -f "$filename" && echo "削除されたファイル" || echo "削除が失敗しました" + send_stats "ファイルを削除します" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" + send_stats "圧縮ファイル/ディレクトリ" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "ファイル名(.tar.gz)を入力してください:" filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" + send_stats "ファイル/ディレクトリを解凍します" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "エラー:ファイルまたはディレクトリは存在しません。" + send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "エラー:ターゲットパスを入力してください。" + send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" + send_stats "ファイルまたはディレクトリを移動します" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "エラー:ファイルまたはディレクトリは存在しません。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "エラー:ターゲットパスを入力してください。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # -Rオプションを使用して、ディレクトリを再帰的にコピーします + cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" + send_stats "ファイルまたはディレクトリをコピーします" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "転送されるファイルパスを入力してください。" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "エラー:ファイルは存在しません。" + send_stats "ファイルの転送に失敗しました:ファイルは存在しません" continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "エラー:リモートサーバーIPを入力してください。" + send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "エラー:リモートサーバーのパスワードを入力してください。" + send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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を使用してファイルを転送します scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "スクリプトは最新です$sh_v_new" break_end ~/kejilion.sh exit @@ -12733,15 +12961,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}自動更新は閉じられています${gl_bai}" + send_stats "スクリプト自動更新を閉じます" break_end ;; *) @@ -12763,41 +12991,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "テクノロジーライオンスクリプトツールボックス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}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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}7. ${gl_bai}ワープ管理" +echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" +echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" +echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" +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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu Serverオープニングスクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "選択を入力してください:" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 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 "warp管理" ; install wget + 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 ;; @@ -12808,13 +13036,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; 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 "无效的输入!" ;; + *) echo "無効な入力!" ;; esac break_end done @@ -12822,47 +13050,47 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "Kコマンド参照ユースケース" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "以下は、Kコマンドリファレンスユースケースです。" +echo "スクリプトkを開始します" +echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" +echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" +echo "システムKアップデートを更新| Kアップデート" +echo "クリーンシステムガベージkクリーン| kきれい" +echo "システムパネルk dd |を再インストールしますk再インストール" +echo "BBR3コントロールパネルK BBR3 | K BBRV3" +echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" +echo "仮想メモリkスワップ2048を設定します" +echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" +echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" +echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" +echo "SSHリモート接続ツールK SSH | Kリモート接続" +echo "rsyncリモート同期ツールk rsync | Kリモート同期" +echo "ハードディスク管理ツールKディスク| Kハードディスク管理" +echo "イントラネット浸透(サーバー側)K FRP" +echo "イントラネット浸透(クライアント)K FRPC" +echo "ソフトウェアStart K Start SSHD | k sshdを開始します" +echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" +echo "ソフトウェア再起動k再起動sshd | k再起動sshd" +echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" +echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" +echo "ドメイン名証明書アプリケーションK SSL" +echo "ドメイン名証明書の有効期限クエリK SSL PS" +echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" +echo "Docker Container Management K Docker PS | K Dockerコンテナ" +echo "Docker Image Management K Docker IMG | K Docker画像" +echo "LDNMPサイト管理k Web" +echo "LDNMPキャッシュクリーンアップK Webキャッシュ" +echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" +echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" +echo "ロードバランスkロードバランス| kロードバランシングをインストールします" +echo "ファイアウォールパネルk fhq | kファイアウォール" +echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" } @@ -12870,19 +13098,19 @@ echo "阻止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 "安装软件" + send_stats "ソフトウェアをインストールします" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "ソフトウェアをアンインストールします" remove "$@" ;; update|更新) @@ -12916,7 +13144,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "タイム付きRSYNC同期" run_task "$@" ;; @@ -12935,7 +13163,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -12948,13 +13176,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "仮想メモリをすばやく設定します" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "タイムゾーンをすばやく設定します" set_timedate "$@" ;; @@ -12998,42 +13226,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "ソフトウェアステータスビュー" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "ソフトウェアスタートアップ" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "ソフトウェアの一時停止" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "ソフトウェアの再起動" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "ソフトウェアが起動します" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "証明書のステータスを確認してください" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "すぐに証明書を申請してください" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "すぐに証明書を申請してください" else k_info fi @@ -13043,15 +13271,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Dockerをすばやくインストールします" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "クイックコンテナ管理" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "クイックミラー管理" docker_image ;; *) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 3ee9acbaf..d5967e721 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.6" +sh_v="4.0.7" gl_hui='\e[37m' @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -1428,7 +1428,9 @@ install_ssltls() { 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]?))))$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' + # 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 @@ -7679,7 +7681,7 @@ linux_ldnmp() { echo "Redis Port : 6379" echo "" echo "웹 사이트 URL : https : //$yuming" - echo "백엔드 로그인 경로 : /admin" + echo "백그라운드 로그인 경로 : /admin" echo "------------------------" echo "사용자 이름 : 관리자" echo "비밀번호 : 관리자" @@ -8514,7 +8516,10 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의" + echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" + echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" + echo -e "${gl_kjlan}85. ${color85}Immich 사진 비디오 관리자${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" + echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9832,7 +9837,7 @@ linux_panel() { docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10166,14 +10171,14 @@ linux_panel() { echo "설치" check_docker_app_ip echo "초기 사용자 이름 : 관리자" - echo "初始密码: ChangeMe" + echo "초기 비밀번호 : changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "앱이 업데이트되었습니다" } @@ -10496,7 +10501,7 @@ linux_panel() { docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd docker run -d \ --name libretv \ @@ -10525,7 +10530,7 @@ linux_panel() { docker_rum() { - read -e -p "设置MoonTV的登录密码: " app_passwd + read -e -p "MOONTV 로그인 비밀번호 설정 :" app_passwd docker run -d \ --name moontv \ @@ -10608,8 +10613,8 @@ linux_panel() { docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + read -e -p "설정${docker_name}로그인 사용자 이름 :" app_use + read -e -p "설정${docker_name}로그인 비밀번호 :" app_passwd docker run -d \ --name xunlei \ @@ -10702,11 +10707,11 @@ linux_panel() { install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # 임의의 키와 암호를 생성합니다 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10715,17 +10720,17 @@ linux_panel() { sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 관리자 계정 정보를 추가하십시오 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # 컨테이너를 시작하십시오 docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10735,7 +10740,7 @@ linux_panel() { curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 원래 변수를 유지하십시오 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10752,7 +10757,7 @@ linux_panel() { docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10801,7 +10806,7 @@ linux_panel() { cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10810,12 +10815,231 @@ linux_panel() { + 82) + + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 + + docker_rum() { + + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest + + } + + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 83) + + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 + + docker_rum() { + + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest + + } + + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 84) + + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 + + docker_rum() { + + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest + + } + + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 85) + + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + + docker compose up -d + + clear + echo "설치" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } + + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "앱이 제거되었습니다" + } + + docker_app_plus + + + ;; + + + 86) + + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 + + docker_rum() { + + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin + + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin + + + } + + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 87) + + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 + + docker_rum() { + + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv + + } + + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 88) + + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 + + docker_rum() { + + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest + + + } + + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app + + ;; + 0) kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -10828,35 +11052,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "백엔드 작업 공간" + echo -e "백엔드 작업 공간" + echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." + echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." + echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}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}작업 공간 No. 4" + echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" + echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" + echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" + echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" + echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 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}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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -10864,7 +11088,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -10872,63 +11096,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -10940,21 +11164,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH 거주 모드" + echo -e "SSH 거주 모드${tmux_sshd_status}" + echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1. 2를 켜십시오. 2를 끕니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -10970,29 +11194,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "사용자 정의 작업 공간" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "배경 작업 공간에 명령을 주입합니다" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "작업 공간을 삭제합니다" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -11017,54 +11241,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}스크립트 스타트 업 단축키 키를 설정하십시오${gl_kjlan}2. ${gl_bai}로그인 암호를 수정하십시오" + echo -e "${gl_kjlan}3. ${gl_bai}루트 암호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python을 설치하십시오" + 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + 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 고위험 취약점을 수정하십시오" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "바로 가기 키가 설정되어 있습니다" + send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings done @@ -11072,34 +11296,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "로그인 비밀번호를 설정하십시오" + echo "로그인 비밀번호를 설정하십시오" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "루트 비밀번호 모드" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "PY 버전 관리" + echo "파이썬 버전 관리" + echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + 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 "권장 버전 : 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 + read -e -p "설치하려는 Python 버전 번호를 입력하십시오 (종료하려면 0을 입력하십시오) :" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "스크립트 PY 관리" break_end linux_Settings fi @@ -11132,7 +11356,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi @@ -11161,55 +11385,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + send_stats "스크립트 Py 버전을 스위치하십시오" ;; 5) root_use - send_stats "开放端口" + send_stats "포트 열기" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "모든 포트가 열려 있습니다" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "SSH 포트를 수정하십시오" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 현재 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}" + # 현재 SSH 포트 번호를 인쇄하십시오 + echo -e "현재 SSH 포트 번호는 다음과 같습니다.${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # 사용자에게 새 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端口已修改" + send_stats "SSH 포트가 수정되었습니다" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "SSH 포트 수정을 종료하십시오" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." + send_stats "잘못된 SSH 포트 입력" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "입력이 유효하지 않으므로 번호를 입력하십시오." + send_stats "잘못된 SSH 포트 입력" break_end fi done @@ -11228,8 +11452,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "신규 사용자는 루트를 비활성화합니다" + read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11244,49 +11468,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "V4/V6 우선 순위를 설정하십시오" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv4${gl_bai}우선 사항" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1. IPv4 우선 순위 2. IPv6 우선 순위 3. IPv6 수리 도구" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "IPv4 우선 순위로 전환되었습니다" + send_stats "IPv4 우선 순위로 전환되었습니다" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "IPv6 우선 순위로 전환되었습니다" + send_stats "IPv6 우선 순위로 전환되었습니다" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "이 기능은 마스터 JHB가 제공합니다." + send_stats "IPv6 수정" ;; *) @@ -11304,43 +11528,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "가상 메모리를 설정합니다" while true; do clear - echo "设置虚拟内存" + 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 -e "현재 가상 메모리 :${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G 가상 메모리가 설정되었습니다" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G 가상 메모리가 설정되었습니다" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "사용자 정의 가상 메모리가 설정되었습니다" ;; *) @@ -11353,8 +11577,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "사용자 관리" + echo "사용자 목록" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11365,58 +11589,62 @@ EOF echo "" - echo "账户操作" + echo "계정 운영" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." echo "------------------------" - echo "5. 删除账号" + echo "5. 계정을 삭제하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + read -e -p "새 사용자 이름을 입력하십시오 :" new_username - # 创建新用户并设置密码 + # 새 사용자를 생성하고 비밀번호를 설정하십시오 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + read -e -p "새 사용자 이름을 입력하십시오 :" new_username - # 创建新用户并设置密码 + # 새 사용자를 생성하고 비밀번호를 설정하십시오 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 새로운 사용자에게 허가를 부여하십시오 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers - echo "操作已完成。" + install sudo + + echo "작업이 완료되었습니다." ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "사용자 이름을 입력하십시오 :" username + # 새로운 사용자에게 허가를 부여하십시오 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + + install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "사용자 이름을 입력하십시오 :" username + # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "삭제하려면 사용자 이름을 입력하십시오." username + # 사용자와 홈 디렉토리를 삭제하십시오 userdel -r "$username" ;; @@ -11429,50 +11657,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "사용자 정보 생성기" + echo "임의의 사용자 이름" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "임의의 사용자 이름$i: $username" done echo "" - 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个随机用户姓名 + # 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" + echo "임의의 사용자 이름$i: $user_name" done echo "" - echo "随机UUID" + echo "무작위 uuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "무작위 uuid$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "랜덤 비밀번호$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "랜덤 비밀번호$i: $password" done echo "" @@ -11480,46 +11708,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "시간대를 변경하십시오" while true; do clear - echo "系统时间信息" + echo "시스템 시간 정보" - # 获取当前系统时区 + # 현재 시스템 시간대를 얻으십시오 local timezone=$(current_timezone) - # 获取当前系统时间 + # 현재 시스템 시간을 얻으십시오 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # 시간대와 시간을 보여줍니다 + echo "현재 시스템 시간대 :$timezone" + echo "현재 시스템 시간 :$current_time" echo "" - echo "时区切换" + echo "시간대 스위칭" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + echo "아시아" + echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" + echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" + echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" + echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" + echo "9. 태국 방콕에서의 시간" echo "------------------------" - echo "欧洲" - echo "11. 英国伦敦时间 12. 法国巴黎时间" - echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" - echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" + echo "유럽" + echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" + echo "13. 베를린 시간, 독일 14. 모스크바 시간, 러시아" + echo "15. 네덜란드에서 우트레흐트 시간 16. 스페인의 마드리드 시간" echo "------------------------" - echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "미국" + echo "21. 서양 시간 22. 동부 시간" + echo "23. 캐나다 시간 24. 멕시코 시간" + echo "25. 브라질 시간 26. 아르헨티나 시간" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31. UTC 글로벌 표준 시간" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -11562,21 +11790,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "호스트 이름을 수정하십시오" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # Debian, Ubuntu, Centos 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11594,11 +11822,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" + send_stats "호스트 이름이 변경되었습니다" sleep 1 else - echo "已退出,未更改主机名。" + echo "종료, 호스트 이름이 변경되지 않았습니다." break fi done @@ -11606,32 +11834,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "시스템 업데이트 소스를 변경하십시오" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "업데이트 소스 영역을 선택하십시오" + echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "중국 본토의 기본 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "중국 본토의 교육 원" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "해외 출신" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "취소" ;; esac @@ -11639,62 +11867,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "타이밍 작업 관리" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "시간이 정한 작업 목록" crontab -l echo "" - echo "操作" + echo "작동하다" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1. 월간 작업 2. 주간 작업" + echo "3. 일일 작업 4. 시간당 작업" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "선택을 입력하십시오 :" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "매일 작업을 수행 할 시간을 선택하십시오. (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "시간이 정한 작업을 추가하십시오" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "타이밍 작업을 삭제하십시오" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "타이밍 작업 편집" ;; *) break # 跳出循环,退出菜单 @@ -11706,32 +11934,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "지역 호스트 구문 분석" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "기본 호스트 구문 분석 목록" + echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." cat /etc/hosts echo "" - echo "操作" + echo "작동하다" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "선택을 입력하십시오 :" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "로컬 호스트 구문 분석이 추가되었습니다" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "삭제 해야하는 콘텐츠를 구문 분석하기위한 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "로컬 호스트 구문 분석 및 삭제" ;; *) break # 跳出循环,退出菜单 @@ -11742,7 +11970,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "SSH 방어" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -11754,20 +11982,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH 방어 프로그램$check_docker" + echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" + echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2. SSH 차단 레코드보기" + echo "3. 실시간 로그 모니터링" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 방어 프로그램을 제거하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) install_docker @@ -11790,7 +12018,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2ban 방어 프로그램은 제거되었습니다" ;; *) break @@ -11803,47 +12031,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "현재 제한 종료 기능" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "현재 제한 종료 기능" + echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" + echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # limiting_shut_down.sh 파일이 있는지 확인하십시오 if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # threshold_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}" + 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}" + echo -e "${gl_hui}전류 제한 종료 기능이 활성화되지 않았습니다${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 새 가상 메모리 크기를 입력하십시오 + echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." + read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day cz_day=${cz_day:-1} cd ~ @@ -11856,15 +12084,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "전류 제한 종료 기능이 꺼졌습니다" ;; *) break @@ -11877,40 +12105,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "개인 키 로그인" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "루트 비공개 키 로그인 모드" + echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "선택을 입력하십시오 :" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "새로운 키를 생성하십시오" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "기존 공개 키를 가져옵니다" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "로컬 비밀 키를보십시오" echo "------------------------" - echo "公钥信息" + echo "공개 키 정보" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "개인 키 정보" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -11926,18 +12154,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "전보 경고" + echo "TG-BOT 모니터링 및 조기 경고 기능" + echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." + echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." + echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "전보 경고가 활성화되었습니다" cd ~ install nano tmux bc jq check_crontab_installed @@ -11959,7 +12187,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # ~/.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 @@ -11970,21 +12198,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-BOT 조기 경고 시스템이 시작되었습니다" + echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -12028,7 +12256,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -12046,67 +12274,67 @@ EOF 39) clear - send_stats "命令行历史记录" + send_stats "명령 줄 기록" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) ;; 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "게시판" + echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "원 스톱 튜닝 시작" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 시간대를 설정하십시오${gl_huang}상하이${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12123,25 +12351,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux 시스템의 커널 매개 변수 최적화" + echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac @@ -12149,7 +12377,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하십시오" server_reboot ;; 100) @@ -12165,32 +12393,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "개인 정보 및 보안" + echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." + echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "현재 상태 :$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1. 수집을 켭니다" + echo "2. 컬렉션을 닫습니다" echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "컬렉션이 닫혔습니다" + send_stats "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" ;; *) break @@ -12206,11 +12434,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "기술 라이온 스크립트를 제거하십시오" + echo "기술 라이온 스크립트를 제거하십시오" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) @@ -12218,16 +12446,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "대본은 제거되었습니다." break_end clear exit ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -12237,7 +12465,7 @@ EOF ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -12255,187 +12483,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "파일 관리자" while true; do clear - echo "文件管理器" + echo "파일 관리자" echo "------------------------" - echo "当前路径" + echo "현재 경로" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" + echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" + echo "15. 파일을 삭제하십시오" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" + echo "25. 파일을 다른 서버로 전달합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "디렉토리 이름을 입력하십시오 :" dirname + cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" + send_stats "디렉토리로 이동하십시오" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "삭제하려면 디렉토리 이름을 입력하십시오." dirname + rm -rf "$dirname" && echo "디렉토리가 삭제되었습니다" || echo "삭제가 실패했습니다" + send_stats "디렉토리 삭제" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "이전 메뉴 디렉토리로 돌아갑니다" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "작성하려면 파일 이름을 입력하십시오." filename + touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" + send_stats "파일을 만듭니다" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "편집 할 파일 이름을 입력하십시오." filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "파일 편집" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名文件" + 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 "删除文件" + read -e -p "삭제하려면 파일 이름을 입력하십시오." filename + rm -f "$filename" && echo "파일이 삭제되었습니다" || echo "삭제가 실패했습니다" + send_stats "파일 삭제" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" + send_stats "압축 파일/디렉토리" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" + send_stats "압축 파일/디렉토리 해제" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "오류 : 대상 경로를 입력하십시오." + send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" + send_stats "파일 또는 디렉토리를 이동하십시오" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "오류 : 대상 경로를 입력하십시오." + send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 + cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" + send_stats "파일 또는 디렉토리를 복사합니다" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "오류 : 파일이 존재하지 않습니다." + send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "오류 : 원격 서버 IP를 입력하십시오." + send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "오류 : 원격 서버 비밀번호를 입력하십시오." + send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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를 사용하여 파일을 전송합니다 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "스크립트는 최신입니다$sh_v_new" break_end ~/kejilion.sh exit @@ -12733,15 +12961,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}자동 업데이트가 닫힙니다${gl_bai}" + send_stats "스크립트 자동 업데이트를 닫습니다" break_end ;; *) @@ -12763,41 +12991,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "기술 라이온 스크립트 도구 상자 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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu 서버 오프닝 스크립트" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}종료 스크립트" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "선택을 입력하십시오 :" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 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 "warp管理" ; install wget + 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 ;; @@ -12808,13 +13036,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; 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 "无效的输入!" ;; + *) echo "잘못된 입력!" ;; esac break_end done @@ -12822,47 +13050,47 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "K 명령 참조 사용 사례" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "다음은 K 명령 참조 유스 케이스입니다." +echo "스크립트 시작 k" +echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" +echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" +echo "업데이트 시스템 K 업데이트 | K 업데이트" +echo "깨끗한 시스템 쓰레기 K Clean | K 청소" +echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" +echo "BBR3 제어판 K BBR3 | K bbrv3" +echo "커널 튜닝 패널 K nhyh | K 커널 최적화" +echo "가상 메모리 K 스왑 2048을 설정하십시오" +echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" +echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" +echo "시스템 백업 기능 K 백업 | K bf | K 백업" +echo "SSH 원격 연결 도구 K SSH | K 원격 연결" +echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" +echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" +echo "인트라넷 침투 (서버 측) K frps" +echo "인트라넷 침투 (클라이언트) K frpc" +echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" +echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" +echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" +echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" +echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" +echo "도메인 이름 인증서 응용 프로그램 K SSL" +echo "도메인 이름 인증서 만료 쿼리 K SSL PS" +echo "도커 환경 설치 K 도커 설치 | K 도커 설치" +echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" +echo "Docker Image Management K Docker img | K Docker Image" +echo "LDNMP 사이트 관리 K 웹" +echo "LDNMP 캐시 정리 K 웹 캐시" +echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" +echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." +echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" +echo "방화벽 패널 K FHQ | K 방화벽" +echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" } @@ -12870,19 +13098,19 @@ echo "阻止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 "安装软件" + send_stats "소프트웨어를 설치하십시오" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "소프트웨어를 제거하십시오" remove "$@" ;; update|更新) @@ -12916,7 +13144,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "시간이 정한 RSYNC 동기화" run_task "$@" ;; @@ -12935,7 +13163,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -12948,13 +13176,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 신속하게 설정했습니다" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정하십시오" set_timedate "$@" ;; @@ -12998,42 +13226,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "소프트웨어 상태보기" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "소프트웨어 시작" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "소프트웨어 일시 정지" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "소프트웨어 재시작" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "소프트웨어 부츠" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "인증서 상태를 확인하십시오" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "인증서를 신속하게 신청하십시오" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "인증서를 신속하게 신청하십시오" else k_info fi @@ -13043,15 +13271,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Docker를 신속하게 설치하십시오" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 미러 관리" docker_image ;; *) diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 40c625d50..527605243 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.6" +sh_v="4.0.7" gl_hui='\e[37m' @@ -1428,7 +1428,9 @@ install_ssltls() { 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]?))))$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' + # 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 @@ -8514,7 +8516,10 @@ linux_panel() { echo -e "${gl_kjlan}77. ${color77}迅雷離線下載工具${gl_kjlan}78. ${color78}PandaWiki智能文檔管理系統" echo -e "${gl_kjlan}79. ${color79}Beszel服務器監控${gl_kjlan}80. ${color80}linkwarden書籤管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet視頻會議" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet視頻會議${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服務器監控工具${gl_kjlan}84. ${color84}Wallos個人財務管理工具" + echo -e "${gl_kjlan}85. ${color85}immich圖片視頻管理器${gl_kjlan}86. ${color86}jellyfin媒體管理系統" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器${gl_kjlan}88. ${color88}Owncast自託管直播平台" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9832,7 +9837,7 @@ linux_panel() { docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10810,6 +10815,225 @@ linux_panel() { + 82) + + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 + + docker_rum() { + + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest + + } + + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 83) + + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 + + docker_rum() { + + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest + + } + + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 84) + + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 + + docker_rum() { + + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest + + } + + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 85) + + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" + + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + + docker compose up -d + + clear + echo "已經安裝完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } + + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "應用已卸載" + } + + docker_app_plus + + + ;; + + + 86) + + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 + + docker_rum() { + + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin + + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin + + + } + + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 87) + + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 + + docker_rum() { + + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv + + } + + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 88) + + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 + + docker_rum() { + + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest + + + } + + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app + + ;; + 0) kejilion @@ -11400,6 +11624,8 @@ EOF # 賦予新用戶sudo權限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + install sudo + echo "操作已完成。" ;; @@ -11407,6 +11633,8 @@ EOF read -e -p "請輸入用戶名:" username # 賦予新用戶sudo權限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers + + install sudo ;; 4) read -e -p "請輸入用戶名:" username From d93ae471483312461b34511674d166877002f49f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:01:31 +0800 Subject: [PATCH 045/553] Update kejilion.sh --- cn/kejilion.sh | 3902 ++++++++++++++++++++++++------------------------ 1 file changed, 1961 insertions(+), 1941 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 65605db4e..a052b0438 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.7" +sh_v="4.0.8" gl_hui='\e[37m' @@ -5648,7 +5648,10 @@ linux_trash() { done } - +linux_fav() { +send_stats "命令收藏夹" +bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) +} # 创建备份 create_backup() { @@ -8449,10 +8452,12 @@ linux_ldnmp() { linux_panel() { +local sub_choice="$1" +while true; do - while true; do + if [ -z "$sub_choice" ]; then clear echo -e "应用市场" echo -e "${gl_kjlan}------------------------" @@ -8524,2527 +8529,2529 @@ linux_panel() { echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice + fi - case $sub_choice in - 1) + case $sub_choice in + 1|bt) - local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" - local panelurl="https://www.bt.cn/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 2) + ;; + 2|aapanel) - local lujing="[ -d "/www/server/panel" ]" - local panelname="aapanel" - local panelurl="https://www.aapanel.com/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 3) + ;; + 3|1panel) - local lujing="command -v 1pctl" - local panelname="1Panel" - local panelurl="https://1panel.cn/" + local lujing="command -v 1pctl" + local panelname="1Panel" + local panelurl="https://1panel.cn/" - panel_app_install() { - install bash - bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" - } + panel_app_install() { + install bash + bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" + } - panel_app_manage() { - 1pctl user-info - 1pctl update password - } + panel_app_manage() { + 1pctl user-info + 1pctl update password + } - panel_app_uninstall() { - 1pctl uninstall - } + panel_app_uninstall() { + 1pctl uninstall + } - install_panel + install_panel - ;; - 4) + ;; + 4|npm) - local docker_name="npm" - local docker_img="jc21/nginx-proxy-manager:latest" - local docker_port=81 + local docker_name="npm" + local docker_img="jc21/nginx-proxy-manager:latest" + local docker_port=81 - docker_rum() { + 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 + 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="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" - local app_size="1" + local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" + local docker_url="官网介绍: https://nginxproxymanager.com/" + local docker_use="echo \"初始用户名: admin@example.com\"" + local docker_passwd="echo \"初始密码: changeme\"" + local app_size="1" - docker_app + docker_app - ;; + ;; - 5) + 5|openlist) - local docker_name="openlist" - local docker_img="openlistteam/openlist:latest-aria2" - local docker_port=5244 + local docker_name="openlist" + local docker_img="openlistteam/openlist:latest-aria2" + local docker_port=5244 - docker_rum() { + docker_rum() { - docker run -d \ - --restart=always \ - -v /home/docker/openlist:/opt/openlist/data \ - -p ${docker_port}:5244 \ - -e PUID=0 \ - -e PGID=0 \ - -e UMASK=022 \ - --name="openlist" \ - openlistteam/openlist:latest-aria2 + docker run -d \ + --restart=always \ + -v /home/docker/openlist:/opt/openlist/data \ + -p ${docker_port}:5244 \ + -e PUID=0 \ + -e PGID=0 \ + -e UMASK=022 \ + --name="openlist" \ + openlistteam/openlist:latest-aria2 - } + } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" + local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_use="docker exec -it openlist ./openlist admin random" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 6) + 6|webtop-ubuntu) - local docker_name="webtop-ubuntu" - local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" - local docker_port=3006 + local docker_name="webtop-ubuntu" + local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" + local docker_port=3006 - docker_rum() { + 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 \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ - -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 + 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 \ + -e CUSTOM_USER=ubuntu-abc \ + -e PASSWORD=ubuntuABC123 \ + -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的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" - local app_size="2" - docker_app + local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: ubuntu-abc\"" + local docker_passwd="echo \"密码: ubuntuABC123\"" + local app_size="2" + docker_app - ;; - 7) + ;; + 7|nezha) + clear + send_stats "搭建哪吒" + local docker_name="nezha-dashboard" + local docker_port=8008 + while true; do + check_docker_app + check_docker_image_update $docker_name clear - send_stats "搭建哪吒" - 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://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) + check_docker_app_ip + fi + echo "" + echo "------------------------" + echo "1. 使用" + 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 - fi - echo "" - echo "------------------------" - echo "1. 使用" - 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 - ;; + *) + break + ;; - *) - break - ;; + esac + break_end + done + ;; - esac - break_end - done - ;; + 8|qb) + + 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 - 8) + } - local docker_name="qbittorrent" - local docker_img="lscr.io/linuxserver/qbittorrent:latest" - local docker_port=8081 + 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 - 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 + 9|mail) + 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 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" - 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 + 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 ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + yuming=$(cat /home/docker/mail.txt) + echo "访问地址: " + echo "https://$yuming" + fi - 9) - send_stats "搭建邮局" - clear - install telnet - local docker_name=“mailserver” - while true; do - check_docker_app - check_docker_image_update $docker_name + echo "------------------------" + echo "1. 安装 2. 更新 3. 卸载" + echo "------------------------" + echo "0. 返回上一级选单" + echo "------------------------" + read -e -p "输入你的选择: " choice - clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + 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 - 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 "" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.io + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io已经安装完成" + echo "------------------------" + echo "您可以使用以下地址访问poste.io:" + echo "https://$yuming" + echo "" + + ;; - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + 2) + docker rm -f mailserver + docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io已经安装完成" + echo "------------------------" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" - fi + echo "" + ;; + 3) + docker rm -f mailserver + docker rmi -f analogic/poste.io + rm /home/docker/mail.txt + rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "应用已卸载" + ;; - echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" - echo "------------------------" - echo "0. 返回上一级选单" - echo "------------------------" - read -e -p "输入你的选择: " choice + *) + break + ;; - 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 "" + esac + break_end + done - 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 + 10|rocketchat) - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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" - clear - echo "poste.io已经安装完成" - echo "------------------------" - echo "您可以使用以下地址访问poste.io:" - echo "https://$yuming" - echo "" + 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 + } - 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 - - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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 + } - 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 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "应用已卸载" - ;; + 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 "应用已卸载" + } - *) - break - ;; + docker_app_plus + ;; - esac - break_end - done - ;; - 10) + 11|zentao) + local docker_name="zentao-server" + local docker_img="idoop/zentao:latest" + local docker_port=82 - 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_rum() { - 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 - ;; + 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 + } - 11) - local docker_name="zentao-server" - local docker_img="idoop/zentao:latest" - local docker_port=82 + 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 + ;; - docker_rum() { + 12|qinglong) + local docker_name="qinglong" + local docker_img="whyour/qinglong:latest" + local docker_port=5700 + 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 + 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="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" - local app_size="2" - docker_app + } - ;; + local docker_describe="青龙面板是一个定时任务管理平台" + local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 12) - local docker_name="qinglong" - local docker_img="whyour/qinglong:latest" - local docker_port=5700 + ;; + 13|cloudreve) + + 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_rum() { + docker_app_update() { + cd /home/docker/cloud/ && docker compose down --rmi all + cd /home/docker/cloud/ && docker compose up -d + } - docker run -d \ - -v /home/docker/qinglong/data:/ql/data \ - -p ${docker_port}:5700 \ - --name qinglong \ - --hostname qinglong \ - --restart unless-stopped \ - whyour/qinglong:latest + docker_app_uninstall() { + cd /home/docker/cloud/ && docker compose down --rmi all + rm -rf /home/docker/cloud + echo "应用已卸载" + } - } + docker_app_plus + ;; - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 14|easyimage) + local docker_name="easyimage" + local docker_img="ddsderek/easyimage:latest" + local docker_port=8014 + 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 - ;; - 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 - } + 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|emby) + local docker_name="emby" + local docker_img="linuxserver/emby:latest" + local docker_port=8015 - docker_app_update() { - cd /home/docker/cloud/ && docker compose down --rmi all - cd /home/docker/cloud/ && docker compose up -d - } + 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 - 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() { + local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" + local docker_url="官网介绍: https://emby.media/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 16|looking) + local docker_name="looking-glass" + local docker_img="wikihostinc/looking-glass-server" + local docker_port=8016 - } - 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 - ;; + docker_rum() { - 15) - local docker_name="emby" - local docker_img="linuxserver/emby:latest" - local docker_port=8096 + docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - 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="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|adguardhome) + local docker_name="adguardhome" + local docker_img="adguard/adguardhome" + local docker_port=8017 - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker_rum() { - 16) - local docker_name="looking-glass" - local docker_img="wikihostinc/looking-glass-server" - local docker_port=89 + 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 - docker_rum() { + } - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - } + 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 - 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 + 18|onlyoffice) - docker_rum() { + local docker_name="onlyoffice" + local docker_img="onlyoffice/documentserver" + local docker_port=8018 - 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 + 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="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 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|safeline) + send_stats "搭建雷池" - 18) + local docker_name=safeline-mgt + local docker_port=9443 + while true; do + check_docker_app + clear + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + check_docker_app_ip + fi + echo "" - local docker_name="onlyoffice" - local docker_img="onlyoffice/documentserver" - local docker_port=8082 + echo "------------------------" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "------------------------" + echo "0. 返回上一级选单" + echo "------------------------" + read -e -p "输入你的选择: " choice - docker_rum() { + case $choice in + 1) + install_docker + check_disk_space 5 + bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "雷池WAF面板已经安装完成" + check_docker_app_ip + docker exec safeline-mgt resetadmin - 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 + ;; + 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "雷池WAF面板已经更新完成" + check_docker_app_ip + ;; + 3) + docker exec safeline-mgt resetadmin + ;; + 4) + cd /data/safeline + docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "docker compose down && docker compose down --rmi all" + ;; + *) + break + ;; - } + esac + break_end + done - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + ;; - ;; + 20|portainer) + local docker_name="portainer" + local docker_img="portainer/portainer" + local docker_port=8020 - 19) - send_stats "搭建雷池" + docker_rum() { - local docker_name=safeline-mgt - local docker_port=9443 - while true; do - check_docker_app - clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then - check_docker_app_ip - fi - echo "" + 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 - 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)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "雷池WAF面板已经安装完成" - check_docker_app_ip - docker exec safeline-mgt resetadmin - ;; + local docker_describe="portainer是一个轻量级的docker容器管理面板" + local docker_url="官网介绍: https://www.portainer.io/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "雷池WAF面板已经更新完成" - check_docker_app_ip - ;; - 3) - docker exec safeline-mgt resetadmin - ;; - 4) - cd /data/safeline - docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" - echo "docker compose down && docker compose down --rmi all" - ;; - *) - break - ;; + ;; - esac - break_end - done + 21|vscode) + local docker_name="vscode-web" + local docker_img="codercom/code-server" + local docker_port=8021 - ;; - 20) - local docker_name="portainer" - local docker_img="portainer/portainer" - local docker_port=9050 + docker_rum() { - 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 - 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="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 + ;; - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 22|uptime-kuma) + local docker_name="uptime-kuma" + local docker_img="louislam/uptime-kuma:latest" + local docker_port=8022 - 21) - local docker_name="vscode-web" - local docker_img="codercom/code-server" - local docker_port=8180 + docker_rum() { - 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 - 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="Uptime Kuma 易于使用的自托管监控工具" + local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 23|memos) + local docker_name="memos" + local docker_img="ghcr.io/usememos/memos:latest" + local docker_port=8023 + docker_rum() { - 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 - 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="Memos是一款轻量级、自托管的备忘录中心" + local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 24|webtop) + local docker_name="webtop" + local docker_img="lscr.io/linuxserver/webtop:latest" + local docker_port=8024 + + 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 CUSTOM_USER=webtop-abc \ + -e PASSWORD=webtopABC123 \ + -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="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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: webtop-abc\"" + local docker_passwd="echo \"密码: webtopABC123\"" + local app_size="2" + docker_app + ;; - } + 25|nextcloud) + local docker_name="nextcloud" + local docker_img="nextcloud:latest" + local docker_port=8025 + local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - 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 - ;; + docker_rum() { - 24) - local docker_name="webtop" - local docker_img="lscr.io/linuxserver/webtop:latest" - local docker_port=3083 + 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 - docker_rum() { + } + 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 + ;; - 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 CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ - -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 + 26|qd) + local docker_name="qd" + local docker_img="qdtoday/qd:latest" + local docker_port=8026 + 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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" - local app_size="2" - docker_app - ;; + 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 + ;; - 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) + 27|dockge) + local docker_name="dockge" + local docker_img="louislam/dockge:latest" + local docker_port=8027 - docker_rum() { + 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 + 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="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" - local docker_passwd="" - local app_size="3" - docker_app - ;; + 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 + ;; - 26) - local docker_name="qd" - local docker_img="qdtoday/qd:latest" - local docker_port=8923 + 28|speedtest) + local docker_name="speedtest" + local docker_img="ghcr.io/librespeed/speedtest" + local docker_port=8028 - docker_rum() { + docker_rum() { - docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd + docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest - } + } - 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 + 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 + ;; - docker_rum() { + 29|searxng) + local docker_name="searxng" + local docker_img="searxng/searxng" + local docker_port=8029 - 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 + docker_rum() { - } + docker run -d \ + --name searxng \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v "/home/docker/searxng:/etc/searxng" \ + searxng/searxng - 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 + 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 + ;; - docker_rum() { + 30|photoprism) + local docker_name="photoprism" + local docker_img="photoprism/photoprism:latest" + local docker_port=8030 + 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 - 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 - ;; + 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 + ;; - 29) - local docker_name="searxng" - local docker_img="searxng/searxng" - local docker_port=8029 - docker_rum() { + 31|s-pdf) + local docker_name="s-pdf" + local docker_img="frooodle/s-pdf:latest" + local docker_port=8031 - docker run -d \ - --name searxng \ - --restart unless-stopped \ - -p ${docker_port}:8080 \ - -v "/home/docker/searxng:/etc/searxng" \ - searxng/searxng + 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="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + ;; - 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) + 32|drawio) + local docker_name="drawio" + local docker_img="jgraph/drawio" + local docker_port=8032 - docker_rum() { + 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 + docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio - } + } - 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 - ;; + local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" + local docker_url="官网介绍: https://www.drawio.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 33|sun-panel) + local docker_name="sun-panel" + local docker_img="hslr/sun-panel" + local docker_port=8033 - 31) - local docker_name="s-pdf" - local docker_img="frooodle/s-pdf:latest" - local docker_port=8020 + docker_rum() { - 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 - 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 + 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 + ;; - docker_rum() { + 34|pingvin-share) + local docker_name="pingvin-share" + local docker_img="stonith404/pingvin-share" + local docker_port=8034 - docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio + 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 + ;; - 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 + 35|moments) + local docker_name="moments" + local docker_img="kingwrcy/moments:latest" + local docker_port=8035 - docker_rum() { + 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 + 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="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 - ;; + 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 + ;; - 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 - } + 36|lobe-chat) + local docker_name="lobe-chat" + local docker_img="lobehub/lobe-chat:latest" + local docker_port=8036 - 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 - ;; + docker_rum() { + docker run -d -p ${docker_port}:3210 \ + --name lobe-chat \ + --restart=always \ + lobehub/lobe-chat + } - 35) - local docker_name="moments" - local docker_img="kingwrcy/moments:latest" - local docker_port=8035 + 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 + ;; - docker_rum() { + 37|myip) + local docker_name="myip" + local docker_img="jason5ng32/myip:latest" + local docker_port=8037 - 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 - } + docker_rum() { + docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip: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 - ;; + } + 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 + ;; - 36) - local docker_name="lobe-chat" - local docker_img="lobehub/lobe-chat:latest" - local docker_port=8036 + 38|xiaoya) + send_stats "小雅全家桶" + clear + install_docker + check_disk_space 1 + bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" + ;; - docker_rum() { + 39|bililive) - docker run -d -p ${docker_port}:3210 \ - --name lobe-chat \ - --restart=always \ - lobehub/lobe-chat - } + 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_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 - ;; + local docker_name="bililive-go" + local docker_img="chigusa/bililive-go" + local docker_port=8039 - 37) - local docker_name="myip" - local docker_img="jason5ng32/myip:latest" - local docker_port=8037 + docker_rum() { - 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 - docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest + } - } + 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|webssh) + 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="是一个多功能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 - ;; + 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 + ;; - 38) - send_stats "小雅全家桶" - clear - install_docker - check_disk_space 1 - bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" - ;; + 41|haozi) - 39) + local lujing="[ -d "/www/server/panel" ]" + local panelname="耗子面板" + local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" - 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 + 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 ~ + } - local docker_name="bililive-go" - local docker_img="chigusa/bililive-go" - local docker_port=8039 + panel_app_manage() { + panel-cli + } - docker_rum() { + 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 ~ + } - 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 + install_panel - } + ;; - 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 - } + 42|nexterm) + local docker_name="nexterm" + local docker_img="germannewsmaker/nexterm:latest" + local docker_port=8042 - 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 - ;; + docker_rum() { - 41) + docker run -d \ + --name nexterm \ + -p ${docker_port}:6989 \ + -v /home/docker/nexterm:/app/data \ + --restart unless-stopped \ + germannewsmaker/nexterm:latest - 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 ~ - } + 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 + ;; - panel_app_manage() { - panel-cli - } + 43|hbbs) + local docker_name="hbbs" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - 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 ~ - } + docker_rum() { - install_panel + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs - ;; + } - 42) - local docker_name="nexterm" - local docker_img="germannewsmaker/nexterm:latest" - local docker_port=8042 + 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 + ;; - docker_rum() { + 44|hbbr) + local docker_name="hbbr" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - docker run -d \ - --name nexterm \ - -p ${docker_port}:6989 \ - -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ - germannewsmaker/nexterm:latest + 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="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 + 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 + ;; - docker_rum() { + 45|registry) + local docker_name="registry" + local docker_img="registry:2" + local docker_port=8045 - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + 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="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 - ;; + 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 + ;; - 44) - local docker_name="hbbr" - local docker_img="rustdesk/rustdesk-server" - local docker_port=0000 + 46|ghproxy) + local docker_name="ghproxy" + local docker_img="wjqserver/ghproxy:latest" + local docker_port=8046 - docker_rum() { + docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest - } + } - 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 - ;; + 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 + ;; - 45) - local docker_name="registry" - local docker_img="registry:2" - local docker_port=8045 + 47|prometheus|grafana) - docker_rum() { + 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 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 + docker_app_install() { + prometheus_install + clear + ip_address + echo "已经安装完成" + check_docker_app_ip + echo "初始用户名密码均为: admin" + } - } + 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 + } - 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 - ;; + 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 - 46) - local docker_name="ghproxy" - local docker_img="wjqserver/ghproxy:latest" - local docker_port=8046 + rm -rf /home/docker/monitoring + echo "应用已卸载" + } - docker_rum() { + docker_app_plus + ;; - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + 48|node-exporter) + local docker_name="node-exporter" + local docker_img="prom/node-exporter" + local docker_port=8048 - } + docker_rum() { - 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 - ;; + docker run -d \ + --name=node-exporter \ + -p ${docker_port}:9100 \ + --restart unless-stopped \ + prom/node-exporter - 47) + } + local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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" + 49|cadvisor) + 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 - docker_app_install() { - prometheus_install - clear - ip_address - echo "已经安装完成" - check_docker_app_ip - echo "初始用户名密码均为: admin" - } - - 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 + local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - rm -rf /home/docker/monitoring - echo "应用已卸载" - } - docker_app_plus - ;; + 50|changedetection) + local docker_name="changedetection" + local docker_img="dgtlmoon/changedetection.io:latest" + local docker_port=8050 - 48) - local docker_name="node-exporter" - local docker_img="prom/node-exporter" - local docker_port=8048 + docker_rum() { - docker_rum() { + docker run -d --restart always -p ${docker_port}:5000 \ + -v /home/docker/datastore:/datastore \ + --name changedetection dgtlmoon/changedetection.io:latest - 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/dgtlmoon/changedetection.io" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 51|pve) + clear + send_stats "PVE开小鸡" + 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 + ;; - 49) - local docker_name="cadvisor" - local docker_img="gcr.io/cadvisor/cadvisor:latest" - local docker_port=8049 - docker_rum() { + 52|dpanel) + local docker_name="dpanel" + local docker_img="dpanel/dpanel:lite" + local docker_port=8052 - 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 + 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="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + } + 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 + ;; - 50) - local docker_name="changedetection" - local docker_img="dgtlmoon/changedetection.io:latest" - local docker_port=8050 + 53|llama3) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - docker_rum() { + docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ - -v /home/docker/datastore:/datastore \ - --name changedetection dgtlmoon/changedetection.io:latest + 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="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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|amh) - 51) - clear - send_stats "PVE开小鸡" - 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 - ;; + 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 + } - 52) - local docker_name="dpanel" - local docker_img="dpanel/dpanel:lite" - local docker_port=8052 + panel_app_manage() { + panel_app_install + } - docker_rum() { + panel_app_uninstall() { + panel_app_install + } - 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 + install_panel + ;; - } - 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 - ;; + 55|frps) + frps_panel + ;; - 53) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 56|frpc) + frpc_panel + ;; - docker_rum() { + 57|deepseek) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - 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 + 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 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 + ;; - 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 - } + 58|dify) + 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" - panel_app_manage() { - panel_app_install - } + 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 - panel_app_uninstall() { - panel_app_install - } + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } - install_panel - ;; + 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 "应用已卸载" + } - 55) - frps_panel - ;; + docker_app_plus - 56) - frpc_panel - ;; + ;; - 57) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 59|new-api) + 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_rum() { + 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 - 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 + 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 - } - 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 - ;; + 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 - 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 compose up -d + clear + echo "已经安装完成" + check_docker_app_ip - 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_uninstall() { + cd /home/docker/new-api/ && docker compose down --rmi all + rm -rf /home/docker/new-api + echo "应用已卸载" + } - docker_app_plus + 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 + 60|jms) - 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 + 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 "初始用户名: admin" + echo "初始密码: ChangeMe" + } - 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_update() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh upgrade + echo "应用已更新" + } - docker_app_uninstall() { - cd /home/docker/new-api/ && docker compose down --rmi all - rm -rf /home/docker/new-api - echo "应用已卸载" - } - docker_app_plus + docker_app_uninstall() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh uninstall + cd /opt + rm -rf jumpserver-installer*/ + rm -rf jumpserver + echo "应用已卸载" + } - ;; + docker_app_plus + ;; + 61|libretranslate) + local docker_name="libretranslate" + local docker_img="libretranslate/libretranslate:latest" + local docker_port=8061 - 60) + docker_rum() { - 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 run -d \ + -p ${docker_port}:5000 \ + --name libretranslate \ + libretranslate/libretranslate \ + --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru - 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 "初始用户名: admin" - echo "初始密码: ChangeMe" - } + } + 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 + ;; - 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 "应用已卸载" - } + 62|ragflow) + 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_plus - ;; + 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 + } - 61) - local docker_name="libretranslate" - local docker_img="libretranslate/libretranslate:latest" - local docker_port=8061 + 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_rum() { + docker_app_uninstall() { + cd /home/docker/ragflow/docker/ && docker compose down --rmi all + rm -rf /home/docker/ragflow + echo "应用已卸载" + } - docker run -d \ - -p ${docker_port}:5000 \ - --name libretranslate \ - libretranslate/libretranslate \ - --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru + docker_app_plus - } + ;; - 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 - ;; + 63|open-webui) + local docker_name="open-webui" + local docker_img="ghcr.io/open-webui/open-webui:main" + local docker_port=8063 + docker_rum() { - 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 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 - 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 "应用已卸载" - } + } + + 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 + ;; - docker_app_plus + 64|it-tools) + 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 + ;; - 63) - local docker_name="open-webui" - local docker_img="ghcr.io/open-webui/open-webui:main" - local docker_port=8063 - docker_rum() { + 65|n8n) + local docker_name="n8n" + local docker_img="docker.n8n.io/n8nio/n8n" + local docker_port=8065 - 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 + 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 - 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 - ;; + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - 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="是一款功能强大的自动化工作流平台" + local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 - ;; + 66|yt) + yt_menu_pro + ;; - 65) - local docker_name="n8n" - local docker_img="docker.n8n.io/n8nio/n8n" - local docker_port=8065 + 67|ddns) + local docker_name="ddns-go" + local docker_img="jeessy/ddns-go" + local docker_port=8067 - docker_rum() { + docker_rum() { + docker run -d \ + --name ddns-go \ + --restart=always \ + -p ${docker_port}:9876 \ + -v /home/docker/ddns-go:/root \ + jeessy/ddns-go - 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} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" + local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } + 68|allinssl) + local docker_name="allinssl" + local docker_img="allinssl/allinssl:latest" + local docker_port=8068 - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + } - 66) - yt_menu_pro - ;; + local docker_describe="开源免费的 SSL 证书自动化管理平台" + local docker_url="官网介绍: https://allinssl.com" + local docker_use="echo \"安全入口: /allinssl\"" + local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" + local app_size="1" + docker_app + ;; - 67) - local docker_name="ddns-go" - local docker_img="jeessy/ddns-go" - local docker_port=8067 + 69|sftpgo) + local docker_name="sftpgo" + local docker_img="drakkan/sftpgo:latest" + local docker_port=8069 - docker_rum() { - docker run -d \ - --name ddns-go \ - --restart=always \ - -p ${docker_port}:9876 \ - -v /home/docker/ddns-go:/root \ - jeessy/ddns-go + docker_rum() { - } + mkdir -p /home/docker/sftpgo/data + mkdir -p /home/docker/sftpgo/config + chown -R 1000:1000 /home/docker/sftpgo - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker run -d \ + --name sftpgo \ + --restart=always \ + -p ${docker_port}:8080 \ + -p 22022:2022 \ + --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ + --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ + drakkan/sftpgo:latest - 68) - local docker_name="allinssl" - local docker_img="allinssl/allinssl:latest" - local docker_port=8068 + } - 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="开源免费随时随地SFTP FTP WebDAV 文件传输工具" + local docker_url="官网介绍: https://sftpgo.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - local docker_describe="开源免费的 SSL 证书自动化管理平台" - local docker_url="官网介绍: https://allinssl.com" - local docker_use="echo \"安全入口: /allinssl\"" - local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" - local app_size="1" - docker_app - ;; + 70|astrbot) + local docker_name="astrbot" + local docker_img="soulter/astrbot:latest" + local docker_port=8070 - 69) - local docker_name="sftpgo" - local docker_img="drakkan/sftpgo:latest" - local docker_port=8069 + docker_rum() { - docker_rum() { + mkdir -p /home/docker/astrbot/data - mkdir -p /home/docker/sftpgo/data - mkdir -p /home/docker/sftpgo/config - chown -R 1000:1000 /home/docker/sftpgo + docker run -d \ + -p ${docker_port}:6185 \ + -p 6195:6195 \ + -p 6196:6196 \ + -p 6199:6199 \ + -p 11451:11451 \ + -v /home/docker/astrbot/data:/AstrBot/data \ + --restart unless-stopped \ + --name astrbot \ + soulter/astrbot:latest - docker run -d \ - --name sftpgo \ - --restart=always \ - -p ${docker_port}:8080 \ - -p 22022:2022 \ - --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ - --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ - drakkan/sftpgo:latest + } - } + local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官网介绍: https://astrbot.app/" + local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_passwd="" + local app_size="1" + docker_app + ;; - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 71|navidrome) + local docker_name="navidrome" + local docker_img="deluan/navidrome:latest" + local docker_port=8071 - 70) - local docker_name="astrbot" - local docker_img="soulter/astrbot:latest" - local docker_port=8070 + docker_rum() { - docker_rum() { + docker run -d \ + --name navidrome \ + --restart=unless-stopped \ + --user $(id -u):$(id -g) \ + -v /home/docker/navidrome/music:/music \ + -v /home/docker/navidrome/data:/data \ + -p ${docker_port}:4533 \ + -e ND_LOGLEVEL=info \ + deluan/navidrome:latest - mkdir -p /home/docker/astrbot/data + } - docker run -d \ - -p ${docker_port}:6185 \ - -p 6195:6195 \ - -p 6196:6196 \ - -p 6199:6199 \ - -p 11451:11451 \ - -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ - --name astrbot \ - soulter/astrbot:latest + local docker_describe="是一个轻量、高性能的音乐流媒体服务器" + local docker_url="官网介绍: https://www.navidrome.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 72|bitwarden) + local docker_name="bitwarden" + local docker_img="vaultwarden/server" + local docker_port=8072 - 71) - local docker_name="navidrome" - local docker_img="deluan/navidrome:latest" - local docker_port=8071 + docker_rum() { - docker_rum() { + docker run -d \ + --name bitwarden \ + --restart always \ + -p ${docker_port}:80 \ + -v /home/docker/bitwarden/data:/data \ + vaultwarden/server - docker run -d \ - --name navidrome \ - --restart=unless-stopped \ - --user $(id -u):$(id -g) \ - -v /home/docker/navidrome/music:/music \ - -v /home/docker/navidrome/data:/data \ - -p ${docker_port}:4533 \ - -e ND_LOGLEVEL=info \ - deluan/navidrome:latest + } - } + local docker_describe="一个你可以控制数据的密码管理器" + local docker_url="官网介绍: https://bitwarden.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + ;; - 72) - local docker_name="bitwarden" - local docker_img="vaultwarden/server" - local docker_port=8072 - docker_rum() { + 73|libretv) - docker run -d \ - --name bitwarden \ - --restart always \ - -p ${docker_port}:80 \ - -v /home/docker/bitwarden/data:/data \ - vaultwarden/server + local docker_name="libretv" + local docker_img="bestzwei/libretv:latest" + local docker_port=8073 - } + docker_rum() { - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + read -e -p "设置LibreTV的登录密码: " app_passwd + docker run -d \ + --name libretv \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -e PASSWORD=${app_passwd} \ + bestzwei/libretv:latest - ;; + } + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 73) - local docker_name="libretv" - local docker_img="bestzwei/libretv:latest" - local docker_port=8073 + 74|moontv) - docker_rum() { + local docker_name="moontv" + local docker_img="ghcr.io/senshinya/moontv:latest" + local docker_port=8074 - read -e -p "设置LibreTV的登录密码: " app_passwd + docker_rum() { + + read -e -p "设置MoonTV的登录密码: " app_passwd docker run -d \ - --name libretv \ + --name moontv \ --restart unless-stopped \ - -p ${docker_port}:8080 \ + -p ${docker_port}:3000 \ -e PASSWORD=${app_passwd} \ - bestzwei/libretv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; - - - 74) - - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - - docker_rum() { - - read -e -p "设置MoonTV的登录密码: " app_passwd - - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + ghcr.io/senshinya/moontv:latest - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; + } + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/senshinya/MoonTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 75) + ;; - local docker_name="melody" - local docker_img="foamzou/melody:latest" - local docker_port=8075 - docker_rum() { + 75|melody) - docker run -d \ - --name melody \ - --restart unless-stopped \ - -p ${docker_port}:5566 \ - -v /home/docker/melody/.profile:/app/backend/.profile \ - foamzou/melody:latest + local docker_name="melody" + local docker_img="foamzou/melody:latest" + local docker_port=8075 + docker_rum() { - } + docker run -d \ + --name melody \ + --restart unless-stopped \ + -p ${docker_port}:5566 \ + -v /home/docker/melody/.profile:/app/backend/.profile \ + foamzou/melody:latest - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + } - ;; - + local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" + local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 76) - local docker_name="dosgame" - local docker_img="oldiy/dosgame-web-docker:latest" - local docker_port=8076 + ;; - docker_rum() { - docker run -d \ - --name dosgame \ - --restart unless-stopped \ - -p ${docker_port}:262 \ - oldiy/dosgame-web-docker:latest - } + 76|dosgame) - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + local docker_name="dosgame" + local docker_img="oldiy/dosgame-web-docker:latest" + local docker_port=8076 + docker_rum() { + docker run -d \ + --name dosgame \ + --restart unless-stopped \ + -p ${docker_port}:262 \ + oldiy/dosgame-web-docker:latest - ;; - - 77) + } - local docker_name="xunlei" - local docker_img="cnk3x/xunlei" - local docker_port=8077 + local docker_describe="是一个中文DOS游戏合集网站" + local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app - docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + ;; - docker run -d \ - --name xunlei \ - --restart unless-stopped \ - --privileged \ - -e XL_DASHBOARD_USERNAME=${app_use} \ - -e XL_DASHBOARD_PASSWORD=${app_passwd} \ - -v /home/docker/xunlei/data:/xunlei/data \ - -v /home/docker/xunlei/downloads:/xunlei/downloads \ - -p ${docker_port}:2345 \ - cnk3x/xunlei + 77|xunlei) - } + local docker_name="xunlei" + local docker_img="cnk3x/xunlei" + local docker_port=8077 - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { - ;; + read -e -p "设置${docker_name}的登录用户名: " app_use + read -e -p "设置${docker_name}的登录密码: " app_passwd + docker run -d \ + --name xunlei \ + --restart unless-stopped \ + --privileged \ + -e XL_DASHBOARD_USERNAME=${app_use} \ + -e XL_DASHBOARD_PASSWORD=${app_passwd} \ + -v /home/docker/xunlei/data:/xunlei/data \ + -v /home/docker/xunlei/downloads:/xunlei/downloads \ + -p ${docker_port}:2345 \ + cnk3x/xunlei + } - 78) + local docker_describe="迅雷你的离线高速BT磁力下载工具" + local docker_url="官网介绍: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_passwd="" + local app_size="1" + docker_app - local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" - local docker_name="panda-wiki-nginx" - local docker_port="2443" - local app_size="2" + ;; - docker_app_install() { - bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" - } - docker_app_update() { - docker_app_install - } + 78|PandaWiki) - docker_app_uninstall() { - docker_app_install - } + local app_name="PandaWiki" + local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" + local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local docker_name="panda-wiki-nginx" + local docker_port="2443" + local app_size="2" - docker_app_plus - ;; + docker_app_install() { + bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" + } + docker_app_update() { + docker_app_install + } - 79) + docker_app_uninstall() { + docker_app_install + } - local docker_name="beszel" - local docker_img="henrygd/beszel" - local docker_port=8079 + docker_app_plus + ;; - docker_rum() { - mkdir -p /home/docker/beszel && \ - docker run -d \ - --name beszel \ - --restart=unless-stopped \ - -v /home/docker/beszel:/beszel_data \ - -p ${docker_port}:8090 \ - henrygd/beszel - } + 79|beszel) - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_name="beszel" + local docker_img="henrygd/beszel" + local docker_port=8079 - ;; + docker_rum() { + mkdir -p /home/docker/beszel && \ + docker run -d \ + --name beszel \ + --restart=unless-stopped \ + -v /home/docker/beszel:/beszel_data \ + -p ${docker_port}:8090 \ + henrygd/beszel - 80) - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden-linkwarden-1" - local docker_port="8080" - local app_size="3" + } - docker_app_install() { - install git openssl - mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + local docker_describe="Beszel轻量易用的服务器监控" + local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - # 下载官方 docker-compose 和 env 文件 - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + ;; - # 生成随机密钥与密码 - local ADMIN_EMAIL="admin@example.com" - local ADMIN_PASSWORD=$(openssl rand -hex 8) - sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env - sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env - sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env - sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + 80|linkwarden) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden" + local docker_port="8080" + local app_size="3" - # 追加管理员账号信息 - echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env - echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + # 下载官方 docker-compose 和 env 文件 + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 启动容器 - docker compose up -d + # 生成随机密钥与密码 + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) - clear - echo "已经安装完成" - check_docker_app_ip + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - } + # 追加管理员账号信息 + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env - docker_app_update() { - cd /home/docker/linkwarden && docker compose down --rmi all - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - - # 保留原本的变量 - source .env - mv .env.new .env - echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env - echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env - echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env - echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env - echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env - echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - - docker compose up -d - } + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - docker_app_uninstall() { - cd /home/docker/linkwarden && docker compose down --rmi all - rm -rf /home/docker/linkwarden - echo "应用已卸载" - } + # 启动容器 + docker compose up -d - docker_app_plus + clear + echo "已经安装完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 保留原本的变量 + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "应用已卸载" + } + + docker_app_plus - ;; + ;; - 81) - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" - local docker_name="jitsi" - local docker_port="8081" - local app_size="3" + 81|jitsi) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" - docker_app_install() { + docker_app_install() { - add_yuming - mkdir -p /home/docker/jitsi && cd /home/docker/jitsi - wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) - unzip "$(ls -t | head -n 1)" - cd "$(ls -dt */ | head -n 1)" - cp env.example .env - ./gen-passwords.sh - mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} - sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env - sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env - docker compose up -d + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - } + } - docker_app_update() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - docker compose up -d + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d - } + } - docker_app_uninstall() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - rm -rf /home/docker/jitsi - echo "应用已卸载" - } + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "应用已卸载" + } - docker_app_plus + docker_app_plus - ;; + ;; - 82) + 82|gpt-load) - local docker_name="gpt-load" - local docker_img="tbphp/gpt-load:latest" - local docker_port=8082 + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/gpt-load && \ - docker run -d --name gpt-load \ - -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ - -v "/home/docker/gpt-load/data":/app/data \ - tbphp/gpt-load:latest + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest - } + } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 83) + 83|komari) - local docker_name="komari" - local docker_img="ghcr.io/komari-monitor/komari:latest" - local docker_port=8083 + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/komari && \ - docker run -d \ - --name komari \ - -p ${docker_port}:25774 \ - -v /home/docker/komari:/app/data \ - -e ADMIN_USERNAME=admin \ - -e ADMIN_PASSWORD=1212156 \ - --restart=always \ - ghcr.io/komari-monitor/komari:latest + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest - } + } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 84) + 84|wallos) - local docker_name="wallos" - local docker_img="bellamy/wallos:latest" - local docker_port=8084 + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/wallos && \ - docker run -d --name wallos \ - -v /home/docker/wallos/db:/var/www/html/db \ - -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ - -e TZ=UTC \ - -p ${docker_port}:80 \ - --restart unless-stopped \ - bellamy/wallos:latest + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest - } + } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 85) + 85|immich) - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" - local docker_port="8085" - local app_size="3" + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" - docker_app_install() { - install git openssl - mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} - wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml - docker compose up -d + docker compose up -d - clear - echo "已经安装完成" - check_docker_app_ip + clear + echo "已经安装完成" + check_docker_app_ip - } + } - docker_app_update() { - cd /home/docker/${docker_name} && docker compose down --rmi all - docker_app_install - } + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } - docker_app_uninstall() { - cd /home/docker/${docker_name} && docker compose down --rmi all - rm -rf /home/docker/${docker_name} - echo "应用已卸载" - } + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "应用已卸载" + } - docker_app_plus + docker_app_plus - ;; + ;; - 86) + 86|jellyfin) - local docker_name="jellyfin" - local docker_img="jellyfin/jellyfin" - local docker_port=8086 + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/jellyfin/media - chmod -R 777 /home/docker/jellyfin + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin - docker run -d \ - --name jellyfin \ - --user root \ - --volume /home/docker/jellyfin/config:/config \ - --volume /home/docker/jellyfin/cache:/cache \ - --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ - -p ${docker_port}:8096 \ - -p 7359:7359/udp \ - --restart=unless-stopped \ - jellyfin/jellyfin + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin - } + } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 87) + 87|synctv) - local docker_name="synctv" - local docker_img="synctvorg/synctv" - local docker_port=8087 + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 - docker_rum() { + docker_rum() { - docker run -d \ - --name synctv \ - -v /home/docker/synctv:/root/.synctv \ - -p ${docker_port}:8080 \ - --restart=always \ - synctvorg/synctv + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv - } + } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 88) + 88|owncast) - local docker_name="owncast" - local docker_img="owncast/owncast:latest" - local docker_port=8088 + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 - docker_rum() { + docker_rum() { - docker run -d \ - --name owncast \ - -p ${docker_port}:8080 \ - -p 1935:1935 \ - -v /home/docker/owncast/data:/app/data \ - --restart=always \ - owncast/owncast:latest + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest - } + } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" - local app_size="1" - docker_app + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app - ;; + ;; - 0) - kejilion - ;; - *) - echo "无效的输入!" - ;; - esac - break_end + 0) + kejilion + ;; + *) + ;; + esac + break_end + sub_choice="" - done +done } @@ -12274,8 +12281,7 @@ EOF 39) clear - send_stats "命令行历史记录" - bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + linux_fav ;; 41) @@ -13091,6 +13097,7 @@ echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "命令收藏夹 k fav |k 命令收藏夹" } @@ -13224,6 +13231,10 @@ else iptables_panel ;; + 命令收藏夹|fav) + linux_fav + ;; + status|状态) shift send_stats "软件状态查看" @@ -13303,8 +13314,17 @@ else fi ;; + + app) + shift + send_stats "应用$@" + linux_panel "$@" + ;; + + *) k_info ;; esac fi + From 1ce96d4d73f6c265ea8ca6ea889c146c9f470938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:05:11 +0800 Subject: [PATCH 046/553] Update kejilion.sh --- cn/kejilion.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index a052b0438..60ca8499d 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13097,9 +13097,9 @@ echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav |k 命令收藏夹" - - +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } From bfaab5e1290c7ba7d170b7b36191c3ad92e03c4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:05:56 +0800 Subject: [PATCH 047/553] Update kejilion.sh --- kejilion.sh | 3906 ++++++++++++++++++++++++++------------------------- 1 file changed, 1963 insertions(+), 1943 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 5f6a95541..2d4e3de54 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.7" +sh_v="4.0.8" gl_hui='\e[37m' @@ -5648,7 +5648,10 @@ linux_trash() { done } - +linux_fav() { +send_stats "命令收藏夹" +bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) +} # 创建备份 create_backup() { @@ -8449,10 +8452,12 @@ linux_ldnmp() { linux_panel() { +local sub_choice="$1" +while true; do - while true; do + if [ -z "$sub_choice" ]; then clear echo -e "应用市场" echo -e "${gl_kjlan}------------------------" @@ -8524,2527 +8529,2529 @@ linux_panel() { echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice + fi - case $sub_choice in - 1) + case $sub_choice in + 1|bt) - local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" - local panelurl="https://www.bt.cn/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 2) + ;; + 2|aapanel) - local lujing="[ -d "/www/server/panel" ]" - local panelname="aapanel" - local panelurl="https://www.aapanel.com/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 3) + ;; + 3|1panel) - local lujing="command -v 1pctl" - local panelname="1Panel" - local panelurl="https://1panel.cn/" + local lujing="command -v 1pctl" + local panelname="1Panel" + local panelurl="https://1panel.cn/" - panel_app_install() { - install bash - bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" - } + panel_app_install() { + install bash + bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" + } - panel_app_manage() { - 1pctl user-info - 1pctl update password - } + panel_app_manage() { + 1pctl user-info + 1pctl update password + } - panel_app_uninstall() { - 1pctl uninstall - } + panel_app_uninstall() { + 1pctl uninstall + } - install_panel + install_panel - ;; - 4) + ;; + 4|npm) - local docker_name="npm" - local docker_img="jc21/nginx-proxy-manager:latest" - local docker_port=81 + local docker_name="npm" + local docker_img="jc21/nginx-proxy-manager:latest" + local docker_port=81 - docker_rum() { + 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 + 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="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" - local app_size="1" + local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" + local docker_url="官网介绍: https://nginxproxymanager.com/" + local docker_use="echo \"初始用户名: admin@example.com\"" + local docker_passwd="echo \"初始密码: changeme\"" + local app_size="1" - docker_app + docker_app - ;; + ;; - 5) + 5|openlist) - local docker_name="openlist" - local docker_img="openlistteam/openlist:latest-aria2" - local docker_port=5244 + local docker_name="openlist" + local docker_img="openlistteam/openlist:latest-aria2" + local docker_port=5244 - docker_rum() { + docker_rum() { - docker run -d \ - --restart=always \ - -v /home/docker/openlist:/opt/openlist/data \ - -p ${docker_port}:5244 \ - -e PUID=0 \ - -e PGID=0 \ - -e UMASK=022 \ - --name="openlist" \ - openlistteam/openlist:latest-aria2 + docker run -d \ + --restart=always \ + -v /home/docker/openlist:/opt/openlist/data \ + -p ${docker_port}:5244 \ + -e PUID=0 \ + -e PGID=0 \ + -e UMASK=022 \ + --name="openlist" \ + openlistteam/openlist:latest-aria2 - } + } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" + local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_use="docker exec -it openlist ./openlist admin random" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 6) + 6|webtop-ubuntu) - local docker_name="webtop-ubuntu" - local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" - local docker_port=3006 + local docker_name="webtop-ubuntu" + local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" + local docker_port=3006 - docker_rum() { + 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 \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ - -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 + 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 \ + -e CUSTOM_USER=ubuntu-abc \ + -e PASSWORD=ubuntuABC123 \ + -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的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" - local app_size="2" - docker_app + local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: ubuntu-abc\"" + local docker_passwd="echo \"密码: ubuntuABC123\"" + local app_size="2" + docker_app - ;; - 7) + ;; + 7|nezha) + clear + send_stats "搭建哪吒" + local docker_name="nezha-dashboard" + local docker_port=8008 + while true; do + check_docker_app + check_docker_image_update $docker_name clear - send_stats "搭建哪吒" - 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://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) + check_docker_app_ip + fi + echo "" + echo "------------------------" + echo "1. 使用" + 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 - fi - echo "" - echo "------------------------" - echo "1. 使用" - 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 - ;; + *) + break + ;; - *) - break - ;; + esac + break_end + done + ;; - esac - break_end - done - ;; + 8|qb) + + 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 - 8) + } - local docker_name="qbittorrent" - local docker_img="lscr.io/linuxserver/qbittorrent:latest" - local docker_port=8081 + 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 - 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 + 9|mail) + 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 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" - 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 + 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 ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + yuming=$(cat /home/docker/mail.txt) + echo "访问地址: " + echo "https://$yuming" + fi - 9) - send_stats "搭建邮局" - clear - install telnet - local docker_name=“mailserver” - while true; do - check_docker_app - check_docker_image_update $docker_name + echo "------------------------" + echo "1. 安装 2. 更新 3. 卸载" + echo "------------------------" + echo "0. 返回上一级选单" + echo "------------------------" + read -e -p "输入你的选择: " choice - clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + 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 - 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 "" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.io + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io已经安装完成" + echo "------------------------" + echo "您可以使用以下地址访问poste.io:" + echo "https://$yuming" + echo "" + + ;; - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + 2) + docker rm -f mailserver + docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io已经安装完成" + echo "------------------------" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" - fi + echo "" + ;; + 3) + docker rm -f mailserver + docker rmi -f analogic/poste.io + rm /home/docker/mail.txt + rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "应用已卸载" + ;; - echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" - echo "------------------------" - echo "0. 返回上一级选单" - echo "------------------------" - read -e -p "输入你的选择: " choice + *) + break + ;; - 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 "" + esac + break_end + done - 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 + 10|rocketchat) - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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" - clear - echo "poste.io已经安装完成" - echo "------------------------" - echo "您可以使用以下地址访问poste.io:" - echo "https://$yuming" - echo "" + 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 + } - 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 - - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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 + } - 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 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "应用已卸载" - ;; + 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 "应用已卸载" + } - *) - break - ;; + docker_app_plus + ;; - esac - break_end - done - ;; - 10) + 11|zentao) + local docker_name="zentao-server" + local docker_img="idoop/zentao:latest" + local docker_port=82 - 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_rum() { - 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 - ;; + 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 + } - 11) - local docker_name="zentao-server" - local docker_img="idoop/zentao:latest" - local docker_port=82 + 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 + ;; - docker_rum() { + 12|qinglong) + local docker_name="qinglong" + local docker_img="whyour/qinglong:latest" + local docker_port=5700 + 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 + 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="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" - local app_size="2" - docker_app + } - ;; + local docker_describe="青龙面板是一个定时任务管理平台" + local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 12) - local docker_name="qinglong" - local docker_img="whyour/qinglong:latest" - local docker_port=5700 + ;; + 13|cloudreve) + + 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_rum() { + docker_app_update() { + cd /home/docker/cloud/ && docker compose down --rmi all + cd /home/docker/cloud/ && docker compose up -d + } - docker run -d \ - -v /home/docker/qinglong/data:/ql/data \ - -p ${docker_port}:5700 \ - --name qinglong \ - --hostname qinglong \ - --restart unless-stopped \ - whyour/qinglong:latest + docker_app_uninstall() { + cd /home/docker/cloud/ && docker compose down --rmi all + rm -rf /home/docker/cloud + echo "应用已卸载" + } - } + docker_app_plus + ;; - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 14|easyimage) + local docker_name="easyimage" + local docker_img="ddsderek/easyimage:latest" + local docker_port=8014 + 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 - ;; - 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 - } + 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|emby) + local docker_name="emby" + local docker_img="linuxserver/emby:latest" + local docker_port=8015 - docker_app_update() { - cd /home/docker/cloud/ && docker compose down --rmi all - cd /home/docker/cloud/ && docker compose up -d - } + 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 - 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() { + local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" + local docker_url="官网介绍: https://emby.media/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 16|looking) + local docker_name="looking-glass" + local docker_img="wikihostinc/looking-glass-server" + local docker_port=8016 - } - 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 - ;; + docker_rum() { - 15) - local docker_name="emby" - local docker_img="linuxserver/emby:latest" - local docker_port=8096 + docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - 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="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|adguardhome) + local docker_name="adguardhome" + local docker_img="adguard/adguardhome" + local docker_port=8017 - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker_rum() { - 16) - local docker_name="looking-glass" - local docker_img="wikihostinc/looking-glass-server" - local docker_port=89 + 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 - docker_rum() { + } - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - } + 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 - 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 + 18|onlyoffice) - docker_rum() { + local docker_name="onlyoffice" + local docker_img="onlyoffice/documentserver" + local docker_port=8018 - 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 + 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="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 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|safeline) + send_stats "搭建雷池" - 18) + local docker_name=safeline-mgt + local docker_port=9443 + while true; do + check_docker_app + clear + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + check_docker_app_ip + fi + echo "" - local docker_name="onlyoffice" - local docker_img="onlyoffice/documentserver" - local docker_port=8082 + echo "------------------------" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "------------------------" + echo "0. 返回上一级选单" + echo "------------------------" + read -e -p "输入你的选择: " choice - docker_rum() { + case $choice in + 1) + install_docker + check_disk_space 5 + bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "雷池WAF面板已经安装完成" + check_docker_app_ip + docker exec safeline-mgt resetadmin - 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 + ;; + 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "雷池WAF面板已经更新完成" + check_docker_app_ip + ;; + 3) + docker exec safeline-mgt resetadmin + ;; + 4) + cd /data/safeline + docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "docker compose down && docker compose down --rmi all" + ;; + *) + break + ;; - } + esac + break_end + done - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + ;; - ;; + 20|portainer) + local docker_name="portainer" + local docker_img="portainer/portainer" + local docker_port=8020 - 19) - send_stats "搭建雷池" + docker_rum() { - local docker_name=safeline-mgt - local docker_port=9443 - while true; do - check_docker_app - clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then - check_docker_app_ip - fi - echo "" + 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 - 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)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "雷池WAF面板已经安装完成" - check_docker_app_ip - docker exec safeline-mgt resetadmin - ;; + local docker_describe="portainer是一个轻量级的docker容器管理面板" + local docker_url="官网介绍: https://www.portainer.io/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "雷池WAF面板已经更新完成" - check_docker_app_ip - ;; - 3) - docker exec safeline-mgt resetadmin - ;; - 4) - cd /data/safeline - docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" - echo "docker compose down && docker compose down --rmi all" - ;; - *) - break - ;; + ;; - esac - break_end - done + 21|vscode) + local docker_name="vscode-web" + local docker_img="codercom/code-server" + local docker_port=8021 - ;; - 20) - local docker_name="portainer" - local docker_img="portainer/portainer" - local docker_port=9050 + docker_rum() { - 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 - 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="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 + ;; - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 22|uptime-kuma) + local docker_name="uptime-kuma" + local docker_img="louislam/uptime-kuma:latest" + local docker_port=8022 - 21) - local docker_name="vscode-web" - local docker_img="codercom/code-server" - local docker_port=8180 + docker_rum() { - 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 - 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="Uptime Kuma 易于使用的自托管监控工具" + local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 23|memos) + local docker_name="memos" + local docker_img="ghcr.io/usememos/memos:latest" + local docker_port=8023 + docker_rum() { - 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 - 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="Memos是一款轻量级、自托管的备忘录中心" + local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 24|webtop) + local docker_name="webtop" + local docker_img="lscr.io/linuxserver/webtop:latest" + local docker_port=8024 + + 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 CUSTOM_USER=webtop-abc \ + -e PASSWORD=webtopABC123 \ + -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="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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: webtop-abc\"" + local docker_passwd="echo \"密码: webtopABC123\"" + local app_size="2" + docker_app + ;; - } + 25|nextcloud) + local docker_name="nextcloud" + local docker_img="nextcloud:latest" + local docker_port=8025 + local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - 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 - ;; + docker_rum() { - 24) - local docker_name="webtop" - local docker_img="lscr.io/linuxserver/webtop:latest" - local docker_port=3083 + 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 - docker_rum() { + } + 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 + ;; - 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 CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ - -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 + 26|qd) + local docker_name="qd" + local docker_img="qdtoday/qd:latest" + local docker_port=8026 + 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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" - local app_size="2" - docker_app - ;; + 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 + ;; - 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) + 27|dockge) + local docker_name="dockge" + local docker_img="louislam/dockge:latest" + local docker_port=8027 - docker_rum() { + 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 + 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="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" - local docker_passwd="" - local app_size="3" - docker_app - ;; + 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 + ;; - 26) - local docker_name="qd" - local docker_img="qdtoday/qd:latest" - local docker_port=8923 + 28|speedtest) + local docker_name="speedtest" + local docker_img="ghcr.io/librespeed/speedtest" + local docker_port=8028 - docker_rum() { + docker_rum() { - docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd + docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest - } + } - 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 + 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 + ;; - docker_rum() { + 29|searxng) + local docker_name="searxng" + local docker_img="searxng/searxng" + local docker_port=8029 - 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 + docker_rum() { - } + docker run -d \ + --name searxng \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v "/home/docker/searxng:/etc/searxng" \ + searxng/searxng - 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 + 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 + ;; - docker_rum() { + 30|photoprism) + local docker_name="photoprism" + local docker_img="photoprism/photoprism:latest" + local docker_port=8030 + 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 - 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 - ;; + 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 + ;; - 29) - local docker_name="searxng" - local docker_img="searxng/searxng" - local docker_port=8029 - docker_rum() { + 31|s-pdf) + local docker_name="s-pdf" + local docker_img="frooodle/s-pdf:latest" + local docker_port=8031 - docker run -d \ - --name searxng \ - --restart unless-stopped \ - -p ${docker_port}:8080 \ - -v "/home/docker/searxng:/etc/searxng" \ - searxng/searxng + 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="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + ;; - 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) + 32|drawio) + local docker_name="drawio" + local docker_img="jgraph/drawio" + local docker_port=8032 - docker_rum() { + 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 + docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio - } + } - 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 - ;; + local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" + local docker_url="官网介绍: https://www.drawio.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 33|sun-panel) + local docker_name="sun-panel" + local docker_img="hslr/sun-panel" + local docker_port=8033 - 31) - local docker_name="s-pdf" - local docker_img="frooodle/s-pdf:latest" - local docker_port=8020 + docker_rum() { - 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 - 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 + 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 + ;; - docker_rum() { + 34|pingvin-share) + local docker_name="pingvin-share" + local docker_img="stonith404/pingvin-share" + local docker_port=8034 - docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio + 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 + ;; - 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 + 35|moments) + local docker_name="moments" + local docker_img="kingwrcy/moments:latest" + local docker_port=8035 - docker_rum() { + 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 + 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="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 - ;; + 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 + ;; - 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 - } + 36|lobe-chat) + local docker_name="lobe-chat" + local docker_img="lobehub/lobe-chat:latest" + local docker_port=8036 - 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 - ;; + docker_rum() { + docker run -d -p ${docker_port}:3210 \ + --name lobe-chat \ + --restart=always \ + lobehub/lobe-chat + } - 35) - local docker_name="moments" - local docker_img="kingwrcy/moments:latest" - local docker_port=8035 + 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 + ;; - docker_rum() { + 37|myip) + local docker_name="myip" + local docker_img="jason5ng32/myip:latest" + local docker_port=8037 - 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 - } + docker_rum() { + docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip: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 - ;; + } + 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 + ;; - 36) - local docker_name="lobe-chat" - local docker_img="lobehub/lobe-chat:latest" - local docker_port=8036 + 38|xiaoya) + send_stats "小雅全家桶" + clear + install_docker + check_disk_space 1 + bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" + ;; - docker_rum() { + 39|bililive) - docker run -d -p ${docker_port}:3210 \ - --name lobe-chat \ - --restart=always \ - lobehub/lobe-chat - } + 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_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 - ;; + local docker_name="bililive-go" + local docker_img="chigusa/bililive-go" + local docker_port=8039 - 37) - local docker_name="myip" - local docker_img="jason5ng32/myip:latest" - local docker_port=8037 + docker_rum() { - 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 - docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest + } - } + 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|webssh) + 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="是一个多功能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 - ;; + 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 + ;; - 38) - send_stats "小雅全家桶" - clear - install_docker - check_disk_space 1 - bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" - ;; + 41|haozi) - 39) + local lujing="[ -d "/www/server/panel" ]" + local panelname="耗子面板" + local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" - 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 + 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 ~ + } - local docker_name="bililive-go" - local docker_img="chigusa/bililive-go" - local docker_port=8039 + panel_app_manage() { + panel-cli + } - docker_rum() { + 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 ~ + } - 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 + install_panel - } + ;; - 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 - } + 42|nexterm) + local docker_name="nexterm" + local docker_img="germannewsmaker/nexterm:latest" + local docker_port=8042 - 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 - ;; + docker_rum() { - 41) + docker run -d \ + --name nexterm \ + -p ${docker_port}:6989 \ + -v /home/docker/nexterm:/app/data \ + --restart unless-stopped \ + germannewsmaker/nexterm:latest - 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 ~ - } + 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 + ;; - panel_app_manage() { - panel-cli - } + 43|hbbs) + local docker_name="hbbs" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - 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 ~ - } + docker_rum() { - install_panel + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs - ;; + } - 42) - local docker_name="nexterm" - local docker_img="germannewsmaker/nexterm:latest" - local docker_port=8042 + 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 + ;; - docker_rum() { + 44|hbbr) + local docker_name="hbbr" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - docker run -d \ - --name nexterm \ - -p ${docker_port}:6989 \ - -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ - germannewsmaker/nexterm:latest + 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="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 + 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 + ;; - docker_rum() { + 45|registry) + local docker_name="registry" + local docker_img="registry:2" + local docker_port=8045 - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + 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="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 - ;; + 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 + ;; - 44) - local docker_name="hbbr" - local docker_img="rustdesk/rustdesk-server" - local docker_port=0000 + 46|ghproxy) + local docker_name="ghproxy" + local docker_img="wjqserver/ghproxy:latest" + local docker_port=8046 - docker_rum() { + docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest - } + } - 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 - ;; + 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 + ;; - 45) - local docker_name="registry" - local docker_img="registry:2" - local docker_port=8045 + 47|prometheus|grafana) - docker_rum() { + 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 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 + docker_app_install() { + prometheus_install + clear + ip_address + echo "已经安装完成" + check_docker_app_ip + echo "初始用户名密码均为: admin" + } - } + 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 + } - 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 - ;; + 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 - 46) - local docker_name="ghproxy" - local docker_img="wjqserver/ghproxy:latest" - local docker_port=8046 + rm -rf /home/docker/monitoring + echo "应用已卸载" + } - docker_rum() { + docker_app_plus + ;; - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + 48|node-exporter) + local docker_name="node-exporter" + local docker_img="prom/node-exporter" + local docker_port=8048 - } + docker_rum() { - 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 - ;; + docker run -d \ + --name=node-exporter \ + -p ${docker_port}:9100 \ + --restart unless-stopped \ + prom/node-exporter - 47) + } + local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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" + 49|cadvisor) + 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 - docker_app_install() { - prometheus_install - clear - ip_address - echo "已经安装完成" - check_docker_app_ip - echo "初始用户名密码均为: admin" - } - - 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 + local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - rm -rf /home/docker/monitoring - echo "应用已卸载" - } - docker_app_plus - ;; + 50|changedetection) + local docker_name="changedetection" + local docker_img="dgtlmoon/changedetection.io:latest" + local docker_port=8050 - 48) - local docker_name="node-exporter" - local docker_img="prom/node-exporter" - local docker_port=8048 + docker_rum() { - docker_rum() { + docker run -d --restart always -p ${docker_port}:5000 \ + -v /home/docker/datastore:/datastore \ + --name changedetection dgtlmoon/changedetection.io:latest - 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/dgtlmoon/changedetection.io" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 51|pve) + clear + send_stats "PVE开小鸡" + 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 + ;; - 49) - local docker_name="cadvisor" - local docker_img="gcr.io/cadvisor/cadvisor:latest" - local docker_port=8049 - docker_rum() { + 52|dpanel) + local docker_name="dpanel" + local docker_img="dpanel/dpanel:lite" + local docker_port=8052 - 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 + 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="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + } + 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 + ;; - 50) - local docker_name="changedetection" - local docker_img="dgtlmoon/changedetection.io:latest" - local docker_port=8050 + 53|llama3) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - docker_rum() { + docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ - -v /home/docker/datastore:/datastore \ - --name changedetection dgtlmoon/changedetection.io:latest + 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="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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|amh) - 51) - clear - send_stats "PVE开小鸡" - 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 - ;; + 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 + } - 52) - local docker_name="dpanel" - local docker_img="dpanel/dpanel:lite" - local docker_port=8052 + panel_app_manage() { + panel_app_install + } - docker_rum() { + panel_app_uninstall() { + panel_app_install + } - 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 + install_panel + ;; - } - 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 - ;; + 55|frps) + frps_panel + ;; - 53) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 56|frpc) + frpc_panel + ;; - docker_rum() { + 57|deepseek) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - 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 + 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 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 + ;; - 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 - } + 58|dify) + 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" - panel_app_manage() { - panel_app_install - } + 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 - panel_app_uninstall() { - panel_app_install - } + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } - install_panel - ;; + 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 "应用已卸载" + } - 55) - frps_panel - ;; + docker_app_plus - 56) - frpc_panel - ;; + ;; - 57) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 59|new-api) + 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_rum() { + 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 - 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 + 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 - } - 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 - ;; + 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 - 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 compose up -d + clear + echo "已经安装完成" + check_docker_app_ip - 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_uninstall() { + cd /home/docker/new-api/ && docker compose down --rmi all + rm -rf /home/docker/new-api + echo "应用已卸载" + } - docker_app_plus + 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 + 60|jms) - 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 + 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 "初始用户名: admin" + echo "初始密码: ChangeMe" + } - 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_update() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh upgrade + echo "应用已更新" + } - docker_app_uninstall() { - cd /home/docker/new-api/ && docker compose down --rmi all - rm -rf /home/docker/new-api - echo "应用已卸载" - } - docker_app_plus + docker_app_uninstall() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh uninstall + cd /opt + rm -rf jumpserver-installer*/ + rm -rf jumpserver + echo "应用已卸载" + } - ;; + docker_app_plus + ;; + 61|libretranslate) + local docker_name="libretranslate" + local docker_img="libretranslate/libretranslate:latest" + local docker_port=8061 - 60) + docker_rum() { - 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 run -d \ + -p ${docker_port}:5000 \ + --name libretranslate \ + libretranslate/libretranslate \ + --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru - 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 "初始用户名: admin" - echo "初始密码: ChangeMe" - } + } + 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 + ;; - 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 "应用已卸载" - } + 62|ragflow) + 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_plus - ;; + 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 + } - 61) - local docker_name="libretranslate" - local docker_img="libretranslate/libretranslate:latest" - local docker_port=8061 + 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_rum() { + docker_app_uninstall() { + cd /home/docker/ragflow/docker/ && docker compose down --rmi all + rm -rf /home/docker/ragflow + echo "应用已卸载" + } - docker run -d \ - -p ${docker_port}:5000 \ - --name libretranslate \ - libretranslate/libretranslate \ - --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru + docker_app_plus - } + ;; - 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 - ;; + 63|open-webui) + local docker_name="open-webui" + local docker_img="ghcr.io/open-webui/open-webui:main" + local docker_port=8063 + docker_rum() { - 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 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 - 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 + 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|it-tools) + 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 + } - 63) - local docker_name="open-webui" - local docker_img="ghcr.io/open-webui/open-webui:main" - local docker_port=8063 + 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 + ;; - 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 + 65|n8n) + local docker_name="n8n" + local docker_img="docker.n8n.io/n8nio/n8n" + local docker_port=8065 - } + docker_rum() { - 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 - ;; + 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} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - 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="是一款功能强大的自动化工作流平台" + local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 - ;; + 66|yt) + yt_menu_pro + ;; - 65) - local docker_name="n8n" - local docker_img="docker.n8n.io/n8nio/n8n" - local docker_port=8065 + 67|ddns) + local docker_name="ddns-go" + local docker_img="jeessy/ddns-go" + local docker_port=8067 - docker_rum() { + docker_rum() { + docker run -d \ + --name ddns-go \ + --restart=always \ + -p ${docker_port}:9876 \ + -v /home/docker/ddns-go:/root \ + jeessy/ddns-go - 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} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" + local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } + 68|allinssl) + local docker_name="allinssl" + local docker_img="allinssl/allinssl:latest" + local docker_port=8068 - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + } - 66) - yt_menu_pro - ;; + local docker_describe="开源免费的 SSL 证书自动化管理平台" + local docker_url="官网介绍: https://allinssl.com" + local docker_use="echo \"安全入口: /allinssl\"" + local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" + local app_size="1" + docker_app + ;; - 67) - local docker_name="ddns-go" - local docker_img="jeessy/ddns-go" - local docker_port=8067 + 69|sftpgo) + local docker_name="sftpgo" + local docker_img="drakkan/sftpgo:latest" + local docker_port=8069 - docker_rum() { - docker run -d \ - --name ddns-go \ - --restart=always \ - -p ${docker_port}:9876 \ - -v /home/docker/ddns-go:/root \ - jeessy/ddns-go + docker_rum() { - } + mkdir -p /home/docker/sftpgo/data + mkdir -p /home/docker/sftpgo/config + chown -R 1000:1000 /home/docker/sftpgo - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker run -d \ + --name sftpgo \ + --restart=always \ + -p ${docker_port}:8080 \ + -p 22022:2022 \ + --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ + --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ + drakkan/sftpgo:latest + + } - 68) - local docker_name="allinssl" - local docker_img="allinssl/allinssl:latest" - local docker_port=8068 + local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" + local docker_url="官网介绍: https://sftpgo.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 \"用户名: allinssl 密码: allinssldocker\"" - local app_size="1" - docker_app - ;; + 70|astrbot) + local docker_name="astrbot" + local docker_img="soulter/astrbot:latest" + local docker_port=8070 + docker_rum() { - 69) - local docker_name="sftpgo" - local docker_img="drakkan/sftpgo:latest" - local docker_port=8069 + mkdir -p /home/docker/astrbot/data - docker_rum() { + docker run -d \ + -p ${docker_port}:6185 \ + -p 6195:6195 \ + -p 6196:6196 \ + -p 6199:6199 \ + -p 11451:11451 \ + -v /home/docker/astrbot/data:/AstrBot/data \ + --restart unless-stopped \ + --name astrbot \ + soulter/astrbot:latest - mkdir -p /home/docker/sftpgo/data - mkdir -p /home/docker/sftpgo/config - chown -R 1000:1000 /home/docker/sftpgo + } - docker run -d \ - --name sftpgo \ - --restart=always \ - -p ${docker_port}:8080 \ - -p 22022:2022 \ - --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ - --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ - drakkan/sftpgo:latest + local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官网介绍: https://astrbot.app/" + local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 71|navidrome) + local docker_name="navidrome" + local docker_img="deluan/navidrome:latest" + local docker_port=8071 + docker_rum() { - 70) - local docker_name="astrbot" - local docker_img="soulter/astrbot:latest" - local docker_port=8070 + docker run -d \ + --name navidrome \ + --restart=unless-stopped \ + --user $(id -u):$(id -g) \ + -v /home/docker/navidrome/music:/music \ + -v /home/docker/navidrome/data:/data \ + -p ${docker_port}:4533 \ + -e ND_LOGLEVEL=info \ + deluan/navidrome:latest - docker_rum() { + } - mkdir -p /home/docker/astrbot/data + local docker_describe="是一个轻量、高性能的音乐流媒体服务器" + local docker_url="官网介绍: https://www.navidrome.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - docker run -d \ - -p ${docker_port}:6185 \ - -p 6195:6195 \ - -p 6196:6196 \ - -p 6199:6199 \ - -p 11451:11451 \ - -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ - --name astrbot \ - soulter/astrbot:latest - } + 72|bitwarden) - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" - local docker_passwd="" - local app_size="1" - docker_app - ;; + local docker_name="bitwarden" + local docker_img="vaultwarden/server" + local docker_port=8072 + docker_rum() { - 71) - local docker_name="navidrome" - local docker_img="deluan/navidrome:latest" - local docker_port=8071 + docker run -d \ + --name bitwarden \ + --restart always \ + -p ${docker_port}:80 \ + -v /home/docker/bitwarden/data:/data \ + vaultwarden/server - docker_rum() { + } - docker run -d \ - --name navidrome \ - --restart=unless-stopped \ - --user $(id -u):$(id -g) \ - -v /home/docker/navidrome/music:/music \ - -v /home/docker/navidrome/data:/data \ - -p ${docker_port}:4533 \ - -e ND_LOGLEVEL=info \ - deluan/navidrome:latest + local docker_describe="一个你可以控制数据的密码管理器" + local docker_url="官网介绍: https://bitwarden.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + ;; - 72) - local docker_name="bitwarden" - local docker_img="vaultwarden/server" - local docker_port=8072 + 73|libretv) - docker_rum() { + local docker_name="libretv" + local docker_img="bestzwei/libretv:latest" + local docker_port=8073 - docker run -d \ - --name bitwarden \ - --restart always \ - -p ${docker_port}:80 \ - -v /home/docker/bitwarden/data:/data \ - vaultwarden/server + docker_rum() { - } + read -e -p "设置LibreTV的登录密码: " app_passwd - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name libretv \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -e PASSWORD=${app_passwd} \ + bestzwei/libretv:latest + } - ;; + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 73) + 74|moontv) - local docker_name="libretv" - local docker_img="bestzwei/libretv:latest" - local docker_port=8073 + local docker_name="moontv" + local docker_img="ghcr.io/senshinya/moontv:latest" + local docker_port=8074 - docker_rum() { + docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "设置MoonTV的登录密码: " app_passwd docker run -d \ - --name libretv \ + --name moontv \ --restart unless-stopped \ - -p ${docker_port}:8080 \ + -p ${docker_port}:3000 \ -e PASSWORD=${app_passwd} \ - bestzwei/libretv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; - - - 74) - - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - - docker_rum() { - - read -e -p "设置MoonTV的登录密码: " app_passwd - - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; + ghcr.io/senshinya/moontv:latest + } - 75) + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/senshinya/MoonTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="melody" - local docker_img="foamzou/melody:latest" - local docker_port=8075 + ;; - docker_rum() { - docker run -d \ - --name melody \ - --restart unless-stopped \ - -p ${docker_port}:5566 \ - -v /home/docker/melody/.profile:/app/backend/.profile \ - foamzou/melody:latest + 75|melody) + local docker_name="melody" + local docker_img="foamzou/melody:latest" + local docker_port=8075 - } + docker_rum() { - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name melody \ + --restart unless-stopped \ + -p ${docker_port}:5566 \ + -v /home/docker/melody/.profile:/app/backend/.profile \ + foamzou/melody:latest - ;; - + } - 76) + local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" + local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="dosgame" - local docker_img="oldiy/dosgame-web-docker:latest" - local docker_port=8076 - docker_rum() { - docker run -d \ - --name dosgame \ - --restart unless-stopped \ - -p ${docker_port}:262 \ - oldiy/dosgame-web-docker:latest + ;; - } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + 76|dosgame) + local docker_name="dosgame" + local docker_img="oldiy/dosgame-web-docker:latest" + local docker_port=8076 - ;; + docker_rum() { + docker run -d \ + --name dosgame \ + --restart unless-stopped \ + -p ${docker_port}:262 \ + oldiy/dosgame-web-docker:latest - 77) + } - local docker_name="xunlei" - local docker_img="cnk3x/xunlei" - local docker_port=8077 + local docker_describe="是一个中文DOS游戏合集网站" + local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app - docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + ;; - docker run -d \ - --name xunlei \ - --restart unless-stopped \ - --privileged \ - -e XL_DASHBOARD_USERNAME=${app_use} \ - -e XL_DASHBOARD_PASSWORD=${app_passwd} \ - -v /home/docker/xunlei/data:/xunlei/data \ - -v /home/docker/xunlei/downloads:/xunlei/downloads \ - -p ${docker_port}:2345 \ - cnk3x/xunlei + 77|xunlei) - } + local docker_name="xunlei" + local docker_img="cnk3x/xunlei" + local docker_port=8077 - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { - ;; + read -e -p "设置${docker_name}的登录用户名: " app_use + read -e -p "设置${docker_name}的登录密码: " app_passwd + docker run -d \ + --name xunlei \ + --restart unless-stopped \ + --privileged \ + -e XL_DASHBOARD_USERNAME=${app_use} \ + -e XL_DASHBOARD_PASSWORD=${app_passwd} \ + -v /home/docker/xunlei/data:/xunlei/data \ + -v /home/docker/xunlei/downloads:/xunlei/downloads \ + -p ${docker_port}:2345 \ + cnk3x/xunlei + } - 78) + local docker_describe="迅雷你的离线高速BT磁力下载工具" + local docker_url="官网介绍: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_passwd="" + local app_size="1" + docker_app - local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" - local docker_name="panda-wiki-nginx" - local docker_port="2443" - local app_size="2" + ;; - docker_app_install() { - bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" - } - docker_app_update() { - docker_app_install - } + 78|PandaWiki) - docker_app_uninstall() { - docker_app_install - } + local app_name="PandaWiki" + local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" + local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local docker_name="panda-wiki-nginx" + local docker_port="2443" + local app_size="2" - docker_app_plus - ;; + docker_app_install() { + bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" + } + docker_app_update() { + docker_app_install + } - 79) + docker_app_uninstall() { + docker_app_install + } - local docker_name="beszel" - local docker_img="henrygd/beszel" - local docker_port=8079 + docker_app_plus + ;; - docker_rum() { - mkdir -p /home/docker/beszel && \ - docker run -d \ - --name beszel \ - --restart=unless-stopped \ - -v /home/docker/beszel:/beszel_data \ - -p ${docker_port}:8090 \ - henrygd/beszel - } + 79|beszel) - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_name="beszel" + local docker_img="henrygd/beszel" + local docker_port=8079 - ;; + docker_rum() { + mkdir -p /home/docker/beszel && \ + docker run -d \ + --name beszel \ + --restart=unless-stopped \ + -v /home/docker/beszel:/beszel_data \ + -p ${docker_port}:8090 \ + henrygd/beszel - 80) - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden-linkwarden-1" - local docker_port="8080" - local app_size="3" + } - docker_app_install() { - install git openssl - mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + local docker_describe="Beszel轻量易用的服务器监控" + local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - # 下载官方 docker-compose 和 env 文件 - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + ;; - # 生成随机密钥与密码 - local ADMIN_EMAIL="admin@example.com" - local ADMIN_PASSWORD=$(openssl rand -hex 8) - sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env - sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env - sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env - sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + 80|linkwarden) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden" + local docker_port="8080" + local app_size="3" - # 追加管理员账号信息 - echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env - echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + # 下载官方 docker-compose 和 env 文件 + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 启动容器 - docker compose up -d + # 生成随机密钥与密码 + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) - clear - echo "已经安装完成" - check_docker_app_ip + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - } + # 追加管理员账号信息 + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env - docker_app_update() { - cd /home/docker/linkwarden && docker compose down --rmi all - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - - # 保留原本的变量 - source .env - mv .env.new .env - echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env - echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env - echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env - echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env - echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env - echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - - docker compose up -d - } + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - docker_app_uninstall() { - cd /home/docker/linkwarden && docker compose down --rmi all - rm -rf /home/docker/linkwarden - echo "应用已卸载" - } + # 启动容器 + docker compose up -d - docker_app_plus + clear + echo "已经安装完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 保留原本的变量 + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "应用已卸载" + } + + docker_app_plus - ;; + ;; - 81) - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" - local docker_name="jitsi" - local docker_port="8081" - local app_size="3" + 81|jitsi) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" - docker_app_install() { + docker_app_install() { - add_yuming - mkdir -p /home/docker/jitsi && cd /home/docker/jitsi - wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) - unzip "$(ls -t | head -n 1)" - cd "$(ls -dt */ | head -n 1)" - cp env.example .env - ./gen-passwords.sh - mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} - sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env - sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env - docker compose up -d + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - } + } - docker_app_update() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - docker compose up -d + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d - } + } - docker_app_uninstall() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - rm -rf /home/docker/jitsi - echo "应用已卸载" - } + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "应用已卸载" + } - docker_app_plus + docker_app_plus - ;; + ;; - 82) + 82|gpt-load) - local docker_name="gpt-load" - local docker_img="tbphp/gpt-load:latest" - local docker_port=8082 + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/gpt-load && \ - docker run -d --name gpt-load \ - -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ - -v "/home/docker/gpt-load/data":/app/data \ - tbphp/gpt-load:latest + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest - } + } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 83) + 83|komari) - local docker_name="komari" - local docker_img="ghcr.io/komari-monitor/komari:latest" - local docker_port=8083 + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/komari && \ - docker run -d \ - --name komari \ - -p ${docker_port}:25774 \ - -v /home/docker/komari:/app/data \ - -e ADMIN_USERNAME=admin \ - -e ADMIN_PASSWORD=1212156 \ - --restart=always \ - ghcr.io/komari-monitor/komari:latest + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest - } + } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 84) + 84|wallos) - local docker_name="wallos" - local docker_img="bellamy/wallos:latest" - local docker_port=8084 + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/wallos && \ - docker run -d --name wallos \ - -v /home/docker/wallos/db:/var/www/html/db \ - -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ - -e TZ=UTC \ - -p ${docker_port}:80 \ - --restart unless-stopped \ - bellamy/wallos:latest + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest - } + } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 85) + 85|immich) - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" - local docker_port="8085" - local app_size="3" + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" - docker_app_install() { - install git openssl - mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} - wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml - docker compose up -d + docker compose up -d - clear - echo "已经安装完成" - check_docker_app_ip + clear + echo "已经安装完成" + check_docker_app_ip - } + } - docker_app_update() { - cd /home/docker/${docker_name} && docker compose down --rmi all - docker_app_install - } + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } - docker_app_uninstall() { - cd /home/docker/${docker_name} && docker compose down --rmi all - rm -rf /home/docker/${docker_name} - echo "应用已卸载" - } + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "应用已卸载" + } - docker_app_plus + docker_app_plus - ;; + ;; - 86) + 86|jellyfin) - local docker_name="jellyfin" - local docker_img="jellyfin/jellyfin" - local docker_port=8086 + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/jellyfin/media - chmod -R 777 /home/docker/jellyfin + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin - docker run -d \ - --name jellyfin \ - --user root \ - --volume /home/docker/jellyfin/config:/config \ - --volume /home/docker/jellyfin/cache:/cache \ - --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ - -p ${docker_port}:8096 \ - -p 7359:7359/udp \ - --restart=unless-stopped \ - jellyfin/jellyfin + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin - } + } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 87) + 87|synctv) - local docker_name="synctv" - local docker_img="synctvorg/synctv" - local docker_port=8087 + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 - docker_rum() { + docker_rum() { - docker run -d \ - --name synctv \ - -v /home/docker/synctv:/root/.synctv \ - -p ${docker_port}:8080 \ - --restart=always \ - synctvorg/synctv + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv - } + } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 88) + 88|owncast) - local docker_name="owncast" - local docker_img="owncast/owncast:latest" - local docker_port=8088 + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 - docker_rum() { + docker_rum() { - docker run -d \ - --name owncast \ - -p ${docker_port}:8080 \ - -p 1935:1935 \ - -v /home/docker/owncast/data:/app/data \ - --restart=always \ - owncast/owncast:latest + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest - } + } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" - local app_size="1" - docker_app + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app - ;; + ;; - 0) - kejilion - ;; - *) - echo "无效的输入!" - ;; - esac - break_end + 0) + kejilion + ;; + *) + ;; + esac + break_end + sub_choice="" - done +done } @@ -12274,8 +12281,7 @@ EOF 39) clear - send_stats "命令行历史记录" - bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + linux_fav ;; 41) @@ -13091,8 +13097,9 @@ echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" - - +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } @@ -13224,6 +13231,10 @@ else iptables_panel ;; + 命令收藏夹|fav) + linux_fav + ;; + status|状态) shift send_stats "软件状态查看" @@ -13303,8 +13314,17 @@ else fi ;; + + app) + shift + send_stats "应用$@" + linux_panel "$@" + ;; + + *) k_info ;; esac fi + From 0ad65beae28e99ad4213f1a205071a4cb586b066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:10:31 +0800 Subject: [PATCH 048/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 6f035b0e1..5c3bc57e2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1261,4 +1261,9 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增SyncTV一起看片神器的安装及使用, 应用市场新增Owncast自托管直播平台的安装及使用, ------------------------ +2025-08-14 v4.0.8 +应用市场增加快速启动方式 命令行输入 k app 即可启动应用市场 +应用市场增加应用编号快速启动 k app 13 就是13号应用启动,也可以输入应用名称启动 k app dpanel +支持远程命令安装和管理应用,bash <(curl -sL kejilion.sh) app moontv。 +------------------------ From 2c04a4e5f50be5cb4aac194bcabfef61e0ff63a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:11:15 +0800 Subject: [PATCH 049/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 5c3bc57e2..ec42c8f37 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1264,6 +1264,6 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 2025-08-14 v4.0.8 应用市场增加快速启动方式 命令行输入 k app 即可启动应用市场 应用市场增加应用编号快速启动 k app 13 就是13号应用启动,也可以输入应用名称启动 k app dpanel -支持远程命令安装和管理应用,bash <(curl -sL kejilion.sh) app moontv。 +支持远程命令安装和管理应用,bash <(curl -sL kejilion.sh) app moontv | bash <(curl -sL kejilion.sh) app 1panel ------------------------ From 3bc5b40a3e8d58da38dbc91b860f2551d70ffd71 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 14 Aug 2025 10:14:56 +0000 Subject: [PATCH 050/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-14=2010:14:56?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 3912 +++++++++++++++++++++++------------------------ jp/kejilion.sh | 3914 +++++++++++++++++++++++------------------------ kr/kejilion.sh | 3916 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 3906 +++++++++++++++++++++++------------------------ 4 files changed, 7864 insertions(+), 7784 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 1ae24ad56..3af7d8ae4 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.7" +sh_v="4.0.8" gl_hui='\e[37m' @@ -4980,7 +4980,7 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Detected operating systems:$os_name $os_version" + echo "Operating system detected:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." @@ -5360,7 +5360,7 @@ Kernel_optimize() { echo "Video introduction: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" echo "A variety of system parameter tuning modes are provided, and users can choose and switch according to their own usage scenarios." - echo -e "${gl_huang}Tip:${gl_bai}Please use it with caution in the production environment!" + echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in the production environment!" echo "--------------------" echo "1. High-performance optimization mode: Maximize system performance and optimize file descriptors, virtual memory, network settings, cache management and CPU settings." echo "2. Balanced optimization mode: Balance between performance and resource consumption, suitable for daily use." @@ -5648,7 +5648,10 @@ linux_trash() { done } - +linux_fav() { +send_stats "Command Favorites" +bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) +} # Create a backup create_backup() { @@ -8449,10 +8452,12 @@ linux_ldnmp() { linux_panel() { +local sub_choice="$1" +while true; do - while true; do + if [ -z "$sub_choice" ]; then clear echo -e "Application Market" echo -e "${gl_kjlan}------------------------" @@ -8524,2527 +8529,2529 @@ linux_panel() { echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "Please enter your selection:" sub_choice + fi - case $sub_choice in - 1) + case $sub_choice in + 1|bt) - local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" - local panelurl="https://www.bt.cn/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 2) + ;; + 2|aapanel) - local lujing="[ -d "/www/server/panel" ]" - local panelname="aapanel" - local panelurl="https://www.aapanel.com/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 3) + ;; + 3|1panel) - local lujing="command -v 1pctl" - local panelname="1Panel" - local panelurl="https://1panel.cn/" + local lujing="command -v 1pctl" + local panelname="1Panel" + local panelurl="https://1panel.cn/" - panel_app_install() { - install bash - bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" - } + panel_app_install() { + install bash + bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" + } - panel_app_manage() { - 1pctl user-info - 1pctl update password - } + panel_app_manage() { + 1pctl user-info + 1pctl update password + } - panel_app_uninstall() { - 1pctl uninstall - } + panel_app_uninstall() { + 1pctl uninstall + } - install_panel + install_panel - ;; - 4) + ;; + 4|npm) - local docker_name="npm" - local docker_img="jc21/nginx-proxy-manager:latest" - local docker_port=81 + local docker_name="npm" + local docker_img="jc21/nginx-proxy-manager:latest" + local docker_port=81 - docker_rum() { + 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 + 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="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" - local app_size="1" + local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" + local docker_url="官网介绍: https://nginxproxymanager.com/" + local docker_use="echo \"初始用户名: admin@example.com\"" + local docker_passwd="echo \"初始密码: changeme\"" + local app_size="1" - docker_app + docker_app - ;; + ;; - 5) + 5|openlist) - local docker_name="openlist" - local docker_img="openlistteam/openlist:latest-aria2" - local docker_port=5244 + local docker_name="openlist" + local docker_img="openlistteam/openlist:latest-aria2" + local docker_port=5244 - docker_rum() { + docker_rum() { - docker run -d \ - --restart=always \ - -v /home/docker/openlist:/opt/openlist/data \ - -p ${docker_port}:5244 \ - -e PUID=0 \ - -e PGID=0 \ - -e UMASK=022 \ - --name="openlist" \ - openlistteam/openlist:latest-aria2 + docker run -d \ + --restart=always \ + -v /home/docker/openlist:/opt/openlist/data \ + -p ${docker_port}:5244 \ + -e PUID=0 \ + -e PGID=0 \ + -e UMASK=022 \ + --name="openlist" \ + openlistteam/openlist:latest-aria2 - } + } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" + local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_use="docker exec -it openlist ./openlist admin random" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 6) + 6|webtop-ubuntu) - local docker_name="webtop-ubuntu" - local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" - local docker_port=3006 + local docker_name="webtop-ubuntu" + local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" + local docker_port=3006 - docker_rum() { + 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 \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ - -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 + 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 \ + -e CUSTOM_USER=ubuntu-abc \ + -e PASSWORD=ubuntuABC123 \ + -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的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" - local app_size="2" - docker_app + local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: ubuntu-abc\"" + local docker_passwd="echo \"密码: ubuntuABC123\"" + local app_size="2" + docker_app - ;; - 7) + ;; + 7|nezha) + clear + send_stats "Build Nezha" + local docker_name="nezha-dashboard" + local docker_port=8008 + while true; do + check_docker_app + check_docker_image_update $docker_name clear - send_stats "Build 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 "Nezha Monitoring$check_docker $update_status" - echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" - echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + echo -e "Nezha Monitoring$check_docker $update_status" + echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" + echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) + check_docker_app_ip + fi + echo "" + echo "------------------------" + echo "1. Use" + echo "------------------------" + echo "0. Return to the previous menu" + echo "------------------------" + read -e -p "Enter your choice:" 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 - fi - echo "" - echo "------------------------" - echo "1. Use" - echo "------------------------" - echo "0. Return to the previous menu" - echo "------------------------" - read -e -p "Enter your choice:" 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 - ;; + *) + break + ;; - *) - break - ;; + esac + break_end + done + ;; - esac - break_end - done - ;; + 8|qb) + + 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 - 8) + } - local docker_name="qbittorrent" - local docker_img="lscr.io/linuxserver/qbittorrent:latest" - local docker_port=8081 + 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 - 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 + 9|mail) + send_stats "Build a post office" + clear + install telnet + local docker_name=“mailserver” + while true; do + check_docker_app + check_docker_image_update $docker_name - } + clear + echo -e "Post Office Services$check_docker $update_status" + echo "poste.io is an open source mail server solution." + echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" - 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 + echo "" + echo "Port detection" + port=25 + timeout=3 + if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then + echo -e "${gl_lv}port$portCurrently available${gl_bai}" + else + echo -e "${gl_hong}port$portNot currently available${gl_bai}" + fi + echo "" - ;; + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + yuming=$(cat /home/docker/mail.txt) + echo "Access address:" + echo "https://$yuming" + fi - 9) - send_stats "Build a post office" - clear - install telnet - local docker_name=“mailserver” - while true; do - check_docker_app - check_docker_image_update $docker_name + echo "------------------------" + echo "1. Install 2. Update 3. Uninstall" + echo "------------------------" + echo "0. Return to the previous menu" + echo "------------------------" + read -e -p "Enter your choice:" choice - clear - echo -e "Post Office Services$check_docker $update_status" - echo "poste.io is an open source mail server solution." - echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + case $choice in + 1) + check_disk_space 2 + read -e -p "Please set the email domain name, for example, mail.yuming.com:" yuming + mkdir -p /home/docker + echo "$yuming" > /home/docker/mail.txt + echo "------------------------" + ip_address + echo "Parse these DNS records first" + 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 "Press any key to continue..." + read -n 1 -s -r -p "" + + install jq + install_docker - echo "" - echo "Port detection" - port=25 - timeout=3 - if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then - echo -e "${gl_lv}port$portCurrently available${gl_bai}" - else - echo -e "${gl_hong}port$portNot currently available${gl_bai}" - fi - echo "" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.io + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io has been installed" + echo "------------------------" + echo "You can access poste.io using the following address:" + echo "https://$yuming" + echo "" + + ;; - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + 2) + docker rm -f mailserver + docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) - echo "Access address:" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io has been installed" + echo "------------------------" + echo "You can access poste.io using the following address:" echo "https://$yuming" - fi + echo "" + ;; + 3) + docker rm -f mailserver + docker rmi -f analogic/poste.io + rm /home/docker/mail.txt + rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "The app has been uninstalled" + ;; - echo "------------------------" - echo "1. Install 2. Update 3. Uninstall" - echo "------------------------" - echo "0. Return to the previous menu" - echo "------------------------" - read -e -p "Enter your choice:" choice + *) + break + ;; - case $choice in - 1) - check_disk_space 2 - read -e -p "Please set the email domain name, for example, mail.yuming.com:" yuming - mkdir -p /home/docker - echo "$yuming" > /home/docker/mail.txt - echo "------------------------" - ip_address - echo "Parse these DNS records first" - 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 "Press any key to continue..." - read -n 1 -s -r -p "" + esac + break_end + done - 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 + 10|rocketchat) - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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" - clear - echo "poste.io has been installed" - echo "------------------------" - echo "You can access poste.io using the following address:" - echo "https://$yuming" - echo "" + 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 "Installed" + check_docker_app_ip + } - 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 - - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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 has been installed" + check_docker_app_ip + } - clear - echo "poste.io has been installed" - echo "------------------------" - echo "You can access poste.io using the following address:" - 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 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" - ;; + 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 "The app has been uninstalled" + } - *) - break - ;; + docker_app_plus + ;; - esac - break_end - done - ;; - 10) + 11|zentao) + local docker_name="zentao-server" + local docker_img="idoop/zentao:latest" + local docker_port=82 - 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 "Installed" - check_docker_app_ip - } + docker_rum() { - 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 has been installed" - 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 "The app has been uninstalled" - } - docker_app_plus - ;; + 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 + } - 11) - local docker_name="zentao-server" - local docker_img="idoop/zentao:latest" - local docker_port=82 + 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 + ;; - docker_rum() { + 12|qinglong) + local docker_name="qinglong" + local docker_img="whyour/qinglong:latest" + local docker_port=5700 + 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 + 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="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" - local app_size="2" - docker_app + } - ;; + local docker_describe="青龙面板是一个定时任务管理平台" + local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 12) - local docker_name="qinglong" - local docker_img="whyour/qinglong:latest" - local docker_port=5700 + ;; + 13|cloudreve) + + 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 "Installed" + check_docker_app_ip + } - docker_rum() { + docker_app_update() { + cd /home/docker/cloud/ && docker compose down --rmi all + cd /home/docker/cloud/ && docker compose up -d + } - docker run -d \ - -v /home/docker/qinglong/data:/ql/data \ - -p ${docker_port}:5700 \ - --name qinglong \ - --hostname qinglong \ - --restart unless-stopped \ - whyour/qinglong:latest + docker_app_uninstall() { + cd /home/docker/cloud/ && docker compose down --rmi all + rm -rf /home/docker/cloud + echo "The app has been uninstalled" + } - } + docker_app_plus + ;; - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 14|easyimage) + local docker_name="easyimage" + local docker_img="ddsderek/easyimage:latest" + local docker_port=8014 + 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 - ;; - 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 "Installed" - check_docker_app_ip - } + 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|emby) + local docker_name="emby" + local docker_img="linuxserver/emby:latest" + local docker_port=8015 - docker_app_update() { - cd /home/docker/cloud/ && docker compose down --rmi all - cd /home/docker/cloud/ && docker compose up -d - } + 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 - docker_app_uninstall() { - cd /home/docker/cloud/ && docker compose down --rmi all - rm -rf /home/docker/cloud - echo "The app has been uninstalled" - } + } - docker_app_plus - ;; - 14) - local docker_name="easyimage" - local docker_img="ddsderek/easyimage:latest" - local docker_port=85 - docker_rum() { + local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" + local docker_url="官网介绍: https://emby.media/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 16|looking) + local docker_name="looking-glass" + local docker_img="wikihostinc/looking-glass-server" + local docker_port=8016 - } - 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 - ;; + docker_rum() { - 15) - local docker_name="emby" - local docker_img="linuxserver/emby:latest" - local docker_port=8096 + docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - 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="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|adguardhome) + local docker_name="adguardhome" + local docker_img="adguard/adguardhome" + local docker_port=8017 - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker_rum() { - 16) - local docker_name="looking-glass" - local docker_img="wikihostinc/looking-glass-server" - local docker_port=89 + 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 - docker_rum() { + } - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - } + 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 - 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 + 18|onlyoffice) - docker_rum() { + local docker_name="onlyoffice" + local docker_img="onlyoffice/documentserver" + local docker_port=8018 - 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 + 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="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 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|safeline) + send_stats "Build a Thunder Pool" - 18) + local docker_name=safeline-mgt + local docker_port=9443 + while true; do + check_docker_app + clear + echo -e "Thunder Pool Service$check_docker" + echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." + echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + check_docker_app_ip + fi + echo "" - local docker_name="onlyoffice" - local docker_img="onlyoffice/documentserver" - local docker_port=8082 + echo "------------------------" + echo "1. Install 2. Update 3. Reset Password 4. Uninstall" + echo "------------------------" + echo "0. Return to the previous menu" + echo "------------------------" + read -e -p "Enter your choice:" choice - docker_rum() { + case $choice in + 1) + install_docker + check_disk_space 5 + bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "The Thunder Pool WAF panel has been installed" + check_docker_app_ip + docker exec safeline-mgt resetadmin - 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 + ;; + 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "Thunder Pool WAF panel has been updated" + check_docker_app_ip + ;; + 3) + docker exec safeline-mgt resetadmin + ;; + 4) + cd /data/safeline + docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" + echo "docker compose down && docker compose down --rmi all" + ;; + *) + break + ;; - } + esac + break_end + done - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + ;; - ;; + 20|portainer) + local docker_name="portainer" + local docker_img="portainer/portainer" + local docker_port=8020 - 19) - send_stats "Build a Thunder Pool" + docker_rum() { - local docker_name=safeline-mgt - local docker_port=9443 - while true; do - check_docker_app - clear - echo -e "Thunder Pool Service$check_docker" - echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." - echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then - check_docker_app_ip - fi - echo "" + 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 - echo "------------------------" - echo "1. Install 2. Update 3. Reset Password 4. Uninstall" - echo "------------------------" - echo "0. Return to the previous menu" - echo "------------------------" - read -e -p "Enter your choice:" choice + } - case $choice in - 1) - install_docker - check_disk_space 5 - bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "The Thunder Pool WAF panel has been installed" - check_docker_app_ip - docker exec safeline-mgt resetadmin - ;; + local docker_describe="portainer是一个轻量级的docker容器管理面板" + local docker_url="官网介绍: https://www.portainer.io/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "Thunder Pool WAF panel has been updated" - check_docker_app_ip - ;; - 3) - docker exec safeline-mgt resetadmin - ;; - 4) - cd /data/safeline - docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" - echo "docker compose down && docker compose down --rmi all" - ;; - *) - break - ;; + ;; - esac - break_end - done + 21|vscode) + local docker_name="vscode-web" + local docker_img="codercom/code-server" + local docker_port=8021 - ;; - 20) - local docker_name="portainer" - local docker_img="portainer/portainer" - local docker_port=9050 + docker_rum() { - 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 - 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="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 + ;; - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 22|uptime-kuma) + local docker_name="uptime-kuma" + local docker_img="louislam/uptime-kuma:latest" + local docker_port=8022 - 21) - local docker_name="vscode-web" - local docker_img="codercom/code-server" - local docker_port=8180 + docker_rum() { - 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 - 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="Uptime Kuma 易于使用的自托管监控工具" + local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 23|memos) + local docker_name="memos" + local docker_img="ghcr.io/usememos/memos:latest" + local docker_port=8023 + docker_rum() { - 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 - 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="Memos是一款轻量级、自托管的备忘录中心" + local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 24|webtop) + local docker_name="webtop" + local docker_img="lscr.io/linuxserver/webtop:latest" + local docker_port=8024 + + 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 CUSTOM_USER=webtop-abc \ + -e PASSWORD=webtopABC123 \ + -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="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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: webtop-abc\"" + local docker_passwd="echo \"密码: webtopABC123\"" + local app_size="2" + docker_app + ;; - } + 25|nextcloud) + local docker_name="nextcloud" + local docker_img="nextcloud:latest" + local docker_port=8025 + local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - 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 - ;; + docker_rum() { - 24) - local docker_name="webtop" - local docker_img="lscr.io/linuxserver/webtop:latest" - local docker_port=3083 + 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 - docker_rum() { + } + 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 + ;; - 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 CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ - -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 + 26|qd) + local docker_name="qd" + local docker_img="qdtoday/qd:latest" + local docker_port=8026 + 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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" - local app_size="2" - docker_app - ;; + 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 + ;; - 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) + 27|dockge) + local docker_name="dockge" + local docker_img="louislam/dockge:latest" + local docker_port=8027 - docker_rum() { + 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 + 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="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" - local docker_passwd="" - local app_size="3" - docker_app - ;; + 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 + ;; - 26) - local docker_name="qd" - local docker_img="qdtoday/qd:latest" - local docker_port=8923 + 28|speedtest) + local docker_name="speedtest" + local docker_img="ghcr.io/librespeed/speedtest" + local docker_port=8028 - docker_rum() { + docker_rum() { - docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd + docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest - } + } - 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 + 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 + ;; - docker_rum() { + 29|searxng) + local docker_name="searxng" + local docker_img="searxng/searxng" + local docker_port=8029 - 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 + docker_rum() { - } + docker run -d \ + --name searxng \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v "/home/docker/searxng:/etc/searxng" \ + searxng/searxng - 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 + 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 + ;; - docker_rum() { + 30|photoprism) + local docker_name="photoprism" + local docker_img="photoprism/photoprism:latest" + local docker_port=8030 + 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 - 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 - ;; + 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 + ;; - 29) - local docker_name="searxng" - local docker_img="searxng/searxng" - local docker_port=8029 - docker_rum() { + 31|s-pdf) + local docker_name="s-pdf" + local docker_img="frooodle/s-pdf:latest" + local docker_port=8031 - docker run -d \ - --name searxng \ - --restart unless-stopped \ - -p ${docker_port}:8080 \ - -v "/home/docker/searxng:/etc/searxng" \ - searxng/searxng + 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="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + ;; - 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) + 32|drawio) + local docker_name="drawio" + local docker_img="jgraph/drawio" + local docker_port=8032 - docker_rum() { + 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 + docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio - } + } - 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 - ;; + local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" + local docker_url="官网介绍: https://www.drawio.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 33|sun-panel) + local docker_name="sun-panel" + local docker_img="hslr/sun-panel" + local docker_port=8033 - 31) - local docker_name="s-pdf" - local docker_img="frooodle/s-pdf:latest" - local docker_port=8020 + docker_rum() { - 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 - 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 + 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 + ;; - docker_rum() { + 34|pingvin-share) + local docker_name="pingvin-share" + local docker_img="stonith404/pingvin-share" + local docker_port=8034 - docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio + 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 + ;; - 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 + 35|moments) + local docker_name="moments" + local docker_img="kingwrcy/moments:latest" + local docker_port=8035 - docker_rum() { + 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 + 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="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 - ;; + local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" + local docker_url="Official website introduction:${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 + ;; - 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 - } + 36|lobe-chat) + local docker_name="lobe-chat" + local docker_img="lobehub/lobe-chat:latest" + local docker_port=8036 - 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 - ;; + docker_rum() { + docker run -d -p ${docker_port}:3210 \ + --name lobe-chat \ + --restart=always \ + lobehub/lobe-chat + } - 35) - local docker_name="moments" - local docker_img="kingwrcy/moments:latest" - local docker_port=8035 + 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 + ;; - docker_rum() { + 37|myip) + local docker_name="myip" + local docker_img="jason5ng32/myip:latest" + local docker_port=8037 - 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 - } + docker_rum() { + docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest - local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="Official website introduction:${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 - ;; + } + 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 + ;; - 36) - local docker_name="lobe-chat" - local docker_img="lobehub/lobe-chat:latest" - local docker_port=8036 + 38|xiaoya) + send_stats "Xiaoya Family Bucket" + clear + install_docker + check_disk_space 1 + bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" + ;; - docker_rum() { + 39|bililive) - docker run -d -p ${docker_port}:3210 \ - --name lobe-chat \ - --restart=always \ - lobehub/lobe-chat - } + 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_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 - ;; + local docker_name="bililive-go" + local docker_img="chigusa/bililive-go" + local docker_port=8039 - 37) - local docker_name="myip" - local docker_img="jason5ng32/myip:latest" - local docker_port=8037 + docker_rum() { - 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 - docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest + } - } + 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|webssh) + 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="是一个多功能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 - ;; + 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 + ;; - 38) - send_stats "Xiaoya Family Bucket" - clear - install_docker - check_disk_space 1 - bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" - ;; + 41|haozi) - 39) + local lujing="[ -d "/www/server/panel" ]" + local panelname="耗子面板" + local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" - 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 + 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 ~ + } - local docker_name="bililive-go" - local docker_img="chigusa/bililive-go" - local docker_port=8039 + panel_app_manage() { + panel-cli + } - docker_rum() { + 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 ~ + } - 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 + install_panel - } + ;; - 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 - } + 42|nexterm) + local docker_name="nexterm" + local docker_img="germannewsmaker/nexterm:latest" + local docker_port=8042 - 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 - ;; + docker_rum() { - 41) + docker run -d \ + --name nexterm \ + -p ${docker_port}:6989 \ + -v /home/docker/nexterm:/app/data \ + --restart unless-stopped \ + germannewsmaker/nexterm:latest - 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 ~ - } + 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 + ;; - panel_app_manage() { - panel-cli - } + 43|hbbs) + local docker_name="hbbs" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - 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 ~ - } + docker_rum() { - install_panel + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs - ;; + } - 42) - local docker_name="nexterm" - local docker_img="germannewsmaker/nexterm:latest" - local docker_port=8042 + 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 + ;; - docker_rum() { + 44|hbbr) + local docker_name="hbbr" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - docker run -d \ - --name nexterm \ - -p ${docker_port}:6989 \ - -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ - germannewsmaker/nexterm:latest + 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="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 + 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 + ;; - docker_rum() { + 45|registry) + local docker_name="registry" + local docker_img="registry:2" + local docker_port=8045 - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + 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="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 - ;; + 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 + ;; - 44) - local docker_name="hbbr" - local docker_img="rustdesk/rustdesk-server" - local docker_port=0000 + 46|ghproxy) + local docker_name="ghproxy" + local docker_img="wjqserver/ghproxy:latest" + local docker_port=8046 - docker_rum() { + docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest - } + } - 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 - ;; + 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 + ;; - 45) - local docker_name="registry" - local docker_img="registry:2" - local docker_port=8045 + 47|prometheus|grafana) - docker_rum() { + 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 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 + docker_app_install() { + prometheus_install + clear + ip_address + echo "Installed" + check_docker_app_ip + echo "The initial username and password are: admin" + } - } + 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 + } - 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 - ;; + 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 - 46) - local docker_name="ghproxy" - local docker_img="wjqserver/ghproxy:latest" - local docker_port=8046 + rm -rf /home/docker/monitoring + echo "The app has been uninstalled" + } - docker_rum() { + docker_app_plus + ;; - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + 48|node-exporter) + local docker_name="node-exporter" + local docker_img="prom/node-exporter" + local docker_port=8048 - } + docker_rum() { - 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 - ;; + docker run -d \ + --name=node-exporter \ + -p ${docker_port}:9100 \ + --restart unless-stopped \ + prom/node-exporter - 47) + } + local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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" + 49|cadvisor) + 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 - docker_app_install() { - prometheus_install - clear - ip_address - echo "Installed" - check_docker_app_ip - echo "The initial username and password are: admin" - } - - 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 + local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - rm -rf /home/docker/monitoring - echo "The app has been uninstalled" - } - docker_app_plus - ;; + 50|changedetection) + local docker_name="changedetection" + local docker_img="dgtlmoon/changedetection.io:latest" + local docker_port=8050 - 48) - local docker_name="node-exporter" - local docker_img="prom/node-exporter" - local docker_port=8048 + docker_rum() { - docker_rum() { + docker run -d --restart always -p ${docker_port}:5000 \ + -v /home/docker/datastore:/datastore \ + --name changedetection dgtlmoon/changedetection.io:latest - 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/dgtlmoon/changedetection.io" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 51|pve) + clear + send_stats "PVE Chicken" + 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 + ;; - 49) - local docker_name="cadvisor" - local docker_img="gcr.io/cadvisor/cadvisor:latest" - local docker_port=8049 - docker_rum() { + 52|dpanel) + local docker_name="dpanel" + local docker_img="dpanel/dpanel:lite" + local docker_port=8052 - 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 + 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="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + } + 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 + ;; - 50) - local docker_name="changedetection" - local docker_img="dgtlmoon/changedetection.io:latest" - local docker_port=8050 + 53|llama3) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - docker_rum() { + docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ - -v /home/docker/datastore:/datastore \ - --name changedetection dgtlmoon/changedetection.io:latest + 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="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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|amh) - 51) - clear - send_stats "PVE Chicken" - 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 - ;; + 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 + } - 52) - local docker_name="dpanel" - local docker_img="dpanel/dpanel:lite" - local docker_port=8052 + panel_app_manage() { + panel_app_install + } - docker_rum() { + panel_app_uninstall() { + panel_app_install + } - 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 + install_panel + ;; - } - 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 - ;; + 55|frps) + frps_panel + ;; - 53) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 56|frpc) + frpc_panel + ;; - docker_rum() { + 57|deepseek) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - 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 + 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 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 + ;; - 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 - } + 58|dify) + 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" - panel_app_manage() { - panel_app_install - } + 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 - panel_app_uninstall() { - panel_app_install - } + docker compose up -d + clear + echo "Installed" + check_docker_app_ip + } - install_panel - ;; + 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 "The app has been uninstalled" + } - 55) - frps_panel - ;; + docker_app_plus - 56) - frpc_panel - ;; + ;; - 57) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 59|new-api) + 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_rum() { + 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 - 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 + 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 - } - 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 - ;; + docker compose up -d + clear + echo "Installed" + 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 - 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 compose up -d + clear + echo "Installed" + check_docker_app_ip - 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 "Installed" - 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 "The app has been uninstalled" - } + docker_app_uninstall() { + cd /home/docker/new-api/ && docker compose down --rmi all + rm -rf /home/docker/new-api + echo "The app has been uninstalled" + } - docker_app_plus + 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 + 60|jms) - 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 + 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 "Installed" + check_docker_app_ip + echo "Initial username: admin" + echo "Initial password: ChangeMe" + } - docker compose up -d - clear - echo "Installed" - 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 "Installed" - check_docker_app_ip - } + docker_app_update() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh upgrade + echo "The app has been updated" + } - docker_app_uninstall() { - cd /home/docker/new-api/ && docker compose down --rmi all - rm -rf /home/docker/new-api - echo "The app has been uninstalled" - } - docker_app_plus + docker_app_uninstall() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh uninstall + cd /opt + rm -rf jumpserver-installer*/ + rm -rf jumpserver + echo "The app has been uninstalled" + } - ;; + docker_app_plus + ;; + 61|libretranslate) + local docker_name="libretranslate" + local docker_img="libretranslate/libretranslate:latest" + local docker_port=8061 - 60) + docker_rum() { - 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 run -d \ + -p ${docker_port}:5000 \ + --name libretranslate \ + libretranslate/libretranslate \ + --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru - docker_app_install() { - curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash - clear - echo "Installed" - check_docker_app_ip - echo "Initial username: admin" - echo "Initial password: ChangeMe" - } + } + 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 + ;; - docker_app_update() { - cd /opt/jumpserver-installer*/ - ./jmsctl.sh upgrade - echo "The app has been updated" - } - docker_app_uninstall() { - cd /opt/jumpserver-installer*/ - ./jmsctl.sh uninstall - cd /opt - rm -rf jumpserver-installer*/ - rm -rf jumpserver - echo "The app has been uninstalled" - } + 62|ragflow) + 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_plus - ;; + 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 "Installed" + check_docker_app_ip + } - 61) - local docker_name="libretranslate" - local docker_img="libretranslate/libretranslate:latest" - local docker_port=8061 + 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_rum() { + docker_app_uninstall() { + cd /home/docker/ragflow/docker/ && docker compose down --rmi all + rm -rf /home/docker/ragflow + echo "The app has been uninstalled" + } - docker run -d \ - -p ${docker_port}:5000 \ - --name libretranslate \ - libretranslate/libretranslate \ - --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru + docker_app_plus - } + ;; - 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 - ;; + 63|open-webui) + local docker_name="open-webui" + local docker_img="ghcr.io/open-webui/open-webui:main" + local docker_port=8063 + docker_rum() { - 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 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 - 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 "Installed" - 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 "The app has been uninstalled" - } + } - docker_app_plus + 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|it-tools) + 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 + } - 63) - local docker_name="open-webui" - local docker_img="ghcr.io/open-webui/open-webui:main" - local docker_port=8063 + 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 + ;; - 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 + 65|n8n) + local docker_name="n8n" + local docker_img="docker.n8n.io/n8nio/n8n" + local docker_port=8065 - } + docker_rum() { - 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 - ;; + 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} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - 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="是一款功能强大的自动化工作流平台" + local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 - ;; + 66|yt) + yt_menu_pro + ;; - 65) - local docker_name="n8n" - local docker_img="docker.n8n.io/n8nio/n8n" - local docker_port=8065 + 67|ddns) + local docker_name="ddns-go" + local docker_img="jeessy/ddns-go" + local docker_port=8067 - docker_rum() { + docker_rum() { + docker run -d \ + --name ddns-go \ + --restart=always \ + -p ${docker_port}:9876 \ + -v /home/docker/ddns-go:/root \ + jeessy/ddns-go - 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} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" + local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } + 68|allinssl) + local docker_name="allinssl" + local docker_img="allinssl/allinssl:latest" + local docker_port=8068 - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + } - 66) - yt_menu_pro - ;; + local docker_describe="开源免费的 SSL 证书自动化管理平台" + local docker_url="官网介绍: https://allinssl.com" + local docker_use="echo \"安全入口: /allinssl\"" + local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" + local app_size="1" + docker_app + ;; - 67) - local docker_name="ddns-go" - local docker_img="jeessy/ddns-go" - local docker_port=8067 + 69|sftpgo) + local docker_name="sftpgo" + local docker_img="drakkan/sftpgo:latest" + local docker_port=8069 - docker_rum() { - docker run -d \ - --name ddns-go \ - --restart=always \ - -p ${docker_port}:9876 \ - -v /home/docker/ddns-go:/root \ - jeessy/ddns-go + docker_rum() { - } + mkdir -p /home/docker/sftpgo/data + mkdir -p /home/docker/sftpgo/config + chown -R 1000:1000 /home/docker/sftpgo - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker run -d \ + --name sftpgo \ + --restart=always \ + -p ${docker_port}:8080 \ + -p 22022:2022 \ + --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ + --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ + drakkan/sftpgo:latest + + } - 68) - local docker_name="allinssl" - local docker_img="allinssl/allinssl:latest" - local docker_port=8068 + local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" + local docker_url="官网介绍: https://sftpgo.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 \"用户名: allinssl 密码: allinssldocker\"" - local app_size="1" - docker_app - ;; + 70|astrbot) + local docker_name="astrbot" + local docker_img="soulter/astrbot:latest" + local docker_port=8070 + docker_rum() { - 69) - local docker_name="sftpgo" - local docker_img="drakkan/sftpgo:latest" - local docker_port=8069 + mkdir -p /home/docker/astrbot/data - docker_rum() { + docker run -d \ + -p ${docker_port}:6185 \ + -p 6195:6195 \ + -p 6196:6196 \ + -p 6199:6199 \ + -p 11451:11451 \ + -v /home/docker/astrbot/data:/AstrBot/data \ + --restart unless-stopped \ + --name astrbot \ + soulter/astrbot:latest - mkdir -p /home/docker/sftpgo/data - mkdir -p /home/docker/sftpgo/config - chown -R 1000:1000 /home/docker/sftpgo + } - docker run -d \ - --name sftpgo \ - --restart=always \ - -p ${docker_port}:8080 \ - -p 22022:2022 \ - --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ - --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ - drakkan/sftpgo:latest + local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官网介绍: https://astrbot.app/" + local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 71|navidrome) + local docker_name="navidrome" + local docker_img="deluan/navidrome:latest" + local docker_port=8071 + docker_rum() { - 70) - local docker_name="astrbot" - local docker_img="soulter/astrbot:latest" - local docker_port=8070 + docker run -d \ + --name navidrome \ + --restart=unless-stopped \ + --user $(id -u):$(id -g) \ + -v /home/docker/navidrome/music:/music \ + -v /home/docker/navidrome/data:/data \ + -p ${docker_port}:4533 \ + -e ND_LOGLEVEL=info \ + deluan/navidrome:latest - docker_rum() { + } - mkdir -p /home/docker/astrbot/data + local docker_describe="是一个轻量、高性能的音乐流媒体服务器" + local docker_url="官网介绍: https://www.navidrome.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - docker run -d \ - -p ${docker_port}:6185 \ - -p 6195:6195 \ - -p 6196:6196 \ - -p 6199:6199 \ - -p 11451:11451 \ - -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ - --name astrbot \ - soulter/astrbot:latest - } + 72|bitwarden) - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" - local docker_passwd="" - local app_size="1" - docker_app - ;; + local docker_name="bitwarden" + local docker_img="vaultwarden/server" + local docker_port=8072 + docker_rum() { - 71) - local docker_name="navidrome" - local docker_img="deluan/navidrome:latest" - local docker_port=8071 + docker run -d \ + --name bitwarden \ + --restart always \ + -p ${docker_port}:80 \ + -v /home/docker/bitwarden/data:/data \ + vaultwarden/server - docker_rum() { + } - docker run -d \ - --name navidrome \ - --restart=unless-stopped \ - --user $(id -u):$(id -g) \ - -v /home/docker/navidrome/music:/music \ - -v /home/docker/navidrome/data:/data \ - -p ${docker_port}:4533 \ - -e ND_LOGLEVEL=info \ - deluan/navidrome:latest + local docker_describe="一个你可以控制数据的密码管理器" + local docker_url="官网介绍: https://bitwarden.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + ;; - 72) - local docker_name="bitwarden" - local docker_img="vaultwarden/server" - local docker_port=8072 + 73|libretv) - docker_rum() { + local docker_name="libretv" + local docker_img="bestzwei/libretv:latest" + local docker_port=8073 - docker run -d \ - --name bitwarden \ - --restart always \ - -p ${docker_port}:80 \ - -v /home/docker/bitwarden/data:/data \ - vaultwarden/server + docker_rum() { - } + read -e -p "Set the LibreTV login password:" app_passwd - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name libretv \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -e PASSWORD=${app_passwd} \ + bestzwei/libretv:latest + } - ;; + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 73) + 74|moontv) - local docker_name="libretv" - local docker_img="bestzwei/libretv:latest" - local docker_port=8073 + local docker_name="moontv" + local docker_img="ghcr.io/senshinya/moontv:latest" + local docker_port=8074 - docker_rum() { + docker_rum() { - read -e -p "Set the LibreTV login password:" app_passwd + read -e -p "Set the MoonTV login password:" app_passwd docker run -d \ - --name libretv \ + --name moontv \ --restart unless-stopped \ - -p ${docker_port}:8080 \ + -p ${docker_port}:3000 \ -e PASSWORD=${app_passwd} \ - bestzwei/libretv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; - - - 74) - - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - - docker_rum() { - - read -e -p "Set the MoonTV login password:" app_passwd - - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; + ghcr.io/senshinya/moontv:latest + } - 75) + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/senshinya/MoonTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="melody" - local docker_img="foamzou/melody:latest" - local docker_port=8075 + ;; - docker_rum() { - docker run -d \ - --name melody \ - --restart unless-stopped \ - -p ${docker_port}:5566 \ - -v /home/docker/melody/.profile:/app/backend/.profile \ - foamzou/melody:latest + 75|melody) + local docker_name="melody" + local docker_img="foamzou/melody:latest" + local docker_port=8075 - } + docker_rum() { - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name melody \ + --restart unless-stopped \ + -p ${docker_port}:5566 \ + -v /home/docker/melody/.profile:/app/backend/.profile \ + foamzou/melody:latest - ;; - + } - 76) + local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" + local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="dosgame" - local docker_img="oldiy/dosgame-web-docker:latest" - local docker_port=8076 - docker_rum() { - docker run -d \ - --name dosgame \ - --restart unless-stopped \ - -p ${docker_port}:262 \ - oldiy/dosgame-web-docker:latest + ;; - } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + 76|dosgame) + local docker_name="dosgame" + local docker_img="oldiy/dosgame-web-docker:latest" + local docker_port=8076 - ;; + docker_rum() { + docker run -d \ + --name dosgame \ + --restart unless-stopped \ + -p ${docker_port}:262 \ + oldiy/dosgame-web-docker:latest - 77) + } - local docker_name="xunlei" - local docker_img="cnk3x/xunlei" - local docker_port=8077 + local docker_describe="是一个中文DOS游戏合集网站" + local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app - docker_rum() { - read -e -p "set up${docker_name}Login username:" app_use - read -e -p "set up${docker_name}Login password:" app_passwd + ;; - docker run -d \ - --name xunlei \ - --restart unless-stopped \ - --privileged \ - -e XL_DASHBOARD_USERNAME=${app_use} \ - -e XL_DASHBOARD_PASSWORD=${app_passwd} \ - -v /home/docker/xunlei/data:/xunlei/data \ - -v /home/docker/xunlei/downloads:/xunlei/downloads \ - -p ${docker_port}:2345 \ - cnk3x/xunlei + 77|xunlei) - } + local docker_name="xunlei" + local docker_img="cnk3x/xunlei" + local docker_port=8077 - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { - ;; + read -e -p "set up${docker_name}Login username:" app_use + read -e -p "set up${docker_name}Login password:" app_passwd + docker run -d \ + --name xunlei \ + --restart unless-stopped \ + --privileged \ + -e XL_DASHBOARD_USERNAME=${app_use} \ + -e XL_DASHBOARD_PASSWORD=${app_passwd} \ + -v /home/docker/xunlei/data:/xunlei/data \ + -v /home/docker/xunlei/downloads:/xunlei/downloads \ + -p ${docker_port}:2345 \ + cnk3x/xunlei + } - 78) + local docker_describe="迅雷你的离线高速BT磁力下载工具" + local docker_url="官网介绍: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_passwd="" + local app_size="1" + docker_app - local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" - local docker_name="panda-wiki-nginx" - local docker_port="2443" - local app_size="2" + ;; - docker_app_install() { - bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" - } - docker_app_update() { - docker_app_install - } + 78|PandaWiki) - docker_app_uninstall() { - docker_app_install - } + local app_name="PandaWiki" + local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" + local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local docker_name="panda-wiki-nginx" + local docker_port="2443" + local app_size="2" - docker_app_plus - ;; + docker_app_install() { + bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" + } + docker_app_update() { + docker_app_install + } - 79) + docker_app_uninstall() { + docker_app_install + } - local docker_name="beszel" - local docker_img="henrygd/beszel" - local docker_port=8079 + docker_app_plus + ;; - docker_rum() { - mkdir -p /home/docker/beszel && \ - docker run -d \ - --name beszel \ - --restart=unless-stopped \ - -v /home/docker/beszel:/beszel_data \ - -p ${docker_port}:8090 \ - henrygd/beszel - } + 79|beszel) - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_name="beszel" + local docker_img="henrygd/beszel" + local docker_port=8079 - ;; + docker_rum() { + mkdir -p /home/docker/beszel && \ + docker run -d \ + --name beszel \ + --restart=unless-stopped \ + -v /home/docker/beszel:/beszel_data \ + -p ${docker_port}:8090 \ + henrygd/beszel - 80) - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden-linkwarden-1" - local docker_port="8080" - local app_size="3" + } - docker_app_install() { - install git openssl - mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + local docker_describe="Beszel轻量易用的服务器监控" + local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - # Download the official docker-compose and env files - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + ;; - # Generate random keys and passwords - local ADMIN_EMAIL="admin@example.com" - local ADMIN_PASSWORD=$(openssl rand -hex 8) - sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env - sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env - sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env - sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + 80|linkwarden) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden" + local docker_port="8080" + local app_size="3" - # Add administrator account information - echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env - echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + # Download the official docker-compose and env files + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # Start the container - docker compose up -d + # Generate random keys and passwords + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) - clear - echo "Installed" - check_docker_app_ip + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - } + # Add administrator account information + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env - docker_app_update() { - cd /home/docker/linkwarden && docker compose down --rmi all - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - - # Keep the original variable - source .env - mv .env.new .env - echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env - echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env - echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env - echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env - echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env - echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - - docker compose up -d - } + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - docker_app_uninstall() { - cd /home/docker/linkwarden && docker compose down --rmi all - rm -rf /home/docker/linkwarden - echo "The app has been uninstalled" - } + # Start the container + docker compose up -d - docker_app_plus + clear + echo "Installed" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # Keep the original variable + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "The app has been uninstalled" + } + + docker_app_plus - ;; + ;; - 81) - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" - local docker_name="jitsi" - local docker_port="8081" - local app_size="3" + 81|jitsi) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" - docker_app_install() { + docker_app_install() { - add_yuming - mkdir -p /home/docker/jitsi && cd /home/docker/jitsi - wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) - unzip "$(ls -t | head -n 1)" - cd "$(ls -dt */ | head -n 1)" - cp env.example .env - ./gen-passwords.sh - mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} - sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env - sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env - docker compose up -d + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - } + } - docker_app_update() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - docker compose up -d + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d - } + } - docker_app_uninstall() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - rm -rf /home/docker/jitsi - echo "The app has been uninstalled" - } + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "The app has been uninstalled" + } - docker_app_plus + docker_app_plus - ;; + ;; - 82) + 82|gpt-load) - local docker_name="gpt-load" - local docker_img="tbphp/gpt-load:latest" - local docker_port=8082 + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/gpt-load && \ - docker run -d --name gpt-load \ - -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ - -v "/home/docker/gpt-load/data":/app/data \ - tbphp/gpt-load:latest + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest - } + } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 83) + 83|komari) - local docker_name="komari" - local docker_img="ghcr.io/komari-monitor/komari:latest" - local docker_port=8083 + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/komari && \ - docker run -d \ - --name komari \ - -p ${docker_port}:25774 \ - -v /home/docker/komari:/app/data \ - -e ADMIN_USERNAME=admin \ - -e ADMIN_PASSWORD=1212156 \ - --restart=always \ - ghcr.io/komari-monitor/komari:latest + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest - } + } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 84) + 84|wallos) - local docker_name="wallos" - local docker_img="bellamy/wallos:latest" - local docker_port=8084 + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/wallos && \ - docker run -d --name wallos \ - -v /home/docker/wallos/db:/var/www/html/db \ - -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ - -e TZ=UTC \ - -p ${docker_port}:80 \ - --restart unless-stopped \ - bellamy/wallos:latest + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest - } + } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 85) + 85|immich) - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" - local docker_port="8085" - local app_size="3" + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" - docker_app_install() { - install git openssl - mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} - wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml - docker compose up -d + docker compose up -d - clear - echo "Installed" - check_docker_app_ip + clear + echo "Installed" + check_docker_app_ip - } + } - docker_app_update() { - cd /home/docker/${docker_name} && docker compose down --rmi all - docker_app_install - } + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } - docker_app_uninstall() { - cd /home/docker/${docker_name} && docker compose down --rmi all - rm -rf /home/docker/${docker_name} - echo "The app has been uninstalled" - } + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "The app has been uninstalled" + } - docker_app_plus + docker_app_plus - ;; + ;; - 86) + 86|jellyfin) - local docker_name="jellyfin" - local docker_img="jellyfin/jellyfin" - local docker_port=8086 + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/jellyfin/media - chmod -R 777 /home/docker/jellyfin + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin - docker run -d \ - --name jellyfin \ - --user root \ - --volume /home/docker/jellyfin/config:/config \ - --volume /home/docker/jellyfin/cache:/cache \ - --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ - -p ${docker_port}:8096 \ - -p 7359:7359/udp \ - --restart=unless-stopped \ - jellyfin/jellyfin + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin - } + } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 87) + 87|synctv) - local docker_name="synctv" - local docker_img="synctvorg/synctv" - local docker_port=8087 + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 - docker_rum() { + docker_rum() { - docker run -d \ - --name synctv \ - -v /home/docker/synctv:/root/.synctv \ - -p ${docker_port}:8080 \ - --restart=always \ - synctvorg/synctv + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv - } + } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 88) + 88|owncast) - local docker_name="owncast" - local docker_img="owncast/owncast:latest" - local docker_port=8088 + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 - docker_rum() { + docker_rum() { - docker run -d \ - --name owncast \ - -p ${docker_port}:8080 \ - -p 1935:1935 \ - -v /home/docker/owncast/data:/app/data \ - --restart=always \ - owncast/owncast:latest + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest - } + } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" - local app_size="1" - docker_app + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app - ;; + ;; - 0) - kejilion - ;; - *) - echo "Invalid input!" - ;; - esac - break_end + 0) + kejilion + ;; + *) + ;; + esac + break_end + sub_choice="" - done +done } @@ -11957,7 +11964,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -12274,8 +12281,7 @@ EOF 39) clear - send_stats "Command line history" - bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + linux_fav ;; 41) @@ -13091,8 +13097,9 @@ echo "Open port k dkdk 8080 |k Open port 8080" echo "Close port k gbdk 7800 |k Close port 7800" echo "Release IP k fxip 127.0.0.0/8 |k Release IP 127.0.0.0/8" echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" - - +echo "Command favorites k fav | k command favorites" +echo "App Market Management k app" +echo "Application number quick management k app 26 | k app 1panel | k app npm" } @@ -13224,6 +13231,10 @@ else iptables_panel ;; + 命令收藏夹|fav) + linux_fav + ;; + status|状态) shift send_stats "Software status view" @@ -13303,8 +13314,17 @@ else fi ;; + + app) + shift + send_stats "Apply $@" + linux_panel "$@" + ;; + + *) k_info ;; esac fi + diff --git a/jp/kejilion.sh b/jp/kejilion.sh index ad6c57515..6c0e6868c 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.7" +sh_v="4.0.8" gl_hui='\e[37m' @@ -285,7 +285,7 @@ restart() { if [ $? -eq 0 ]; then echo "$1サービスは再開されました。" else - echo "错误:重启 $1サービスは失敗しました。" + echo "エラー:再起動$1サービスは失敗しました。" fi } @@ -5648,7 +5648,10 @@ linux_trash() { done } - +linux_fav() { +send_stats "コマンドのお気に入り" +bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) +} # バックアップを作成します create_backup() { @@ -6359,7 +6362,7 @@ schedule_task() { # 同じタスクが既に存在するかどうかを確認してください if crontab -l | grep -q "k rsync_run $num"; then - echo "エラー:このタスクのタイミング同期はすでに存在しています!" + echo "错误: 该任务的定时同步已存在!" return fi @@ -8449,10 +8452,12 @@ linux_ldnmp() { linux_panel() { +local sub_choice="$1" +while true; do - while true; do + if [ -z "$sub_choice" ]; then clear echo -e "アプリケーション市場" echo -e "${gl_kjlan}------------------------" @@ -8524,2527 +8529,2529 @@ linux_panel() { echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択を入力してください:" sub_choice + fi - case $sub_choice in - 1) + case $sub_choice in + 1|bt) - local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" - local panelurl="https://www.bt.cn/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 2) + ;; + 2|aapanel) - local lujing="[ -d "/www/server/panel" ]" - local panelname="aapanel" - local panelurl="https://www.aapanel.com/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 3) + ;; + 3|1panel) - local lujing="command -v 1pctl" - local panelname="1Panel" - local panelurl="https://1panel.cn/" + local lujing="command -v 1pctl" + local panelname="1Panel" + local panelurl="https://1panel.cn/" - panel_app_install() { - install bash - bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" - } + panel_app_install() { + install bash + bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" + } - panel_app_manage() { - 1pctl user-info - 1pctl update password - } + panel_app_manage() { + 1pctl user-info + 1pctl update password + } - panel_app_uninstall() { - 1pctl uninstall - } + panel_app_uninstall() { + 1pctl uninstall + } - install_panel + install_panel - ;; - 4) + ;; + 4|npm) - local docker_name="npm" - local docker_img="jc21/nginx-proxy-manager:latest" - local docker_port=81 + local docker_name="npm" + local docker_img="jc21/nginx-proxy-manager:latest" + local docker_port=81 - docker_rum() { + 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 + 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="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" - local app_size="1" + local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" + local docker_url="官网介绍: https://nginxproxymanager.com/" + local docker_use="echo \"初始用户名: admin@example.com\"" + local docker_passwd="echo \"初始密码: changeme\"" + local app_size="1" - docker_app + docker_app - ;; + ;; - 5) + 5|openlist) - local docker_name="openlist" - local docker_img="openlistteam/openlist:latest-aria2" - local docker_port=5244 + local docker_name="openlist" + local docker_img="openlistteam/openlist:latest-aria2" + local docker_port=5244 - docker_rum() { + docker_rum() { - docker run -d \ - --restart=always \ - -v /home/docker/openlist:/opt/openlist/data \ - -p ${docker_port}:5244 \ - -e PUID=0 \ - -e PGID=0 \ - -e UMASK=022 \ - --name="openlist" \ - openlistteam/openlist:latest-aria2 + docker run -d \ + --restart=always \ + -v /home/docker/openlist:/opt/openlist/data \ + -p ${docker_port}:5244 \ + -e PUID=0 \ + -e PGID=0 \ + -e UMASK=022 \ + --name="openlist" \ + openlistteam/openlist:latest-aria2 - } + } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" + local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_use="docker exec -it openlist ./openlist admin random" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 6) + 6|webtop-ubuntu) - local docker_name="webtop-ubuntu" - local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" - local docker_port=3006 + local docker_name="webtop-ubuntu" + local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" + local docker_port=3006 - docker_rum() { + 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 \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ - -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 + 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 \ + -e CUSTOM_USER=ubuntu-abc \ + -e PASSWORD=ubuntuABC123 \ + -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的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" - local app_size="2" - docker_app + local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: ubuntu-abc\"" + local docker_passwd="echo \"密码: ubuntuABC123\"" + local app_size="2" + docker_app - ;; - 7) + ;; + 7|nezha) + clear + send_stats "ネザを作る" + local docker_name="nezha-dashboard" + local docker_port=8008 + while true; do + check_docker_app + check_docker_image_update $docker_name clear - send_stats "ネザを作る" - local docker_name="nezha-dashboard" - local docker_port=8008 - while true; do - check_docker_app - check_docker_image_update $docker_name - clear - echo -e "Nezhaの監視$check_docker $update_status" - echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" - echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + echo -e "Nezhaの監視$check_docker $update_status" + echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" + echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) + check_docker_app_ip + fi + echo "" + echo "------------------------" + echo "1。使用します" + 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 - fi - echo "" - echo "------------------------" - echo "1。使用します" - 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 - ;; + *) + break + ;; - *) - break - ;; + esac + break_end + done + ;; - esac - break_end - done - ;; + 8|qb) + + 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 - 8) + } - local docker_name="qbittorrent" - local docker_img="lscr.io/linuxserver/qbittorrent:latest" - local docker_port=8081 + 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 - 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 + 9|mail) + 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はオープンソースメールサーバーソリューションです。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" - 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 + 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 ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + yuming=$(cat /home/docker/mail.txt) + echo "アクセスアドレス:" + echo "https://$yuming" + fi - 9) - send_stats "郵便局を建設します" - clear - install telnet - local docker_name=“mailserver” - while true; do - check_docker_app - check_docker_image_update $docker_name + echo "------------------------" + echo "1。インストール2。更新3。アンインストール" + echo "------------------------" + echo "0。前のメニューに戻ります" + echo "------------------------" + read -e -p "あなたの選択を入力してください:" choice - clear - echo -e "郵便局サービス$check_docker $update_status" - echo "Poste.ioはオープンソースメールサーバーソリューションです。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + 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 - 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 "" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.io + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "Poste.ioがインストールされています" + echo "------------------------" + echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "https://$yuming" + echo "" + + ;; - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + 2) + docker rm -f mailserver + docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) - echo "アクセスアドレス:" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "Poste.ioがインストールされています" + echo "------------------------" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" - fi + echo "" + ;; + 3) + docker rm -f mailserver + docker rmi -f analogic/poste.io + rm /home/docker/mail.txt + rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "アプリはアンインストールされています" + ;; - echo "------------------------" - echo "1。インストール2。更新3。アンインストール" - echo "------------------------" - echo "0。前のメニューに戻ります" - echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + *) + break + ;; - 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 "" + esac + break_end + done - 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 + 10|rocketchat) - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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" - clear - echo "Poste.ioがインストールされています" - echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" - echo "https://$yuming" - echo "" + 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 + } - 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 - - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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 + } - 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 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" - ;; + 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 "アプリはアンインストールされています" + } - *) - break - ;; + docker_app_plus + ;; - esac - break_end - done - ;; - 10) + 11|zentao) + local docker_name="zentao-server" + local docker_img="idoop/zentao:latest" + local docker_port=82 - 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_rum() { - 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 - ;; + 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 + } - 11) - local docker_name="zentao-server" - local docker_img="idoop/zentao:latest" - local docker_port=82 + 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 + ;; - docker_rum() { + 12|qinglong) + local docker_name="qinglong" + local docker_img="whyour/qinglong:latest" + local docker_port=5700 + 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 + 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="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" - local app_size="2" - docker_app + } - ;; + local docker_describe="青龙面板是一个定时任务管理平台" + local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 12) - local docker_name="qinglong" - local docker_img="whyour/qinglong:latest" - local docker_port=5700 + ;; + 13|cloudreve) + + 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_rum() { + docker_app_update() { + cd /home/docker/cloud/ && docker compose down --rmi all + cd /home/docker/cloud/ && docker compose up -d + } - docker run -d \ - -v /home/docker/qinglong/data:/ql/data \ - -p ${docker_port}:5700 \ - --name qinglong \ - --hostname qinglong \ - --restart unless-stopped \ - whyour/qinglong:latest + docker_app_uninstall() { + cd /home/docker/cloud/ && docker compose down --rmi all + rm -rf /home/docker/cloud + echo "アプリはアンインストールされています" + } - } + docker_app_plus + ;; - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 14|easyimage) + local docker_name="easyimage" + local docker_img="ddsderek/easyimage:latest" + local docker_port=8014 + 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 - ;; - 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 - } + 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|emby) + local docker_name="emby" + local docker_img="linuxserver/emby:latest" + local docker_port=8015 - docker_app_update() { - cd /home/docker/cloud/ && docker compose down --rmi all - cd /home/docker/cloud/ && docker compose up -d - } + 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 - 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() { + local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" + local docker_url="官网介绍: https://emby.media/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 16|looking) + local docker_name="looking-glass" + local docker_img="wikihostinc/looking-glass-server" + local docker_port=8016 - } - 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 - ;; + docker_rum() { - 15) - local docker_name="emby" - local docker_img="linuxserver/emby:latest" - local docker_port=8096 + docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - 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="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|adguardhome) + local docker_name="adguardhome" + local docker_img="adguard/adguardhome" + local docker_port=8017 - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker_rum() { - 16) - local docker_name="looking-glass" - local docker_img="wikihostinc/looking-glass-server" - local docker_port=89 + 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 - docker_rum() { + } - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - } + 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 - 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 + 18|onlyoffice) - docker_rum() { + local docker_name="onlyoffice" + local docker_img="onlyoffice/documentserver" + local docker_port=8018 - 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 + 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="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 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|safeline) + send_stats "サンダープールを構築します" - 18) + local docker_name=safeline-mgt + local docker_port=9443 + while true; do + check_docker_app + clear + echo -e "サンダープールサービス$check_docker" + echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + check_docker_app_ip + fi + echo "" - local docker_name="onlyoffice" - local docker_img="onlyoffice/documentserver" - local docker_port=8082 + echo "------------------------" + echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" + echo "------------------------" + echo "0。前のメニューに戻ります" + echo "------------------------" + read -e -p "あなたの選択を入力してください:" choice - docker_rum() { + case $choice in + 1) + install_docker + check_disk_space 5 + bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "サンダープールWAFパネルがインストールされています" + check_docker_app_ip + docker exec safeline-mgt resetadmin - 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 + ;; + 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "サンダープールWAFパネルが更新されました" + check_docker_app_ip + ;; + 3) + docker exec safeline-mgt resetadmin + ;; + 4) + cd /data/safeline + docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" + echo "docker compose down && docker compose down --rmi all" + ;; + *) + break + ;; - } + esac + break_end + done - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + ;; - ;; + 20|portainer) + local docker_name="portainer" + local docker_img="portainer/portainer" + local docker_port=8020 - 19) - send_stats "サンダープールを構築します" + docker_rum() { - local docker_name=safeline-mgt - local docker_port=9443 - while true; do - check_docker_app - clear - echo -e "サンダープールサービス$check_docker" - echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then - check_docker_app_ip - fi - echo "" + 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 - 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)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "サンダープールWAFパネルがインストールされています" - check_docker_app_ip - docker exec safeline-mgt resetadmin - ;; + local docker_describe="portainer是一个轻量级的docker容器管理面板" + local docker_url="官网介绍: https://www.portainer.io/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "サンダープールWAFパネルが更新されました" - check_docker_app_ip - ;; - 3) - docker exec safeline-mgt resetadmin - ;; - 4) - cd /data/safeline - docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" - echo "docker compose down && docker compose down --rmi all" - ;; - *) - break - ;; + ;; - esac - break_end - done + 21|vscode) + local docker_name="vscode-web" + local docker_img="codercom/code-server" + local docker_port=8021 - ;; - 20) - local docker_name="portainer" - local docker_img="portainer/portainer" - local docker_port=9050 + docker_rum() { - 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 - 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="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 + ;; - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 22|uptime-kuma) + local docker_name="uptime-kuma" + local docker_img="louislam/uptime-kuma:latest" + local docker_port=8022 - 21) - local docker_name="vscode-web" - local docker_img="codercom/code-server" - local docker_port=8180 + docker_rum() { - 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 - 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="Uptime Kuma 易于使用的自托管监控工具" + local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 23|memos) + local docker_name="memos" + local docker_img="ghcr.io/usememos/memos:latest" + local docker_port=8023 + docker_rum() { - 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 - 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="Memos是一款轻量级、自托管的备忘录中心" + local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 24|webtop) + local docker_name="webtop" + local docker_img="lscr.io/linuxserver/webtop:latest" + local docker_port=8024 + + 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 CUSTOM_USER=webtop-abc \ + -e PASSWORD=webtopABC123 \ + -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="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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: webtop-abc\"" + local docker_passwd="echo \"密码: webtopABC123\"" + local app_size="2" + docker_app + ;; - } + 25|nextcloud) + local docker_name="nextcloud" + local docker_img="nextcloud:latest" + local docker_port=8025 + local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - 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 - ;; + docker_rum() { - 24) - local docker_name="webtop" - local docker_img="lscr.io/linuxserver/webtop:latest" - local docker_port=3083 + 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 - docker_rum() { + } + 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 + ;; - 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 CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ - -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 + 26|qd) + local docker_name="qd" + local docker_img="qdtoday/qd:latest" + local docker_port=8026 + 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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" - local app_size="2" - docker_app - ;; + 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 + ;; - 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) + 27|dockge) + local docker_name="dockge" + local docker_img="louislam/dockge:latest" + local docker_port=8027 - docker_rum() { + 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 + 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="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" - local docker_passwd="" - local app_size="3" - docker_app - ;; + 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 + ;; - 26) - local docker_name="qd" - local docker_img="qdtoday/qd:latest" - local docker_port=8923 + 28|speedtest) + local docker_name="speedtest" + local docker_img="ghcr.io/librespeed/speedtest" + local docker_port=8028 - docker_rum() { + docker_rum() { - docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd + docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest - } + } - 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 + 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 + ;; - docker_rum() { + 29|searxng) + local docker_name="searxng" + local docker_img="searxng/searxng" + local docker_port=8029 - 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 + docker_rum() { - } + docker run -d \ + --name searxng \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v "/home/docker/searxng:/etc/searxng" \ + searxng/searxng - 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 + 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 + ;; - docker_rum() { + 30|photoprism) + local docker_name="photoprism" + local docker_img="photoprism/photoprism:latest" + local docker_port=8030 + 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 - 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 - ;; + 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 + ;; - 29) - local docker_name="searxng" - local docker_img="searxng/searxng" - local docker_port=8029 - docker_rum() { + 31|s-pdf) + local docker_name="s-pdf" + local docker_img="frooodle/s-pdf:latest" + local docker_port=8031 - docker run -d \ - --name searxng \ - --restart unless-stopped \ - -p ${docker_port}:8080 \ - -v "/home/docker/searxng:/etc/searxng" \ - searxng/searxng + 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="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + ;; - 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) + 32|drawio) + local docker_name="drawio" + local docker_img="jgraph/drawio" + local docker_port=8032 - docker_rum() { + 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 + docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio - } + } - 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 - ;; + local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" + local docker_url="官网介绍: https://www.drawio.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 33|sun-panel) + local docker_name="sun-panel" + local docker_img="hslr/sun-panel" + local docker_port=8033 - 31) - local docker_name="s-pdf" - local docker_img="frooodle/s-pdf:latest" - local docker_port=8020 + docker_rum() { - 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 - 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 + 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 + ;; - docker_rum() { + 34|pingvin-share) + local docker_name="pingvin-share" + local docker_img="stonith404/pingvin-share" + local docker_port=8034 - docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio + 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 + ;; - 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 + 35|moments) + local docker_name="moments" + local docker_img="kingwrcy/moments:latest" + local docker_port=8035 - docker_rum() { + 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 + 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="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 - ;; + 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 + ;; - 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 - } + 36|lobe-chat) + local docker_name="lobe-chat" + local docker_img="lobehub/lobe-chat:latest" + local docker_port=8036 - 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 - ;; + docker_rum() { + docker run -d -p ${docker_port}:3210 \ + --name lobe-chat \ + --restart=always \ + lobehub/lobe-chat + } - 35) - local docker_name="moments" - local docker_img="kingwrcy/moments:latest" - local docker_port=8035 + 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 + ;; - docker_rum() { + 37|myip) + local docker_name="myip" + local docker_img="jason5ng32/myip:latest" + local docker_port=8037 - 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 - } + docker_rum() { + docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip: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 - ;; + } + 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 + ;; - 36) - local docker_name="lobe-chat" - local docker_img="lobehub/lobe-chat:latest" - local docker_port=8036 + 38|xiaoya) + send_stats "Xiaoyaファミリーバケット" + clear + install_docker + check_disk_space 1 + bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" + ;; - docker_rum() { + 39|bililive) - docker run -d -p ${docker_port}:3210 \ - --name lobe-chat \ - --restart=always \ - lobehub/lobe-chat - } + 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_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 - ;; + local docker_name="bililive-go" + local docker_img="chigusa/bililive-go" + local docker_port=8039 - 37) - local docker_name="myip" - local docker_img="jason5ng32/myip:latest" - local docker_port=8037 + docker_rum() { - 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 - docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest + } - } + 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|webssh) + 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="是一个多功能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 - ;; + 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 + ;; - 38) - send_stats "Xiaoyaファミリーバケット" - clear - install_docker - check_disk_space 1 - bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" - ;; + 41|haozi) - 39) + local lujing="[ -d "/www/server/panel" ]" + local panelname="耗子面板" + local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" - 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 + 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 ~ + } - local docker_name="bililive-go" - local docker_img="chigusa/bililive-go" - local docker_port=8039 + panel_app_manage() { + panel-cli + } - docker_rum() { + 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 ~ + } - 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 + install_panel - } + ;; - 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 - } + 42|nexterm) + local docker_name="nexterm" + local docker_img="germannewsmaker/nexterm:latest" + local docker_port=8042 - 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 - ;; + docker_rum() { - 41) + docker run -d \ + --name nexterm \ + -p ${docker_port}:6989 \ + -v /home/docker/nexterm:/app/data \ + --restart unless-stopped \ + germannewsmaker/nexterm:latest - 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 ~ - } + 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 + ;; - panel_app_manage() { - panel-cli - } + 43|hbbs) + local docker_name="hbbs" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - 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 ~ - } + docker_rum() { - install_panel + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs - ;; + } - 42) - local docker_name="nexterm" - local docker_img="germannewsmaker/nexterm:latest" - local docker_port=8042 + 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 + ;; - docker_rum() { + 44|hbbr) + local docker_name="hbbr" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - docker run -d \ - --name nexterm \ - -p ${docker_port}:6989 \ - -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ - germannewsmaker/nexterm:latest + 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="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 + 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 + ;; - docker_rum() { + 45|registry) + local docker_name="registry" + local docker_img="registry:2" + local docker_port=8045 - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + 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="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 - ;; + 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 + ;; - 44) - local docker_name="hbbr" - local docker_img="rustdesk/rustdesk-server" - local docker_port=0000 + 46|ghproxy) + local docker_name="ghproxy" + local docker_img="wjqserver/ghproxy:latest" + local docker_port=8046 - docker_rum() { + docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest - } + } - 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 - ;; + 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 + ;; - 45) - local docker_name="registry" - local docker_img="registry:2" - local docker_port=8045 + 47|prometheus|grafana) - docker_rum() { + 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 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 + 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 + } - 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 - ;; + 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 - 46) - local docker_name="ghproxy" - local docker_img="wjqserver/ghproxy:latest" - local docker_port=8046 + rm -rf /home/docker/monitoring + echo "アプリはアンインストールされています" + } - docker_rum() { + docker_app_plus + ;; - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + 48|node-exporter) + local docker_name="node-exporter" + local docker_img="prom/node-exporter" + local docker_port=8048 - } + docker_rum() { - 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 - ;; + docker run -d \ + --name=node-exporter \ + -p ${docker_port}:9100 \ + --restart unless-stopped \ + prom/node-exporter - 47) + } + local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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" + 49|cadvisor) + 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 - 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 + local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - rm -rf /home/docker/monitoring - echo "アプリはアンインストールされています" - } - docker_app_plus - ;; + 50|changedetection) + local docker_name="changedetection" + local docker_img="dgtlmoon/changedetection.io:latest" + local docker_port=8050 - 48) - local docker_name="node-exporter" - local docker_img="prom/node-exporter" - local docker_port=8048 + docker_rum() { - docker_rum() { + docker run -d --restart always -p ${docker_port}:5000 \ + -v /home/docker/datastore:/datastore \ + --name changedetection dgtlmoon/changedetection.io:latest - 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/dgtlmoon/changedetection.io" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 51|pve) + clear + send_stats "PVEチキン" + 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 + ;; - 49) - local docker_name="cadvisor" - local docker_img="gcr.io/cadvisor/cadvisor:latest" - local docker_port=8049 - docker_rum() { + 52|dpanel) + local docker_name="dpanel" + local docker_img="dpanel/dpanel:lite" + local docker_port=8052 - 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 + 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="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + } + 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 + ;; - 50) - local docker_name="changedetection" - local docker_img="dgtlmoon/changedetection.io:latest" - local docker_port=8050 + 53|llama3) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - docker_rum() { + docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ - -v /home/docker/datastore:/datastore \ - --name changedetection dgtlmoon/changedetection.io:latest + 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="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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|amh) - 51) - clear - send_stats "PVEチキン" - 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 - ;; + 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 + } - 52) - local docker_name="dpanel" - local docker_img="dpanel/dpanel:lite" - local docker_port=8052 + panel_app_manage() { + panel_app_install + } - docker_rum() { + panel_app_uninstall() { + panel_app_install + } - 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 + install_panel + ;; - } - 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 - ;; + 55|frps) + frps_panel + ;; - 53) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 56|frpc) + frpc_panel + ;; - docker_rum() { + 57|deepseek) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - 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 + 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 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 + ;; - 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 - } + 58|dify) + 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" - panel_app_manage() { - panel_app_install - } + 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 - panel_app_uninstall() { - panel_app_install - } + docker compose up -d + clear + echo "インストール" + check_docker_app_ip + } - install_panel - ;; + 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 "アプリはアンインストールされています" + } - 55) - frps_panel - ;; + docker_app_plus - 56) - frpc_panel - ;; + ;; - 57) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 59|new-api) + 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_rum() { + 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 - 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 + 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 - } - 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 - ;; + 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 - 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 compose up -d + clear + echo "インストール" + check_docker_app_ip - 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_uninstall() { + cd /home/docker/new-api/ && docker compose down --rmi all + rm -rf /home/docker/new-api + echo "アプリはアンインストールされています" + } - docker_app_plus + 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 + 60|jms) - 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 + 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 "初期ユーザー名:admin" + echo "最初のパスワード:changeme" + } - 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_update() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh upgrade + echo "アプリが更新されました" + } - docker_app_uninstall() { - cd /home/docker/new-api/ && docker compose down --rmi all - rm -rf /home/docker/new-api - echo "アプリはアンインストールされています" - } - docker_app_plus + docker_app_uninstall() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh uninstall + cd /opt + rm -rf jumpserver-installer*/ + rm -rf jumpserver + echo "アプリはアンインストールされています" + } - ;; + docker_app_plus + ;; + 61|libretranslate) + local docker_name="libretranslate" + local docker_img="libretranslate/libretranslate:latest" + local docker_port=8061 - 60) + docker_rum() { - 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 run -d \ + -p ${docker_port}:5000 \ + --name libretranslate \ + libretranslate/libretranslate \ + --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru - 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 "初期ユーザー名:admin" - echo "最初のパスワード:changeme" - } + } + 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 + ;; - 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 "アプリはアンインストールされています" - } + 62|ragflow) + 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_plus - ;; + 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 + } - 61) - local docker_name="libretranslate" - local docker_img="libretranslate/libretranslate:latest" - local docker_port=8061 + 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_rum() { + docker_app_uninstall() { + cd /home/docker/ragflow/docker/ && docker compose down --rmi all + rm -rf /home/docker/ragflow + echo "アプリはアンインストールされています" + } - docker run -d \ - -p ${docker_port}:5000 \ - --name libretranslate \ - libretranslate/libretranslate \ - --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru + docker_app_plus - } + ;; - 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 - ;; + 63|open-webui) + local docker_name="open-webui" + local docker_img="ghcr.io/open-webui/open-webui:main" + local docker_port=8063 + docker_rum() { - 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 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 - 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 + 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|it-tools) + 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 + } - 63) - local docker_name="open-webui" - local docker_img="ghcr.io/open-webui/open-webui:main" - local docker_port=8063 + 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 + ;; - 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 + 65|n8n) + local docker_name="n8n" + local docker_img="docker.n8n.io/n8nio/n8n" + local docker_port=8065 - } + docker_rum() { - 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 - ;; + 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} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - 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="是一款功能强大的自动化工作流平台" + local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 - ;; + 66|yt) + yt_menu_pro + ;; - 65) - local docker_name="n8n" - local docker_img="docker.n8n.io/n8nio/n8n" - local docker_port=8065 + 67|ddns) + local docker_name="ddns-go" + local docker_img="jeessy/ddns-go" + local docker_port=8067 - docker_rum() { + docker_rum() { + docker run -d \ + --name ddns-go \ + --restart=always \ + -p ${docker_port}:9876 \ + -v /home/docker/ddns-go:/root \ + jeessy/ddns-go - 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} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" + local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } + 68|allinssl) + local docker_name="allinssl" + local docker_img="allinssl/allinssl:latest" + local docker_port=8068 - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + } - 66) - yt_menu_pro - ;; + local docker_describe="开源免费的 SSL 证书自动化管理平台" + local docker_url="官网介绍: https://allinssl.com" + local docker_use="echo \"安全入口: /allinssl\"" + local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" + local app_size="1" + docker_app + ;; - 67) - local docker_name="ddns-go" - local docker_img="jeessy/ddns-go" - local docker_port=8067 + 69|sftpgo) + local docker_name="sftpgo" + local docker_img="drakkan/sftpgo:latest" + local docker_port=8069 - docker_rum() { - docker run -d \ - --name ddns-go \ - --restart=always \ - -p ${docker_port}:9876 \ - -v /home/docker/ddns-go:/root \ - jeessy/ddns-go + docker_rum() { - } + mkdir -p /home/docker/sftpgo/data + mkdir -p /home/docker/sftpgo/config + chown -R 1000:1000 /home/docker/sftpgo - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker run -d \ + --name sftpgo \ + --restart=always \ + -p ${docker_port}:8080 \ + -p 22022:2022 \ + --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ + --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ + drakkan/sftpgo:latest + + } - 68) - local docker_name="allinssl" - local docker_img="allinssl/allinssl:latest" - local docker_port=8068 + local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" + local docker_url="官网介绍: https://sftpgo.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 \"用户名: allinssl 密码: allinssldocker\"" - local app_size="1" - docker_app - ;; + 70|astrbot) + local docker_name="astrbot" + local docker_img="soulter/astrbot:latest" + local docker_port=8070 + docker_rum() { - 69) - local docker_name="sftpgo" - local docker_img="drakkan/sftpgo:latest" - local docker_port=8069 + mkdir -p /home/docker/astrbot/data - docker_rum() { + docker run -d \ + -p ${docker_port}:6185 \ + -p 6195:6195 \ + -p 6196:6196 \ + -p 6199:6199 \ + -p 11451:11451 \ + -v /home/docker/astrbot/data:/AstrBot/data \ + --restart unless-stopped \ + --name astrbot \ + soulter/astrbot:latest - mkdir -p /home/docker/sftpgo/data - mkdir -p /home/docker/sftpgo/config - chown -R 1000:1000 /home/docker/sftpgo + } - docker run -d \ - --name sftpgo \ - --restart=always \ - -p ${docker_port}:8080 \ - -p 22022:2022 \ - --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ - --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ - drakkan/sftpgo:latest + local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官网介绍: https://astrbot.app/" + local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 71|navidrome) + local docker_name="navidrome" + local docker_img="deluan/navidrome:latest" + local docker_port=8071 + docker_rum() { - 70) - local docker_name="astrbot" - local docker_img="soulter/astrbot:latest" - local docker_port=8070 + docker run -d \ + --name navidrome \ + --restart=unless-stopped \ + --user $(id -u):$(id -g) \ + -v /home/docker/navidrome/music:/music \ + -v /home/docker/navidrome/data:/data \ + -p ${docker_port}:4533 \ + -e ND_LOGLEVEL=info \ + deluan/navidrome:latest - docker_rum() { + } - mkdir -p /home/docker/astrbot/data + local docker_describe="是一个轻量、高性能的音乐流媒体服务器" + local docker_url="官网介绍: https://www.navidrome.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - docker run -d \ - -p ${docker_port}:6185 \ - -p 6195:6195 \ - -p 6196:6196 \ - -p 6199:6199 \ - -p 11451:11451 \ - -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ - --name astrbot \ - soulter/astrbot:latest - } + 72|bitwarden) - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" - local docker_passwd="" - local app_size="1" - docker_app - ;; + local docker_name="bitwarden" + local docker_img="vaultwarden/server" + local docker_port=8072 + docker_rum() { - 71) - local docker_name="navidrome" - local docker_img="deluan/navidrome:latest" - local docker_port=8071 + docker run -d \ + --name bitwarden \ + --restart always \ + -p ${docker_port}:80 \ + -v /home/docker/bitwarden/data:/data \ + vaultwarden/server - docker_rum() { + } - docker run -d \ - --name navidrome \ - --restart=unless-stopped \ - --user $(id -u):$(id -g) \ - -v /home/docker/navidrome/music:/music \ - -v /home/docker/navidrome/data:/data \ - -p ${docker_port}:4533 \ - -e ND_LOGLEVEL=info \ - deluan/navidrome:latest + local docker_describe="一个你可以控制数据的密码管理器" + local docker_url="官网介绍: https://bitwarden.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + ;; - 72) - local docker_name="bitwarden" - local docker_img="vaultwarden/server" - local docker_port=8072 + 73|libretv) - docker_rum() { + local docker_name="libretv" + local docker_img="bestzwei/libretv:latest" + local docker_port=8073 - docker run -d \ - --name bitwarden \ - --restart always \ - -p ${docker_port}:80 \ - -v /home/docker/bitwarden/data:/data \ - vaultwarden/server + docker_rum() { - } + read -e -p "libretvログインパスワードを設定します。" app_passwd - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name libretv \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -e PASSWORD=${app_passwd} \ + bestzwei/libretv:latest + } - ;; + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 73) + 74|moontv) - local docker_name="libretv" - local docker_img="bestzwei/libretv:latest" - local docker_port=8073 + local docker_name="moontv" + local docker_img="ghcr.io/senshinya/moontv:latest" + local docker_port=8074 - docker_rum() { + docker_rum() { - read -e -p "libretvログインパスワードを設定します。" app_passwd + read -e -p "MOONTVログインパスワードを設定します。" app_passwd docker run -d \ - --name libretv \ + --name moontv \ --restart unless-stopped \ - -p ${docker_port}:8080 \ + -p ${docker_port}:3000 \ -e PASSWORD=${app_passwd} \ - bestzwei/libretv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; - - - 74) - - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - - docker_rum() { - - read -e -p "MOONTVログインパスワードを設定します。" app_passwd - - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; + ghcr.io/senshinya/moontv:latest + } - 75) + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/senshinya/MoonTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="melody" - local docker_img="foamzou/melody:latest" - local docker_port=8075 + ;; - docker_rum() { - docker run -d \ - --name melody \ - --restart unless-stopped \ - -p ${docker_port}:5566 \ - -v /home/docker/melody/.profile:/app/backend/.profile \ - foamzou/melody:latest + 75|melody) + local docker_name="melody" + local docker_img="foamzou/melody:latest" + local docker_port=8075 - } + docker_rum() { - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name melody \ + --restart unless-stopped \ + -p ${docker_port}:5566 \ + -v /home/docker/melody/.profile:/app/backend/.profile \ + foamzou/melody:latest - ;; - + } - 76) + local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" + local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="dosgame" - local docker_img="oldiy/dosgame-web-docker:latest" - local docker_port=8076 - docker_rum() { - docker run -d \ - --name dosgame \ - --restart unless-stopped \ - -p ${docker_port}:262 \ - oldiy/dosgame-web-docker:latest + ;; - } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + 76|dosgame) + local docker_name="dosgame" + local docker_img="oldiy/dosgame-web-docker:latest" + local docker_port=8076 - ;; + docker_rum() { + docker run -d \ + --name dosgame \ + --restart unless-stopped \ + -p ${docker_port}:262 \ + oldiy/dosgame-web-docker:latest - 77) + } - local docker_name="xunlei" - local docker_img="cnk3x/xunlei" - local docker_port=8077 + local docker_describe="是一个中文DOS游戏合集网站" + local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app - docker_rum() { - read -e -p "設定${docker_name}ログインユーザー名:" app_use - read -e -p "設定${docker_name}ログインパスワード:" app_passwd + ;; - docker run -d \ - --name xunlei \ - --restart unless-stopped \ - --privileged \ - -e XL_DASHBOARD_USERNAME=${app_use} \ - -e XL_DASHBOARD_PASSWORD=${app_passwd} \ - -v /home/docker/xunlei/data:/xunlei/data \ - -v /home/docker/xunlei/downloads:/xunlei/downloads \ - -p ${docker_port}:2345 \ - cnk3x/xunlei + 77|xunlei) - } + local docker_name="xunlei" + local docker_img="cnk3x/xunlei" + local docker_port=8077 - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { - ;; + read -e -p "設定${docker_name}ログインユーザー名:" app_use + read -e -p "設定${docker_name}ログインパスワード:" app_passwd + docker run -d \ + --name xunlei \ + --restart unless-stopped \ + --privileged \ + -e XL_DASHBOARD_USERNAME=${app_use} \ + -e XL_DASHBOARD_PASSWORD=${app_passwd} \ + -v /home/docker/xunlei/data:/xunlei/data \ + -v /home/docker/xunlei/downloads:/xunlei/downloads \ + -p ${docker_port}:2345 \ + cnk3x/xunlei + } - 78) + local docker_describe="迅雷你的离线高速BT磁力下载工具" + local docker_url="官网介绍: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_passwd="" + local app_size="1" + docker_app - local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" - local docker_name="panda-wiki-nginx" - local docker_port="2443" - local app_size="2" + ;; - docker_app_install() { - bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" - } - docker_app_update() { - docker_app_install - } + 78|PandaWiki) - docker_app_uninstall() { - docker_app_install - } + local app_name="PandaWiki" + local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" + local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local docker_name="panda-wiki-nginx" + local docker_port="2443" + local app_size="2" - docker_app_plus - ;; + docker_app_install() { + bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" + } + docker_app_update() { + docker_app_install + } - 79) + docker_app_uninstall() { + docker_app_install + } - local docker_name="beszel" - local docker_img="henrygd/beszel" - local docker_port=8079 + docker_app_plus + ;; - docker_rum() { - mkdir -p /home/docker/beszel && \ - docker run -d \ - --name beszel \ - --restart=unless-stopped \ - -v /home/docker/beszel:/beszel_data \ - -p ${docker_port}:8090 \ - henrygd/beszel - } + 79|beszel) - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_name="beszel" + local docker_img="henrygd/beszel" + local docker_port=8079 - ;; + docker_rum() { + mkdir -p /home/docker/beszel && \ + docker run -d \ + --name beszel \ + --restart=unless-stopped \ + -v /home/docker/beszel:/beszel_data \ + -p ${docker_port}:8090 \ + henrygd/beszel - 80) - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden-linkwarden-1" - local docker_port="8080" - local app_size="3" + } - docker_app_install() { - install git openssl - mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + local docker_describe="Beszel轻量易用的服务器监控" + local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - # 公式のDocker-ComposeおよびEnvファイルをダウンロードします - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + ;; - # ランダムキーとパスワードを生成します - local ADMIN_EMAIL="admin@example.com" - local ADMIN_PASSWORD=$(openssl rand -hex 8) - sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env - sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env - sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env - sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + 80|linkwarden) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden" + local docker_port="8080" + local app_size="3" - # 管理者アカウント情報を追加します - echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env - echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + # 公式のDocker-ComposeおよびEnvファイルをダウンロードします + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # コンテナを起動します - docker compose up -d + # ランダムキーとパスワードを生成します + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) - clear - echo "インストール" - check_docker_app_ip + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - } + # 管理者アカウント情報を追加します + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env - docker_app_update() { - cd /home/docker/linkwarden && docker compose down --rmi all - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - - # 元の変数を保持します - source .env - mv .env.new .env - echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env - echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env - echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env - echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env - echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env - echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - - docker compose up -d - } + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - docker_app_uninstall() { - cd /home/docker/linkwarden && docker compose down --rmi all - rm -rf /home/docker/linkwarden - echo "アプリはアンインストールされています" - } + # コンテナを起動します + docker compose up -d - docker_app_plus + clear + echo "インストール" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 元の変数を保持します + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "アプリはアンインストールされています" + } + + docker_app_plus - ;; + ;; - 81) - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" - local docker_name="jitsi" - local docker_port="8081" - local app_size="3" + 81|jitsi) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" - docker_app_install() { + docker_app_install() { - add_yuming - mkdir -p /home/docker/jitsi && cd /home/docker/jitsi - wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) - unzip "$(ls -t | head -n 1)" - cd "$(ls -dt */ | head -n 1)" - cp env.example .env - ./gen-passwords.sh - mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} - sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env - sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env - docker compose up -d + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - } + } - docker_app_update() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - docker compose up -d + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d - } + } - docker_app_uninstall() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - rm -rf /home/docker/jitsi - echo "アプリはアンインストールされています" - } + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "アプリはアンインストールされています" + } - docker_app_plus + docker_app_plus - ;; + ;; - 82) + 82|gpt-load) - local docker_name="gpt-load" - local docker_img="tbphp/gpt-load:latest" - local docker_port=8082 + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/gpt-load && \ - docker run -d --name gpt-load \ - -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ - -v "/home/docker/gpt-load/data":/app/data \ - tbphp/gpt-load:latest + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest - } + } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 83) + 83|komari) - local docker_name="komari" - local docker_img="ghcr.io/komari-monitor/komari:latest" - local docker_port=8083 + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/komari && \ - docker run -d \ - --name komari \ - -p ${docker_port}:25774 \ - -v /home/docker/komari:/app/data \ - -e ADMIN_USERNAME=admin \ - -e ADMIN_PASSWORD=1212156 \ - --restart=always \ - ghcr.io/komari-monitor/komari:latest + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest - } + } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 84) + 84|wallos) - local docker_name="wallos" - local docker_img="bellamy/wallos:latest" - local docker_port=8084 + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/wallos && \ - docker run -d --name wallos \ - -v /home/docker/wallos/db:/var/www/html/db \ - -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ - -e TZ=UTC \ - -p ${docker_port}:80 \ - --restart unless-stopped \ - bellamy/wallos:latest + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest - } + } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 85) + 85|immich) - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" - local docker_port="8085" - local app_size="3" + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" - docker_app_install() { - install git openssl - mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} - wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml - docker compose up -d + docker compose up -d - clear - echo "インストール" - check_docker_app_ip + clear + echo "インストール" + check_docker_app_ip - } + } - docker_app_update() { - cd /home/docker/${docker_name} && docker compose down --rmi all - docker_app_install - } + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } - docker_app_uninstall() { - cd /home/docker/${docker_name} && docker compose down --rmi all - rm -rf /home/docker/${docker_name} - echo "アプリはアンインストールされています" - } + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "アプリはアンインストールされています" + } - docker_app_plus + docker_app_plus - ;; + ;; - 86) + 86|jellyfin) - local docker_name="jellyfin" - local docker_img="jellyfin/jellyfin" - local docker_port=8086 + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/jellyfin/media - chmod -R 777 /home/docker/jellyfin + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin - docker run -d \ - --name jellyfin \ - --user root \ - --volume /home/docker/jellyfin/config:/config \ - --volume /home/docker/jellyfin/cache:/cache \ - --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ - -p ${docker_port}:8096 \ - -p 7359:7359/udp \ - --restart=unless-stopped \ - jellyfin/jellyfin + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin - } + } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 87) + 87|synctv) - local docker_name="synctv" - local docker_img="synctvorg/synctv" - local docker_port=8087 + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 - docker_rum() { + docker_rum() { - docker run -d \ - --name synctv \ - -v /home/docker/synctv:/root/.synctv \ - -p ${docker_port}:8080 \ - --restart=always \ - synctvorg/synctv + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv - } + } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 88) + 88|owncast) - local docker_name="owncast" - local docker_img="owncast/owncast:latest" - local docker_port=8088 + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 - docker_rum() { + docker_rum() { - docker run -d \ - --name owncast \ - -p ${docker_port}:8080 \ - -p 1935:1935 \ - -v /home/docker/owncast/data:/app/data \ - --restart=always \ - owncast/owncast:latest + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest - } + } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" - local app_size="1" - docker_app + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app - ;; + ;; - 0) - kejilion - ;; - *) - echo "無効な入力!" - ;; - esac - break_end + 0) + kejilion + ;; + *) + ;; + esac + break_end + sub_choice="" - done +done } @@ -11957,7 +11964,7 @@ EOF ;; 2) - read -e -p "削除する必要があるコンテンツを解析するために、キーワードを入力してください。" delhost + read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts send_stats "ローカルホストの解析と削除" ;; @@ -12158,7 +12165,7 @@ EOF echo "TG-BOTモニタリングと早期警告機能" echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" echo "しきい値に達した後、ユーザーはユーザーに送信されます" echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" read -e -p "必ず続行しますか? (y/n):" choice @@ -12274,8 +12281,7 @@ EOF 39) clear - send_stats "コマンドラインの履歴" - bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + linux_fav ;; 41) @@ -13091,8 +13097,9 @@ echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" - - +echo "コマンドお気に入りk fav | Kコマンドのお気に入り" +echo "アプリ市場管理Kアプリ" +echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" } @@ -13224,6 +13231,10 @@ else iptables_panel ;; + 命令收藏夹|fav) + linux_fav + ;; + status|状态) shift send_stats "ソフトウェアステータスビュー" @@ -13303,8 +13314,17 @@ else fi ;; + + app) + shift + send_stats "$@を適用します" + linux_panel "$@" + ;; + + *) k_info ;; esac fi + diff --git a/kr/kejilion.sh b/kr/kejilion.sh index d5967e721..9822eb994 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.7" +sh_v="4.0.8" gl_hui='\e[37m' @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -1664,7 +1664,7 @@ cf_purge_cache() { # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트합니다 + # 캐시 청소 여부를 사용자에게 프롬프트하십시오 read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer if [[ "$answer" == "y" ]]; then echo "CF 정보가 저장됩니다$CONFIG_FILE, 나중에 CF 정보를 수정할 수 있습니다" @@ -4980,7 +4980,7 @@ elrepo_install() { linux_Settings fi # 감지 된 운영 체제 정보를 인쇄합니다 - echo "감지 된 운영 체제 :$os_name $os_version" + echo "운영 체제 감지 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." @@ -5648,7 +5648,10 @@ linux_trash() { done } - +linux_fav() { +send_stats "명령 즐겨 찾기" +bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) +} # 백업을 만듭니다 create_backup() { @@ -8449,10 +8452,12 @@ linux_ldnmp() { linux_panel() { +local sub_choice="$1" +while true; do - while true; do + if [ -z "$sub_choice" ]; then clear echo -e "응용 프로그램 시장" echo -e "${gl_kjlan}------------------------" @@ -8524,2527 +8529,2529 @@ linux_panel() { echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "선택을 입력하십시오 :" sub_choice + fi - case $sub_choice in - 1) + case $sub_choice in + 1|bt) - local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" - local panelurl="https://www.bt.cn/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 2) + ;; + 2|aapanel) - local lujing="[ -d "/www/server/panel" ]" - local panelname="aapanel" - local panelurl="https://www.aapanel.com/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 3) + ;; + 3|1panel) - local lujing="command -v 1pctl" - local panelname="1Panel" - local panelurl="https://1panel.cn/" + local lujing="command -v 1pctl" + local panelname="1Panel" + local panelurl="https://1panel.cn/" - panel_app_install() { - install bash - bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" - } + panel_app_install() { + install bash + bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" + } - panel_app_manage() { - 1pctl user-info - 1pctl update password - } + panel_app_manage() { + 1pctl user-info + 1pctl update password + } - panel_app_uninstall() { - 1pctl uninstall - } + panel_app_uninstall() { + 1pctl uninstall + } - install_panel + install_panel - ;; - 4) + ;; + 4|npm) - local docker_name="npm" - local docker_img="jc21/nginx-proxy-manager:latest" - local docker_port=81 + local docker_name="npm" + local docker_img="jc21/nginx-proxy-manager:latest" + local docker_port=81 - docker_rum() { + 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 + 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="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" - local app_size="1" + local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" + local docker_url="官网介绍: https://nginxproxymanager.com/" + local docker_use="echo \"初始用户名: admin@example.com\"" + local docker_passwd="echo \"初始密码: changeme\"" + local app_size="1" - docker_app + docker_app - ;; + ;; - 5) + 5|openlist) - local docker_name="openlist" - local docker_img="openlistteam/openlist:latest-aria2" - local docker_port=5244 + local docker_name="openlist" + local docker_img="openlistteam/openlist:latest-aria2" + local docker_port=5244 - docker_rum() { + docker_rum() { - docker run -d \ - --restart=always \ - -v /home/docker/openlist:/opt/openlist/data \ - -p ${docker_port}:5244 \ - -e PUID=0 \ - -e PGID=0 \ - -e UMASK=022 \ - --name="openlist" \ - openlistteam/openlist:latest-aria2 + docker run -d \ + --restart=always \ + -v /home/docker/openlist:/opt/openlist/data \ + -p ${docker_port}:5244 \ + -e PUID=0 \ + -e PGID=0 \ + -e UMASK=022 \ + --name="openlist" \ + openlistteam/openlist:latest-aria2 - } + } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" + local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_use="docker exec -it openlist ./openlist admin random" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 6) + 6|webtop-ubuntu) - local docker_name="webtop-ubuntu" - local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" - local docker_port=3006 + local docker_name="webtop-ubuntu" + local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" + local docker_port=3006 - docker_rum() { + 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 \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ - -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 + 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 \ + -e CUSTOM_USER=ubuntu-abc \ + -e PASSWORD=ubuntuABC123 \ + -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的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" - local app_size="2" - docker_app + local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: ubuntu-abc\"" + local docker_passwd="echo \"密码: ubuntuABC123\"" + local app_size="2" + docker_app - ;; - 7) + ;; + 7|nezha) + 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 - 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 "Nezha 모니터링$check_docker $update_status" - echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" - echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + echo -e "Nezha 모니터링$check_docker $update_status" + echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" + echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) + check_docker_app_ip + fi + echo "" + echo "------------------------" + echo "1. 사용" + 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 - fi - echo "" - echo "------------------------" - echo "1. 사용" - 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 - ;; + *) + break + ;; - *) - break - ;; + esac + break_end + done + ;; - esac - break_end - done - ;; + 8|qb) + + 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 - 8) + } - local docker_name="qbittorrent" - local docker_img="lscr.io/linuxserver/qbittorrent:latest" - local docker_port=8081 + 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 - 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 + 9|mail) + 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는 오픈 소스 메일 서버 솔루션입니다." + 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 "" - 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 + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; 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 - 9) - send_stats "우체국을 건설하십시오" - clear - install telnet - local docker_name=“mailserver” - while true; do - check_docker_app - check_docker_image_update $docker_name + 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 - clear - echo -e "우체국 서비스$check_docker $update_status" - echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.io + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "Poste.io가 설치되었습니다" + echo "------------------------" + echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "https://$yuming" + echo "" - 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 ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + 2) + docker rm -f mailserver + docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) - echo "액세스 주소 :" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "Poste.io가 설치되었습니다" + echo "------------------------" + echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." echo "https://$yuming" - fi + echo "" + ;; + 3) + docker rm -f mailserver + docker rmi -f analogic/poste.io + rm /home/docker/mail.txt + rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "앱이 제거되었습니다" + ;; - echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" - echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" - echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + *) + break + ;; - 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 "" + esac + break_end + done - 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 + 10|rocketchat) - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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" - clear - echo "Poste.io가 설치되었습니다" - echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." - echo "https://$yuming" - echo "" + 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 + } - 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 - - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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 + } - 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 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" - ;; + 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 "앱이 제거되었습니다" + } - *) - break - ;; + docker_app_plus + ;; - esac - break_end - done - ;; - 10) + 11|zentao) + local docker_name="zentao-server" + local docker_img="idoop/zentao:latest" + local docker_port=82 - 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_rum() { - 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 - ;; + 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 + } - 11) - local docker_name="zentao-server" - local docker_img="idoop/zentao:latest" - local docker_port=82 + 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 + ;; - docker_rum() { + 12|qinglong) + local docker_name="qinglong" + local docker_img="whyour/qinglong:latest" + local docker_port=5700 + 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 + 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="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" - local app_size="2" - docker_app + } - ;; + local docker_describe="青龙面板是一个定时任务管理平台" + local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 12) - local docker_name="qinglong" - local docker_img="whyour/qinglong:latest" - local docker_port=5700 + ;; + 13|cloudreve) + + 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_rum() { + docker_app_update() { + cd /home/docker/cloud/ && docker compose down --rmi all + cd /home/docker/cloud/ && docker compose up -d + } - docker run -d \ - -v /home/docker/qinglong/data:/ql/data \ - -p ${docker_port}:5700 \ - --name qinglong \ - --hostname qinglong \ - --restart unless-stopped \ - whyour/qinglong:latest + docker_app_uninstall() { + cd /home/docker/cloud/ && docker compose down --rmi all + rm -rf /home/docker/cloud + echo "앱이 제거되었습니다" + } - } + docker_app_plus + ;; - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 14|easyimage) + local docker_name="easyimage" + local docker_img="ddsderek/easyimage:latest" + local docker_port=8014 + 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 - ;; - 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 - } + 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|emby) + local docker_name="emby" + local docker_img="linuxserver/emby:latest" + local docker_port=8015 - docker_app_update() { - cd /home/docker/cloud/ && docker compose down --rmi all - cd /home/docker/cloud/ && docker compose up -d - } + 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 - 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() { + local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" + local docker_url="官网介绍: https://emby.media/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 16|looking) + local docker_name="looking-glass" + local docker_img="wikihostinc/looking-glass-server" + local docker_port=8016 - } - 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 - ;; + docker_rum() { - 15) - local docker_name="emby" - local docker_img="linuxserver/emby:latest" - local docker_port=8096 + docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - 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="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|adguardhome) + local docker_name="adguardhome" + local docker_img="adguard/adguardhome" + local docker_port=8017 - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker_rum() { - 16) - local docker_name="looking-glass" - local docker_img="wikihostinc/looking-glass-server" - local docker_port=89 + 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 - docker_rum() { + } - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - } + 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 - 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 + 18|onlyoffice) - docker_rum() { + local docker_name="onlyoffice" + local docker_img="onlyoffice/documentserver" + local docker_port=8018 - 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 + 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="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 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|safeline) + send_stats "천둥 수영장을 건설하십시오" - 18) + local docker_name=safeline-mgt + local docker_port=9443 + while true; do + check_docker_app + clear + echo -e "썬더 풀 서비스$check_docker" + echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + check_docker_app_ip + fi + echo "" - local docker_name="onlyoffice" - local docker_img="onlyoffice/documentserver" - local docker_port=8082 + echo "------------------------" + echo "1. 설치 2. 업데이트 3. 비밀번호 재설정 4. 제거" + echo "------------------------" + echo "0. 이전 메뉴로 돌아갑니다" + echo "------------------------" + read -e -p "선택을 입력하십시오 :" choice - docker_rum() { + case $choice in + 1) + install_docker + check_disk_space 5 + bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "Thunder Pool WAF 패널이 설치되었습니다" + check_docker_app_ip + docker exec safeline-mgt resetadmin - 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 + ;; + 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "Thunder Pool WAF 패널이 업데이트되었습니다" + check_docker_app_ip + ;; + 3) + docker exec safeline-mgt resetadmin + ;; + 4) + cd /data/safeline + docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." + echo "docker compose down && docker compose down --rmi all" + ;; + *) + break + ;; - } + esac + break_end + done - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + ;; - ;; + 20|portainer) + local docker_name="portainer" + local docker_img="portainer/portainer" + local docker_port=8020 - 19) - send_stats "천둥 수영장을 건설하십시오" + docker_rum() { - local docker_name=safeline-mgt - local docker_port=9443 - while true; do - check_docker_app - clear - echo -e "썬더 풀 서비스$check_docker" - echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then - check_docker_app_ip - fi - echo "" + 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 - 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)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "Thunder Pool WAF 패널이 설치되었습니다" - check_docker_app_ip - docker exec safeline-mgt resetadmin - ;; + local docker_describe="portainer是一个轻量级的docker容器管理面板" + local docker_url="官网介绍: https://www.portainer.io/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "Thunder Pool WAF 패널이 업데이트되었습니다" - check_docker_app_ip - ;; - 3) - docker exec safeline-mgt resetadmin - ;; - 4) - cd /data/safeline - docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." - echo "docker compose down && docker compose down --rmi all" - ;; - *) - break - ;; + ;; - esac - break_end - done + 21|vscode) + local docker_name="vscode-web" + local docker_img="codercom/code-server" + local docker_port=8021 - ;; - 20) - local docker_name="portainer" - local docker_img="portainer/portainer" - local docker_port=9050 + docker_rum() { - 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 - 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="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 + ;; - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 22|uptime-kuma) + local docker_name="uptime-kuma" + local docker_img="louislam/uptime-kuma:latest" + local docker_port=8022 - 21) - local docker_name="vscode-web" - local docker_img="codercom/code-server" - local docker_port=8180 + docker_rum() { - 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 - 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="Uptime Kuma 易于使用的自托管监控工具" + local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 23|memos) + local docker_name="memos" + local docker_img="ghcr.io/usememos/memos:latest" + local docker_port=8023 + docker_rum() { - 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 - 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="Memos是一款轻量级、自托管的备忘录中心" + local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 24|webtop) + local docker_name="webtop" + local docker_img="lscr.io/linuxserver/webtop:latest" + local docker_port=8024 + + 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 CUSTOM_USER=webtop-abc \ + -e PASSWORD=webtopABC123 \ + -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="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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: webtop-abc\"" + local docker_passwd="echo \"密码: webtopABC123\"" + local app_size="2" + docker_app + ;; - } + 25|nextcloud) + local docker_name="nextcloud" + local docker_img="nextcloud:latest" + local docker_port=8025 + local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - 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 - ;; + docker_rum() { - 24) - local docker_name="webtop" - local docker_img="lscr.io/linuxserver/webtop:latest" - local docker_port=3083 + 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 - docker_rum() { + } + 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 + ;; - 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 CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ - -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 + 26|qd) + local docker_name="qd" + local docker_img="qdtoday/qd:latest" + local docker_port=8026 + 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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" - local app_size="2" - docker_app - ;; + 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 + ;; - 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) + 27|dockge) + local docker_name="dockge" + local docker_img="louislam/dockge:latest" + local docker_port=8027 - docker_rum() { + 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 + 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="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" - local docker_passwd="" - local app_size="3" - docker_app - ;; + 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 + ;; - 26) - local docker_name="qd" - local docker_img="qdtoday/qd:latest" - local docker_port=8923 + 28|speedtest) + local docker_name="speedtest" + local docker_img="ghcr.io/librespeed/speedtest" + local docker_port=8028 - docker_rum() { + docker_rum() { - docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd + docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest - } + } - 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 + 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 + ;; - docker_rum() { + 29|searxng) + local docker_name="searxng" + local docker_img="searxng/searxng" + local docker_port=8029 - 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 + docker_rum() { - } + docker run -d \ + --name searxng \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v "/home/docker/searxng:/etc/searxng" \ + searxng/searxng - 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 + 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 + ;; - docker_rum() { + 30|photoprism) + local docker_name="photoprism" + local docker_img="photoprism/photoprism:latest" + local docker_port=8030 + 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 - 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 - ;; + 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 + ;; - 29) - local docker_name="searxng" - local docker_img="searxng/searxng" - local docker_port=8029 - docker_rum() { + 31|s-pdf) + local docker_name="s-pdf" + local docker_img="frooodle/s-pdf:latest" + local docker_port=8031 - docker run -d \ - --name searxng \ - --restart unless-stopped \ - -p ${docker_port}:8080 \ - -v "/home/docker/searxng:/etc/searxng" \ - searxng/searxng + 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="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + ;; - 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) + 32|drawio) + local docker_name="drawio" + local docker_img="jgraph/drawio" + local docker_port=8032 - docker_rum() { + 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 + docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio - } + } - 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 - ;; + local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" + local docker_url="官网介绍: https://www.drawio.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 33|sun-panel) + local docker_name="sun-panel" + local docker_img="hslr/sun-panel" + local docker_port=8033 - 31) - local docker_name="s-pdf" - local docker_img="frooodle/s-pdf:latest" - local docker_port=8020 + docker_rum() { - 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 - 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 + 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 + ;; - docker_rum() { + 34|pingvin-share) + local docker_name="pingvin-share" + local docker_img="stonith404/pingvin-share" + local docker_port=8034 - docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio + 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 + ;; - 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 + 35|moments) + local docker_name="moments" + local docker_img="kingwrcy/moments:latest" + local docker_port=8035 - docker_rum() { + 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 + 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="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 - ;; + 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 + ;; - 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 - } + 36|lobe-chat) + local docker_name="lobe-chat" + local docker_img="lobehub/lobe-chat:latest" + local docker_port=8036 - 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 - ;; + docker_rum() { + docker run -d -p ${docker_port}:3210 \ + --name lobe-chat \ + --restart=always \ + lobehub/lobe-chat + } - 35) - local docker_name="moments" - local docker_img="kingwrcy/moments:latest" - local docker_port=8035 + 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 + ;; - docker_rum() { + 37|myip) + local docker_name="myip" + local docker_img="jason5ng32/myip:latest" + local docker_port=8037 - 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 - } + docker_rum() { + docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip: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 - ;; + } + 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 + ;; - 36) - local docker_name="lobe-chat" - local docker_img="lobehub/lobe-chat:latest" - local docker_port=8036 + 38|xiaoya) + send_stats "Xiaoya 가족 버킷" + clear + install_docker + check_disk_space 1 + bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" + ;; - docker_rum() { + 39|bililive) - docker run -d -p ${docker_port}:3210 \ - --name lobe-chat \ - --restart=always \ - lobehub/lobe-chat - } + 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_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 - ;; + local docker_name="bililive-go" + local docker_img="chigusa/bililive-go" + local docker_port=8039 - 37) - local docker_name="myip" - local docker_img="jason5ng32/myip:latest" - local docker_port=8037 + docker_rum() { - 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 - docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest + } - } + 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|webssh) + 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="是一个多功能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 - ;; + 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 + ;; - 38) - send_stats "Xiaoya 가족 버킷" - clear - install_docker - check_disk_space 1 - bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" - ;; + 41|haozi) - 39) + local lujing="[ -d "/www/server/panel" ]" + local panelname="耗子面板" + local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" - 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 + 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 ~ + } - local docker_name="bililive-go" - local docker_img="chigusa/bililive-go" - local docker_port=8039 + panel_app_manage() { + panel-cli + } - docker_rum() { + 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 ~ + } - 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 + install_panel - } + ;; - 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 - } + 42|nexterm) + local docker_name="nexterm" + local docker_img="germannewsmaker/nexterm:latest" + local docker_port=8042 - 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 - ;; + docker_rum() { - 41) + docker run -d \ + --name nexterm \ + -p ${docker_port}:6989 \ + -v /home/docker/nexterm:/app/data \ + --restart unless-stopped \ + germannewsmaker/nexterm:latest - 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 ~ - } + 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 + ;; - panel_app_manage() { - panel-cli - } + 43|hbbs) + local docker_name="hbbs" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - 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 ~ - } + docker_rum() { - install_panel + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs - ;; + } - 42) - local docker_name="nexterm" - local docker_img="germannewsmaker/nexterm:latest" - local docker_port=8042 + 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 + ;; - docker_rum() { + 44|hbbr) + local docker_name="hbbr" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - docker run -d \ - --name nexterm \ - -p ${docker_port}:6989 \ - -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ - germannewsmaker/nexterm:latest + 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="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 + 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 + ;; - docker_rum() { + 45|registry) + local docker_name="registry" + local docker_img="registry:2" + local docker_port=8045 - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + 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="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 - ;; + 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 + ;; - 44) - local docker_name="hbbr" - local docker_img="rustdesk/rustdesk-server" - local docker_port=0000 + 46|ghproxy) + local docker_name="ghproxy" + local docker_img="wjqserver/ghproxy:latest" + local docker_port=8046 - docker_rum() { + docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest - } + } - 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 - ;; + 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 + ;; - 45) - local docker_name="registry" - local docker_img="registry:2" - local docker_port=8045 + 47|prometheus|grafana) - docker_rum() { + 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 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 + 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 + } - 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 - ;; + 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 - 46) - local docker_name="ghproxy" - local docker_img="wjqserver/ghproxy:latest" - local docker_port=8046 + rm -rf /home/docker/monitoring + echo "앱이 제거되었습니다" + } - docker_rum() { + docker_app_plus + ;; - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + 48|node-exporter) + local docker_name="node-exporter" + local docker_img="prom/node-exporter" + local docker_port=8048 - } + docker_rum() { - 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 - ;; + docker run -d \ + --name=node-exporter \ + -p ${docker_port}:9100 \ + --restart unless-stopped \ + prom/node-exporter - 47) + } + local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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" + 49|cadvisor) + 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 - 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 + local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다" - } - docker_app_plus - ;; + 50|changedetection) + local docker_name="changedetection" + local docker_img="dgtlmoon/changedetection.io:latest" + local docker_port=8050 - 48) - local docker_name="node-exporter" - local docker_img="prom/node-exporter" - local docker_port=8048 + docker_rum() { - docker_rum() { + docker run -d --restart always -p ${docker_port}:5000 \ + -v /home/docker/datastore:/datastore \ + --name changedetection dgtlmoon/changedetection.io:latest - 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/dgtlmoon/changedetection.io" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 51|pve) + clear + send_stats "PVE 치킨" + 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 + ;; - 49) - local docker_name="cadvisor" - local docker_img="gcr.io/cadvisor/cadvisor:latest" - local docker_port=8049 - docker_rum() { + 52|dpanel) + local docker_name="dpanel" + local docker_img="dpanel/dpanel:lite" + local docker_port=8052 - 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 + 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="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + } + 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 + ;; - 50) - local docker_name="changedetection" - local docker_img="dgtlmoon/changedetection.io:latest" - local docker_port=8050 + 53|llama3) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - docker_rum() { + docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ - -v /home/docker/datastore:/datastore \ - --name changedetection dgtlmoon/changedetection.io:latest + 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="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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|amh) - 51) - clear - send_stats "PVE 치킨" - 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 - ;; + 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 + } - 52) - local docker_name="dpanel" - local docker_img="dpanel/dpanel:lite" - local docker_port=8052 + panel_app_manage() { + panel_app_install + } - docker_rum() { + panel_app_uninstall() { + panel_app_install + } - 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 + install_panel + ;; - } - 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 - ;; + 55|frps) + frps_panel + ;; - 53) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 56|frpc) + frpc_panel + ;; - docker_rum() { + 57|deepseek) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - 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 + 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 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 + ;; - 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 - } + 58|dify) + 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" - panel_app_manage() { - panel_app_install - } + 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 - panel_app_uninstall() { - panel_app_install - } + docker compose up -d + clear + echo "설치" + check_docker_app_ip + } - install_panel - ;; + 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 "앱이 제거되었습니다" + } - 55) - frps_panel - ;; + docker_app_plus - 56) - frpc_panel - ;; + ;; - 57) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 59|new-api) + 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_rum() { + 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 - 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 + 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 - } - 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 - ;; + 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 - 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 compose up -d + clear + echo "설치" + check_docker_app_ip - 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_uninstall() { + cd /home/docker/new-api/ && docker compose down --rmi all + rm -rf /home/docker/new-api + echo "앱이 제거되었습니다" + } - docker_app_plus + 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 + 60|jms) - 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 + 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 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_update() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh upgrade + echo "앱이 업데이트되었습니다" + } - docker_app_uninstall() { - cd /home/docker/new-api/ && docker compose down --rmi all - rm -rf /home/docker/new-api - echo "앱이 제거되었습니다" - } - docker_app_plus + docker_app_uninstall() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh uninstall + cd /opt + rm -rf jumpserver-installer*/ + rm -rf jumpserver + echo "앱이 제거되었습니다" + } - ;; + docker_app_plus + ;; + 61|libretranslate) + local docker_name="libretranslate" + local docker_img="libretranslate/libretranslate:latest" + local docker_port=8061 - 60) + docker_rum() { - 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 run -d \ + -p ${docker_port}:5000 \ + --name libretranslate \ + libretranslate/libretranslate \ + --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru - 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" - } + } + 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 + ;; - 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 "앱이 제거되었습니다" - } + 62|ragflow) + 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_plus - ;; + 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 + } - 61) - local docker_name="libretranslate" - local docker_img="libretranslate/libretranslate:latest" - local docker_port=8061 + 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_rum() { + docker_app_uninstall() { + cd /home/docker/ragflow/docker/ && docker compose down --rmi all + rm -rf /home/docker/ragflow + echo "앱이 제거되었습니다" + } - docker run -d \ - -p ${docker_port}:5000 \ - --name libretranslate \ - libretranslate/libretranslate \ - --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru + docker_app_plus - } + ;; - 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 - ;; + 63|open-webui) + local docker_name="open-webui" + local docker_img="ghcr.io/open-webui/open-webui:main" + local docker_port=8063 + docker_rum() { - 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 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 - 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 + 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|it-tools) + 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 + } - 63) - local docker_name="open-webui" - local docker_img="ghcr.io/open-webui/open-webui:main" - local docker_port=8063 + 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 + ;; - 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 + 65|n8n) + local docker_name="n8n" + local docker_img="docker.n8n.io/n8nio/n8n" + local docker_port=8065 - } + docker_rum() { - 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 - ;; + 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 - 64) - local docker_name="it-tools" - local docker_img="corentinth/it-tools:latest" - local docker_port=8064 + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - 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 - ;; + 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) + yt_menu_pro + ;; - 65) - local docker_name="n8n" - local docker_img="docker.n8n.io/n8nio/n8n" - local docker_port=8065 - docker_rum() { + 67|ddns) + local docker_name="ddns-go" + local docker_img="jeessy/ddns-go" + local docker_port=8067 - 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 + docker_rum() { + docker run -d \ + --name ddns-go \ + --restart=always \ + -p ${docker_port}:9876 \ + -v /home/docker/ddns-go:/root \ + jeessy/ddns-go - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + } - } + local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" + local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 68|allinssl) + local docker_name="allinssl" + local docker_img="allinssl/allinssl:latest" + local docker_port=8068 - 66) - yt_menu_pro - ;; + 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 \"用户名: allinssl 密码: allinssldocker\"" + local app_size="1" + docker_app + ;; - 67) - local docker_name="ddns-go" - local docker_img="jeessy/ddns-go" - local docker_port=8067 - docker_rum() { - docker run -d \ - --name ddns-go \ - --restart=always \ - -p ${docker_port}:9876 \ - -v /home/docker/ddns-go:/root \ - jeessy/ddns-go + 69|sftpgo) + local docker_name="sftpgo" + local docker_img="drakkan/sftpgo:latest" + local docker_port=8069 - } + docker_rum() { - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + mkdir -p /home/docker/sftpgo/data + mkdir -p /home/docker/sftpgo/config + chown -R 1000:1000 /home/docker/sftpgo - 68) - local docker_name="allinssl" - local docker_img="allinssl/allinssl:latest" - local docker_port=8068 + docker run -d \ + --name sftpgo \ + --restart=always \ + -p ${docker_port}:8080 \ + -p 22022:2022 \ + --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ + --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ + drakkan/sftpgo:latest - 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 \"用户名: allinssl 密码: allinssldocker\"" - local app_size="1" - docker_app - ;; + local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" + local docker_url="官网介绍: https://sftpgo.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 69) - local docker_name="sftpgo" - local docker_img="drakkan/sftpgo:latest" - local docker_port=8069 + 70|astrbot) + local docker_name="astrbot" + local docker_img="soulter/astrbot:latest" + local docker_port=8070 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/sftpgo/data - mkdir -p /home/docker/sftpgo/config - chown -R 1000:1000 /home/docker/sftpgo + mkdir -p /home/docker/astrbot/data - docker run -d \ - --name sftpgo \ - --restart=always \ - -p ${docker_port}:8080 \ - -p 22022:2022 \ - --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ - --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ - drakkan/sftpgo:latest + docker run -d \ + -p ${docker_port}:6185 \ + -p 6195:6195 \ + -p 6196:6196 \ + -p 6199:6199 \ + -p 11451:11451 \ + -v /home/docker/astrbot/data:/AstrBot/data \ + --restart unless-stopped \ + --name astrbot \ + soulter/astrbot:latest - } + } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官网介绍: https://astrbot.app/" + local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 70) - local docker_name="astrbot" - local docker_img="soulter/astrbot:latest" - local docker_port=8070 + 71|navidrome) + local docker_name="navidrome" + local docker_img="deluan/navidrome:latest" + local docker_port=8071 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/astrbot/data + docker run -d \ + --name navidrome \ + --restart=unless-stopped \ + --user $(id -u):$(id -g) \ + -v /home/docker/navidrome/music:/music \ + -v /home/docker/navidrome/data:/data \ + -p ${docker_port}:4533 \ + -e ND_LOGLEVEL=info \ + deluan/navidrome:latest - docker run -d \ - -p ${docker_port}:6185 \ - -p 6195:6195 \ - -p 6196:6196 \ - -p 6199:6199 \ - -p 11451:11451 \ - -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ - --name astrbot \ - soulter/astrbot:latest + } - } + local docker_describe="是一个轻量、高性能的音乐流媒体服务器" + local docker_url="官网介绍: https://www.navidrome.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 72|bitwarden) - 71) - local docker_name="navidrome" - local docker_img="deluan/navidrome:latest" - local docker_port=8071 + local docker_name="bitwarden" + local docker_img="vaultwarden/server" + local docker_port=8072 - docker_rum() { + docker_rum() { - docker run -d \ - --name navidrome \ - --restart=unless-stopped \ - --user $(id -u):$(id -g) \ - -v /home/docker/navidrome/music:/music \ - -v /home/docker/navidrome/data:/data \ - -p ${docker_port}:4533 \ - -e ND_LOGLEVEL=info \ - deluan/navidrome:latest + docker run -d \ + --name bitwarden \ + --restart always \ + -p ${docker_port}:80 \ + -v /home/docker/bitwarden/data:/data \ + vaultwarden/server - } + } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + local docker_describe="一个你可以控制数据的密码管理器" + local docker_url="官网介绍: https://bitwarden.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 72) + ;; - local docker_name="bitwarden" - local docker_img="vaultwarden/server" - local docker_port=8072 - docker_rum() { - docker run -d \ - --name bitwarden \ - --restart always \ - -p ${docker_port}:80 \ - -v /home/docker/bitwarden/data:/data \ - vaultwarden/server + 73|libretv) - } + local docker_name="libretv" + local docker_img="bestzwei/libretv:latest" + local docker_port=8073 - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { + read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd - ;; + docker run -d \ + --name libretv \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -e PASSWORD=${app_passwd} \ + bestzwei/libretv:latest + } + + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 73) - local docker_name="libretv" - local docker_img="bestzwei/libretv:latest" - local docker_port=8073 + 74|moontv) - docker_rum() { + local docker_name="moontv" + local docker_img="ghcr.io/senshinya/moontv:latest" + local docker_port=8074 - read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd + docker_rum() { + + read -e -p "MOONTV 로그인 비밀번호 설정 :" app_passwd docker run -d \ - --name libretv \ + --name moontv \ --restart unless-stopped \ - -p ${docker_port}:8080 \ + -p ${docker_port}:3000 \ -e PASSWORD=${app_passwd} \ - bestzwei/libretv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; - - - 74) - - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - - docker_rum() { - - read -e -p "MOONTV 로그인 비밀번호 설정 :" app_passwd - - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + ghcr.io/senshinya/moontv:latest - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; + } + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/senshinya/MoonTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 75) + ;; - local docker_name="melody" - local docker_img="foamzou/melody:latest" - local docker_port=8075 - docker_rum() { + 75|melody) - docker run -d \ - --name melody \ - --restart unless-stopped \ - -p ${docker_port}:5566 \ - -v /home/docker/melody/.profile:/app/backend/.profile \ - foamzou/melody:latest + local docker_name="melody" + local docker_img="foamzou/melody:latest" + local docker_port=8075 + docker_rum() { - } + docker run -d \ + --name melody \ + --restart unless-stopped \ + -p ${docker_port}:5566 \ + -v /home/docker/melody/.profile:/app/backend/.profile \ + foamzou/melody:latest - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + } - ;; - + local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" + local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 76) - local docker_name="dosgame" - local docker_img="oldiy/dosgame-web-docker:latest" - local docker_port=8076 + ;; - docker_rum() { - docker run -d \ - --name dosgame \ - --restart unless-stopped \ - -p ${docker_port}:262 \ - oldiy/dosgame-web-docker:latest - } + 76|dosgame) - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + local docker_name="dosgame" + local docker_img="oldiy/dosgame-web-docker:latest" + local docker_port=8076 + docker_rum() { + docker run -d \ + --name dosgame \ + --restart unless-stopped \ + -p ${docker_port}:262 \ + oldiy/dosgame-web-docker:latest - ;; + } - 77) + local docker_describe="是一个中文DOS游戏合集网站" + local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app - local docker_name="xunlei" - local docker_img="cnk3x/xunlei" - local docker_port=8077 - docker_rum() { + ;; - read -e -p "설정${docker_name}로그인 사용자 이름 :" app_use - read -e -p "설정${docker_name}로그인 비밀번호 :" app_passwd + 77|xunlei) - docker run -d \ - --name xunlei \ - --restart unless-stopped \ - --privileged \ - -e XL_DASHBOARD_USERNAME=${app_use} \ - -e XL_DASHBOARD_PASSWORD=${app_passwd} \ - -v /home/docker/xunlei/data:/xunlei/data \ - -v /home/docker/xunlei/downloads:/xunlei/downloads \ - -p ${docker_port}:2345 \ - cnk3x/xunlei + local docker_name="xunlei" + local docker_img="cnk3x/xunlei" + local docker_port=8077 - } + docker_rum() { - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" - local docker_passwd="" - local app_size="1" - docker_app + read -e -p "설정${docker_name}로그인 사용자 이름 :" app_use + read -e -p "설정${docker_name}로그인 비밀번호 :" app_passwd - ;; + docker run -d \ + --name xunlei \ + --restart unless-stopped \ + --privileged \ + -e XL_DASHBOARD_USERNAME=${app_use} \ + -e XL_DASHBOARD_PASSWORD=${app_passwd} \ + -v /home/docker/xunlei/data:/xunlei/data \ + -v /home/docker/xunlei/downloads:/xunlei/downloads \ + -p ${docker_port}:2345 \ + cnk3x/xunlei + } + local docker_describe="迅雷你的离线高速BT磁力下载工具" + local docker_url="官网介绍: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_passwd="" + local app_size="1" + docker_app - 78) + ;; - local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" - local docker_name="panda-wiki-nginx" - local docker_port="2443" - local app_size="2" - docker_app_install() { - bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" - } - docker_app_update() { - docker_app_install - } + 78|PandaWiki) + local app_name="PandaWiki" + local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" + local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local docker_name="panda-wiki-nginx" + local docker_port="2443" + local app_size="2" - docker_app_uninstall() { - docker_app_install - } + docker_app_install() { + bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" + } - docker_app_plus - ;; + docker_app_update() { + docker_app_install + } + docker_app_uninstall() { + docker_app_install + } - 79) + docker_app_plus + ;; - local docker_name="beszel" - local docker_img="henrygd/beszel" - local docker_port=8079 - docker_rum() { - mkdir -p /home/docker/beszel && \ - docker run -d \ - --name beszel \ - --restart=unless-stopped \ - -v /home/docker/beszel:/beszel_data \ - -p ${docker_port}:8090 \ - henrygd/beszel + 79|beszel) - } + local docker_name="beszel" + local docker_img="henrygd/beszel" + local docker_port=8079 - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { - ;; + mkdir -p /home/docker/beszel && \ + docker run -d \ + --name beszel \ + --restart=unless-stopped \ + -v /home/docker/beszel:/beszel_data \ + -p ${docker_port}:8090 \ + henrygd/beszel + } - 80) - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden-linkwarden-1" - local docker_port="8080" - local app_size="3" + local docker_describe="Beszel轻量易用的服务器监控" + local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - docker_app_install() { - install git openssl - mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + ;; - # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 임의의 키와 암호를 생성합니다 - local ADMIN_EMAIL="admin@example.com" - local ADMIN_PASSWORD=$(openssl rand -hex 8) + 80|linkwarden) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden" + local docker_port="8080" + local app_size="3" - sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env - sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env - sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env - sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 관리자 계정 정보를 추가하십시오 - echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env - echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + # 임의의 키와 암호를 생성합니다 + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) - # 컨테이너를 시작하십시오 - docker compose up -d + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - clear - echo "설치" - check_docker_app_ip + # 관리자 계정 정보를 추가하십시오 + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env - } + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - docker_app_update() { - cd /home/docker/linkwarden && docker compose down --rmi all - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - - # 원래 변수를 유지하십시오 - source .env - mv .env.new .env - echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env - echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env - echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env - echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env - echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env - echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - - docker compose up -d - } + # 컨테이너를 시작하십시오 + docker compose up -d - docker_app_uninstall() { - cd /home/docker/linkwarden && docker compose down --rmi all - rm -rf /home/docker/linkwarden - echo "앱이 제거되었습니다" - } + clear + echo "설치" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 원래 변수를 유지하십시오 + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "앱이 제거되었습니다" + } + + docker_app_plus - docker_app_plus + ;; - ;; + 81|jitsi) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" - 81) - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" - local docker_name="jitsi" - local docker_port="8081" - local app_size="3" + docker_app_install() { - docker_app_install() { + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d - add_yuming - mkdir -p /home/docker/jitsi && cd /home/docker/jitsi - wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) - unzip "$(ls -t | head -n 1)" - cd "$(ls -dt */ | head -n 1)" - cp env.example .env - ./gen-passwords.sh - mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} - sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env - sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env - docker compose up -d + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + } - } + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d - docker_app_update() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - docker compose up -d + } - } + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "앱이 제거되었습니다" + } - docker_app_uninstall() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - rm -rf /home/docker/jitsi - echo "앱이 제거되었습니다" - } + docker_app_plus - docker_app_plus + ;; - ;; + 82|gpt-load) - 82) + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 - local docker_name="gpt-load" - local docker_img="tbphp/gpt-load:latest" - local docker_port=8082 + docker_rum() { - docker_rum() { + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest - mkdir -p /home/docker/gpt-load && \ - docker run -d --name gpt-load \ - -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ - -v "/home/docker/gpt-load/data":/app/data \ - tbphp/gpt-load:latest + } - } + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" - local docker_passwd="" - local app_size="1" - docker_app + ;; - ;; + 83|komari) - 83) + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 - local docker_name="komari" - local docker_img="ghcr.io/komari-monitor/komari:latest" - local docker_port=8083 + docker_rum() { - docker_rum() { + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest - mkdir -p /home/docker/komari && \ - docker run -d \ - --name komari \ - -p ${docker_port}:25774 \ - -v /home/docker/komari:/app/data \ - -e ADMIN_USERNAME=admin \ - -e ADMIN_PASSWORD=1212156 \ - --restart=always \ - ghcr.io/komari-monitor/komari:latest + } - } + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" - local docker_passwd="" - local app_size="1" - docker_app + ;; - ;; + 84|wallos) - 84) + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 - local docker_name="wallos" - local docker_img="bellamy/wallos:latest" - local docker_port=8084 + docker_rum() { - docker_rum() { + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest - mkdir -p /home/docker/wallos && \ - docker run -d --name wallos \ - -v /home/docker/wallos/db:/var/www/html/db \ - -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ - -e TZ=UTC \ - -p ${docker_port}:80 \ - --restart unless-stopped \ - bellamy/wallos:latest - - } + } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 85) + 85|immich) - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" - local docker_port="8085" - local app_size="3" + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" - docker_app_install() { - install git openssl - mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} - wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml - docker compose up -d + docker compose up -d - clear - echo "설치" - check_docker_app_ip + clear + echo "설치" + check_docker_app_ip - } + } - docker_app_update() { - cd /home/docker/${docker_name} && docker compose down --rmi all - docker_app_install - } + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } - docker_app_uninstall() { - cd /home/docker/${docker_name} && docker compose down --rmi all - rm -rf /home/docker/${docker_name} - echo "앱이 제거되었습니다" - } + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "앱이 제거되었습니다" + } - docker_app_plus + docker_app_plus - ;; + ;; - 86) + 86|jellyfin) - local docker_name="jellyfin" - local docker_img="jellyfin/jellyfin" - local docker_port=8086 + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/jellyfin/media - chmod -R 777 /home/docker/jellyfin + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin - docker run -d \ - --name jellyfin \ - --user root \ - --volume /home/docker/jellyfin/config:/config \ - --volume /home/docker/jellyfin/cache:/cache \ - --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ - -p ${docker_port}:8096 \ - -p 7359:7359/udp \ - --restart=unless-stopped \ - jellyfin/jellyfin + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin - } + } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 87) + 87|synctv) - local docker_name="synctv" - local docker_img="synctvorg/synctv" - local docker_port=8087 + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 - docker_rum() { + docker_rum() { - docker run -d \ - --name synctv \ - -v /home/docker/synctv:/root/.synctv \ - -p ${docker_port}:8080 \ - --restart=always \ - synctvorg/synctv + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv - } + } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 88) + 88|owncast) - local docker_name="owncast" - local docker_img="owncast/owncast:latest" - local docker_port=8088 + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 - docker_rum() { + docker_rum() { - docker run -d \ - --name owncast \ - -p ${docker_port}:8080 \ - -p 1935:1935 \ - -v /home/docker/owncast/data:/app/data \ - --restart=always \ - owncast/owncast:latest + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest - } + } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" - local app_size="1" - docker_app + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app - ;; + ;; - 0) - kejilion - ;; - *) - echo "잘못된 입력!" - ;; - esac - break_end + 0) + kejilion + ;; + *) + ;; + esac + break_end + sub_choice="" - done +done } @@ -11957,7 +11964,7 @@ EOF ;; 2) - read -e -p "삭제 해야하는 콘텐츠를 구문 분석하기위한 키워드를 입력하십시오." delhost + read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts send_stats "로컬 호스트 구문 분석 및 삭제" ;; @@ -12274,8 +12281,7 @@ EOF 39) clear - send_stats "명령 줄 기록" - bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + linux_fav ;; 41) @@ -13058,7 +13064,7 @@ echo "스크립트 시작 k" echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" echo "업데이트 시스템 K 업데이트 | K 업데이트" -echo "깨끗한 시스템 쓰레기 K Clean | K 청소" +echo "깨끗한 시스템 쓰레기 K Clean | k 청소" echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" echo "BBR3 제어판 K BBR3 | K bbrv3" echo "커널 튜닝 패널 K nhyh | K 커널 최적화" @@ -13091,8 +13097,9 @@ echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" - - +echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" +echo "앱 시장 관리 K 앱" +echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" } @@ -13224,6 +13231,10 @@ else iptables_panel ;; + 命令收藏夹|fav) + linux_fav + ;; + status|状态) shift send_stats "소프트웨어 상태보기" @@ -13303,8 +13314,17 @@ else fi ;; + + app) + shift + send_stats "$@ 적용" + linux_panel "$@" + ;; + + *) k_info ;; esac fi + diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 527605243..fbbe65333 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.7" +sh_v="4.0.8" gl_hui='\e[37m' @@ -5648,7 +5648,10 @@ linux_trash() { done } - +linux_fav() { +send_stats "命令收藏夾" +bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) +} # 創建備份 create_backup() { @@ -8449,10 +8452,12 @@ linux_ldnmp() { linux_panel() { +local sub_choice="$1" +while true; do - while true; do + if [ -z "$sub_choice" ]; then clear echo -e "應用市場" echo -e "${gl_kjlan}------------------------" @@ -8524,2527 +8529,2529 @@ linux_panel() { echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "請輸入你的選擇:" sub_choice + fi - case $sub_choice in - 1) + case $sub_choice in + 1|bt) - local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" - local panelurl="https://www.bt.cn/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 2) + ;; + 2|aapanel) - local lujing="[ -d "/www/server/panel" ]" - local panelname="aapanel" - local panelurl="https://www.aapanel.com/new/index.html" + 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_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_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 - } + 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 + install_panel - ;; - 3) + ;; + 3|1panel) - local lujing="command -v 1pctl" - local panelname="1Panel" - local panelurl="https://1panel.cn/" + local lujing="command -v 1pctl" + local panelname="1Panel" + local panelurl="https://1panel.cn/" - panel_app_install() { - install bash - bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" - } + panel_app_install() { + install bash + bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)" + } - panel_app_manage() { - 1pctl user-info - 1pctl update password - } + panel_app_manage() { + 1pctl user-info + 1pctl update password + } - panel_app_uninstall() { - 1pctl uninstall - } + panel_app_uninstall() { + 1pctl uninstall + } - install_panel + install_panel - ;; - 4) + ;; + 4|npm) - local docker_name="npm" - local docker_img="jc21/nginx-proxy-manager:latest" - local docker_port=81 + local docker_name="npm" + local docker_img="jc21/nginx-proxy-manager:latest" + local docker_port=81 - docker_rum() { + 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 + 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="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" - local app_size="1" + local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" + local docker_url="官网介绍: https://nginxproxymanager.com/" + local docker_use="echo \"初始用户名: admin@example.com\"" + local docker_passwd="echo \"初始密码: changeme\"" + local app_size="1" - docker_app + docker_app - ;; + ;; - 5) + 5|openlist) - local docker_name="openlist" - local docker_img="openlistteam/openlist:latest-aria2" - local docker_port=5244 + local docker_name="openlist" + local docker_img="openlistteam/openlist:latest-aria2" + local docker_port=5244 - docker_rum() { + docker_rum() { - docker run -d \ - --restart=always \ - -v /home/docker/openlist:/opt/openlist/data \ - -p ${docker_port}:5244 \ - -e PUID=0 \ - -e PGID=0 \ - -e UMASK=022 \ - --name="openlist" \ - openlistteam/openlist:latest-aria2 + docker run -d \ + --restart=always \ + -v /home/docker/openlist:/opt/openlist/data \ + -p ${docker_port}:5244 \ + -e PUID=0 \ + -e PGID=0 \ + -e UMASK=022 \ + --name="openlist" \ + openlistteam/openlist:latest-aria2 - } + } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" + local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_use="docker exec -it openlist ./openlist admin random" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 6) + 6|webtop-ubuntu) - local docker_name="webtop-ubuntu" - local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" - local docker_port=3006 + local docker_name="webtop-ubuntu" + local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" + local docker_port=3006 - docker_rum() { + 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 \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ - -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 + 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 \ + -e CUSTOM_USER=ubuntu-abc \ + -e PASSWORD=ubuntuABC123 \ + -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的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" - local app_size="2" - docker_app + local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: ubuntu-abc\"" + local docker_passwd="echo \"密码: ubuntuABC123\"" + local app_size="2" + docker_app - ;; - 7) + ;; + 7|nezha) + clear + send_stats "搭建哪吒" + local docker_name="nezha-dashboard" + local docker_port=8008 + while true; do + check_docker_app + check_docker_image_update $docker_name clear - send_stats "搭建哪吒" - 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://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + echo -e "哪吒監控$check_docker $update_status" + echo "開源、輕量、易用的服務器監控與運維工具" + echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) + check_docker_app_ip + fi + echo "" + echo "------------------------" + echo "1. 使用" + 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 - fi - echo "" - echo "------------------------" - echo "1. 使用" - 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 - ;; + *) + break + ;; - *) - break - ;; + esac + break_end + done + ;; - esac - break_end - done - ;; + 8|qb) + + 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 - 8) + } - local docker_name="qbittorrent" - local docker_img="lscr.io/linuxserver/qbittorrent:latest" - local docker_port=8081 + 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 - 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 + 9|mail) + 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 是一個開源的郵件服務器解決方案," + echo "視頻介紹: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" - 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 + 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 ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + yuming=$(cat /home/docker/mail.txt) + echo "訪問地址:" + echo "https://$yuming" + fi - 9) - send_stats "搭建郵局" - clear - install telnet - local docker_name=“mailserver” - while true; do - check_docker_app - check_docker_image_update $docker_name + echo "------------------------" + echo "1. 安裝 2. 更新 3. 卸載" + echo "------------------------" + echo "0. 返回上一級選單" + echo "------------------------" + read -e -p "輸入你的選擇:" choice - clear - echo -e "郵局服務$check_docker $update_status" - echo "poste.io 是一個開源的郵件服務器解決方案," - echo "視頻介紹: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + 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 - 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 "" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.io + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io已經安裝完成" + echo "------------------------" + echo "您可以使用以下地址訪問poste.io:" + echo "https://$yuming" + echo "" + + ;; - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + 2) + docker rm -f mailserver + docker rmi -f analogic/poste.i yuming=$(cat /home/docker/mail.txt) - echo "訪問地址:" + docker run \ + --net=host \ + -e TZ=Europe/Prague \ + -v /home/docker/mail:/data \ + --name "mailserver" \ + -h "$yuming" \ + --restart=always \ + -d analogic/poste.i + + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + clear + echo "poste.io已經安裝完成" + echo "------------------------" + echo "您可以使用以下地址訪問poste.io:" echo "https://$yuming" - fi + echo "" + ;; + 3) + docker rm -f mailserver + docker rmi -f analogic/poste.io + rm /home/docker/mail.txt + rm -rf /home/docker/mail + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "應用已卸載" + ;; - echo "------------------------" - echo "1. 安裝 2. 更新 3. 卸載" - echo "------------------------" - echo "0. 返回上一級選單" - echo "------------------------" - read -e -p "輸入你的選擇:" choice + *) + break + ;; - 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 "" + esac + break_end + done - 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 + 10|rocketchat) - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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" - clear - echo "poste.io已經安裝完成" - echo "------------------------" - echo "您可以使用以下地址訪問poste.io:" - echo "https://$yuming" - echo "" + 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 + } - 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 - - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + 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 + } - 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 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "應用已卸載" - ;; + 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 "應用已卸載" + } - *) - break - ;; + docker_app_plus + ;; - esac - break_end - done - ;; - 10) + 11|zentao) + local docker_name="zentao-server" + local docker_img="idoop/zentao:latest" + local docker_port=82 - 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_rum() { - 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 - ;; + 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 + } - 11) - local docker_name="zentao-server" - local docker_img="idoop/zentao:latest" - local docker_port=82 + 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 + ;; - docker_rum() { + 12|qinglong) + local docker_name="qinglong" + local docker_img="whyour/qinglong:latest" + local docker_port=5700 + 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 + 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="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" - local app_size="2" - docker_app + } - ;; + local docker_describe="青龙面板是一个定时任务管理平台" + local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 12) - local docker_name="qinglong" - local docker_img="whyour/qinglong:latest" - local docker_port=5700 + ;; + 13|cloudreve) + + 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_rum() { + docker_app_update() { + cd /home/docker/cloud/ && docker compose down --rmi all + cd /home/docker/cloud/ && docker compose up -d + } - docker run -d \ - -v /home/docker/qinglong/data:/ql/data \ - -p ${docker_port}:5700 \ - --name qinglong \ - --hostname qinglong \ - --restart unless-stopped \ - whyour/qinglong:latest + docker_app_uninstall() { + cd /home/docker/cloud/ && docker compose down --rmi all + rm -rf /home/docker/cloud + echo "應用已卸載" + } - } + docker_app_plus + ;; - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 14|easyimage) + local docker_name="easyimage" + local docker_img="ddsderek/easyimage:latest" + local docker_port=8014 + 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 - ;; - 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 - } + 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|emby) + local docker_name="emby" + local docker_img="linuxserver/emby:latest" + local docker_port=8015 - docker_app_update() { - cd /home/docker/cloud/ && docker compose down --rmi all - cd /home/docker/cloud/ && docker compose up -d - } + 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 - 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() { + local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" + local docker_url="官网介绍: https://emby.media/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 16|looking) + local docker_name="looking-glass" + local docker_img="wikihostinc/looking-glass-server" + local docker_port=8016 - } - 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 - ;; + docker_rum() { - 15) - local docker_name="emby" - local docker_img="linuxserver/emby:latest" - local docker_port=8096 + docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - 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="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|adguardhome) + local docker_name="adguardhome" + local docker_img="adguard/adguardhome" + local docker_port=8017 - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker_rum() { - 16) - local docker_name="looking-glass" - local docker_img="wikihostinc/looking-glass-server" - local docker_port=89 + 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 - docker_rum() { + } - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server - } + 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 - 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 + 18|onlyoffice) - docker_rum() { + local docker_name="onlyoffice" + local docker_img="onlyoffice/documentserver" + local docker_port=8018 - 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 + 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="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + 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|safeline) + send_stats "搭建雷池" - 18) + local docker_name=safeline-mgt + local docker_port=9443 + while true; do + check_docker_app + clear + echo -e "雷池服務$check_docker" + echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" + echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + check_docker_app_ip + fi + echo "" - local docker_name="onlyoffice" - local docker_img="onlyoffice/documentserver" - local docker_port=8082 + echo "------------------------" + echo "1. 安裝 2. 更新 3. 重置密碼 4. 卸載" + echo "------------------------" + echo "0. 返回上一級選單" + echo "------------------------" + read -e -p "輸入你的選擇:" choice - docker_rum() { + case $choice in + 1) + install_docker + check_disk_space 5 + bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "雷池WAF面板已經安裝完成" + check_docker_app_ip + docker exec safeline-mgt resetadmin - 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 + ;; + 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 "" + local app_no=$sub_choice + grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + clear + echo "雷池WAF面板已經更新完成" + check_docker_app_ip + ;; + 3) + docker exec safeline-mgt resetadmin + ;; + 4) + cd /data/safeline + docker compose down --rmi all + local app_no=$sub_choice + sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + echo "如果你是默認安裝目錄那現在項目已經卸載。如果你是自定義安裝目錄你需要到安裝目錄下自行執行:" + echo "docker compose down && docker compose down --rmi all" + ;; + *) + break + ;; - } + esac + break_end + done - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + ;; - ;; + 20|portainer) + local docker_name="portainer" + local docker_img="portainer/portainer" + local docker_port=8020 - 19) - send_stats "搭建雷池" + docker_rum() { - local docker_name=safeline-mgt - local docker_port=9443 - while true; do - check_docker_app - clear - echo -e "雷池服務$check_docker" - echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" - echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then - check_docker_app_ip - fi - echo "" + 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 - 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)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "雷池WAF面板已經安裝完成" - check_docker_app_ip - docker exec safeline-mgt resetadmin - ;; + local docker_describe="portainer是一个轻量级的docker容器管理面板" + local docker_url="官网介绍: https://www.portainer.io/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt - clear - echo "雷池WAF面板已經更新完成" - check_docker_app_ip - ;; - 3) - docker exec safeline-mgt resetadmin - ;; - 4) - cd /data/safeline - docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt - echo "如果你是默認安裝目錄那現在項目已經卸載。如果你是自定義安裝目錄你需要到安裝目錄下自行執行:" - echo "docker compose down && docker compose down --rmi all" - ;; - *) - break - ;; + ;; - esac - break_end - done + 21|vscode) + local docker_name="vscode-web" + local docker_img="codercom/code-server" + local docker_port=8021 - ;; - 20) - local docker_name="portainer" - local docker_img="portainer/portainer" - local docker_port=9050 + docker_rum() { - 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 - 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="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 + ;; - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 22|uptime-kuma) + local docker_name="uptime-kuma" + local docker_img="louislam/uptime-kuma:latest" + local docker_port=8022 - 21) - local docker_name="vscode-web" - local docker_img="codercom/code-server" - local docker_port=8180 + docker_rum() { - 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 - 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="Uptime Kuma 易于使用的自托管监控工具" + local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 + 23|memos) + local docker_name="memos" + local docker_img="ghcr.io/usememos/memos:latest" + local docker_port=8023 + docker_rum() { - 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 - 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="Memos是一款轻量级、自托管的备忘录中心" + local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 24|webtop) + local docker_name="webtop" + local docker_img="lscr.io/linuxserver/webtop:latest" + local docker_port=8024 + + 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 CUSTOM_USER=webtop-abc \ + -e PASSWORD=webtopABC123 \ + -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="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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" + local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_use="echo \"用户名: webtop-abc\"" + local docker_passwd="echo \"密码: webtopABC123\"" + local app_size="2" + docker_app + ;; - } + 25|nextcloud) + local docker_name="nextcloud" + local docker_img="nextcloud:latest" + local docker_port=8025 + local rootpasswd=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - 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 - ;; + docker_rum() { - 24) - local docker_name="webtop" - local docker_img="lscr.io/linuxserver/webtop:latest" - local docker_port=3083 + 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 - docker_rum() { + } + 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 + ;; - 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 CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ - -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 + 26|qd) + local docker_name="qd" + local docker_img="qdtoday/qd:latest" + local docker_port=8026 + 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="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" - local app_size="2" - docker_app - ;; + 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 + ;; - 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) + 27|dockge) + local docker_name="dockge" + local docker_img="louislam/dockge:latest" + local docker_port=8027 - docker_rum() { + 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 + 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="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" - local docker_passwd="" - local app_size="3" - docker_app - ;; + 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 + ;; - 26) - local docker_name="qd" - local docker_img="qdtoday/qd:latest" - local docker_port=8923 + 28|speedtest) + local docker_name="speedtest" + local docker_img="ghcr.io/librespeed/speedtest" + local docker_port=8028 - docker_rum() { + docker_rum() { - docker run -d --name qd -p ${docker_port}:80 -v /home/docker/qd/config:/usr/src/app/config qdtoday/qd + docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest - } + } - 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 + 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 + ;; - docker_rum() { + 29|searxng) + local docker_name="searxng" + local docker_img="searxng/searxng" + local docker_port=8029 - 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 + docker_rum() { - } + docker run -d \ + --name searxng \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v "/home/docker/searxng:/etc/searxng" \ + searxng/searxng - 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 + 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 + ;; - docker_rum() { + 30|photoprism) + local docker_name="photoprism" + local docker_img="photoprism/photoprism:latest" + local docker_port=8030 + 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 - 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 - ;; + 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 + ;; - 29) - local docker_name="searxng" - local docker_img="searxng/searxng" - local docker_port=8029 - docker_rum() { + 31|s-pdf) + local docker_name="s-pdf" + local docker_img="frooodle/s-pdf:latest" + local docker_port=8031 - docker run -d \ - --name searxng \ - --restart unless-stopped \ - -p ${docker_port}:8080 \ - -v "/home/docker/searxng:/etc/searxng" \ - searxng/searxng + 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="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + ;; - 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) + 32|drawio) + local docker_name="drawio" + local docker_img="jgraph/drawio" + local docker_port=8032 - docker_rum() { + 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 + docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio - } + } - 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 - ;; + local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" + local docker_url="官网介绍: https://www.drawio.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; + 33|sun-panel) + local docker_name="sun-panel" + local docker_img="hslr/sun-panel" + local docker_port=8033 - 31) - local docker_name="s-pdf" - local docker_img="frooodle/s-pdf:latest" - local docker_port=8020 + docker_rum() { - 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 - 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 + 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 + ;; - docker_rum() { + 34|pingvin-share) + local docker_name="pingvin-share" + local docker_img="stonith404/pingvin-share" + local docker_port=8034 - docker run -d --restart=always --name drawio -p ${docker_port}:8080 -v /home/docker/drawio:/var/lib/drawio jgraph/drawio + 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 + ;; - 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 + 35|moments) + local docker_name="moments" + local docker_img="kingwrcy/moments:latest" + local docker_port=8035 - docker_rum() { + 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 + 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="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 - ;; + 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 + ;; - 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 - } + 36|lobe-chat) + local docker_name="lobe-chat" + local docker_img="lobehub/lobe-chat:latest" + local docker_port=8036 - 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 - ;; + docker_rum() { + docker run -d -p ${docker_port}:3210 \ + --name lobe-chat \ + --restart=always \ + lobehub/lobe-chat + } - 35) - local docker_name="moments" - local docker_img="kingwrcy/moments:latest" - local docker_port=8035 + 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 + ;; - docker_rum() { + 37|myip) + local docker_name="myip" + local docker_img="jason5ng32/myip:latest" + local docker_port=8037 - 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 - } + docker_rum() { + docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip: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 - ;; + } + 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 + ;; - 36) - local docker_name="lobe-chat" - local docker_img="lobehub/lobe-chat:latest" - local docker_port=8036 + 38|xiaoya) + send_stats "小雅全家桶" + clear + install_docker + check_disk_space 1 + bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" + ;; - docker_rum() { + 39|bililive) - docker run -d -p ${docker_port}:3210 \ - --name lobe-chat \ - --restart=always \ - lobehub/lobe-chat - } + 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_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 - ;; + local docker_name="bililive-go" + local docker_img="chigusa/bililive-go" + local docker_port=8039 - 37) - local docker_name="myip" - local docker_img="jason5ng32/myip:latest" - local docker_port=8037 + docker_rum() { - 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 - docker run -d -p ${docker_port}:18966 --name myip jason5ng32/myip:latest + } - } + 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|webssh) + 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="是一个多功能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 - ;; + 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 + ;; - 38) - send_stats "小雅全家桶" - clear - install_docker - check_disk_space 1 - bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)" - ;; + 41|haozi) - 39) + local lujing="[ -d "/www/server/panel" ]" + local panelname="耗子面板" + local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" - 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 + 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 ~ + } - local docker_name="bililive-go" - local docker_img="chigusa/bililive-go" - local docker_port=8039 + panel_app_manage() { + panel-cli + } - docker_rum() { + 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 ~ + } - 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 + install_panel - } + ;; - 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 - } + 42|nexterm) + local docker_name="nexterm" + local docker_img="germannewsmaker/nexterm:latest" + local docker_port=8042 - 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 - ;; + docker_rum() { - 41) + docker run -d \ + --name nexterm \ + -p ${docker_port}:6989 \ + -v /home/docker/nexterm:/app/data \ + --restart unless-stopped \ + germannewsmaker/nexterm:latest - 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 ~ - } + 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 + ;; - panel_app_manage() { - panel-cli - } + 43|hbbs) + local docker_name="hbbs" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - 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 ~ - } + docker_rum() { - install_panel + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs - ;; + } - 42) - local docker_name="nexterm" - local docker_img="germannewsmaker/nexterm:latest" - local docker_port=8042 + 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 + ;; - docker_rum() { + 44|hbbr) + local docker_name="hbbr" + local docker_img="rustdesk/rustdesk-server" + local docker_port=0000 - docker run -d \ - --name nexterm \ - -p ${docker_port}:6989 \ - -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ - germannewsmaker/nexterm:latest + 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="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 + 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 + ;; - docker_rum() { + 45|registry) + local docker_name="registry" + local docker_img="registry:2" + local docker_port=8045 - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + 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="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 - ;; + 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 + ;; - 44) - local docker_name="hbbr" - local docker_img="rustdesk/rustdesk-server" - local docker_port=0000 + 46|ghproxy) + local docker_name="ghproxy" + local docker_img="wjqserver/ghproxy:latest" + local docker_port=8046 - docker_rum() { + docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest - } + } - 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 - ;; + 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 + ;; - 45) - local docker_name="registry" - local docker_img="registry:2" - local docker_port=8045 + 47|prometheus|grafana) - docker_rum() { + 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 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 + docker_app_install() { + prometheus_install + clear + ip_address + echo "已經安裝完成" + check_docker_app_ip + echo "初始用戶名密碼均為: admin" + } - } + 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 + } - 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 - ;; + 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 - 46) - local docker_name="ghproxy" - local docker_img="wjqserver/ghproxy:latest" - local docker_port=8046 + rm -rf /home/docker/monitoring + echo "應用已卸載" + } - docker_rum() { + docker_app_plus + ;; - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + 48|node-exporter) + local docker_name="node-exporter" + local docker_img="prom/node-exporter" + local docker_port=8048 - } + docker_rum() { - 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 - ;; + docker run -d \ + --name=node-exporter \ + -p ${docker_port}:9100 \ + --restart unless-stopped \ + prom/node-exporter - 47) + } + local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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" + 49|cadvisor) + 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 - docker_app_install() { - prometheus_install - clear - ip_address - echo "已經安裝完成" - check_docker_app_ip - echo "初始用戶名密碼均為: admin" - } - - 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 + local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" + local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - rm -rf /home/docker/monitoring - echo "應用已卸載" - } - docker_app_plus - ;; + 50|changedetection) + local docker_name="changedetection" + local docker_img="dgtlmoon/changedetection.io:latest" + local docker_port=8050 - 48) - local docker_name="node-exporter" - local docker_img="prom/node-exporter" - local docker_port=8048 + docker_rum() { - docker_rum() { + docker run -d --restart always -p ${docker_port}:5000 \ + -v /home/docker/datastore:/datastore \ + --name changedetection dgtlmoon/changedetection.io:latest - 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/dgtlmoon/changedetection.io" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 51|pve) + clear + send_stats "PVE開小雞" + 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 + ;; - 49) - local docker_name="cadvisor" - local docker_img="gcr.io/cadvisor/cadvisor:latest" - local docker_port=8049 - docker_rum() { + 52|dpanel) + local docker_name="dpanel" + local docker_img="dpanel/dpanel:lite" + local docker_port=8052 - 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 + 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="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + } + 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 + ;; - 50) - local docker_name="changedetection" - local docker_img="dgtlmoon/changedetection.io:latest" - local docker_port=8050 + 53|llama3) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - docker_rum() { + docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ - -v /home/docker/datastore:/datastore \ - --name changedetection dgtlmoon/changedetection.io:latest + 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="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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|amh) - 51) - clear - send_stats "PVE開小雞" - 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 - ;; + 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 + } - 52) - local docker_name="dpanel" - local docker_img="dpanel/dpanel:lite" - local docker_port=8052 + panel_app_manage() { + panel_app_install + } - docker_rum() { + panel_app_uninstall() { + panel_app_install + } - 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 + install_panel + ;; - } - 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 - ;; + 55|frps) + frps_panel + ;; - 53) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 56|frpc) + frpc_panel + ;; - docker_rum() { + 57|deepseek) + local docker_name="ollama" + local docker_img="ghcr.io/open-webui/open-webui:ollama" + local docker_port=8053 - 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 + 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 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 + ;; - 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 - } + 58|dify) + 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" - panel_app_manage() { - panel_app_install - } + 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 - panel_app_uninstall() { - panel_app_install - } + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } - install_panel - ;; + 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 "應用已卸載" + } - 55) - frps_panel - ;; + docker_app_plus - 56) - frpc_panel - ;; + ;; - 57) - local docker_name="ollama" - local docker_img="ghcr.io/open-webui/open-webui:ollama" - local docker_port=8053 + 59|new-api) + 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_rum() { + 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 - 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 + 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 - } - 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 - ;; + 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 - 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 compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip - 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_uninstall() { + cd /home/docker/new-api/ && docker compose down --rmi all + rm -rf /home/docker/new-api + echo "應用已卸載" + } - docker_app_plus + 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 + 60|jms) - 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 + 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 "初始用戶名: admin" + echo "初始密碼: ChangeMe" + } - 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_update() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh upgrade + echo "應用已更新" + } - docker_app_uninstall() { - cd /home/docker/new-api/ && docker compose down --rmi all - rm -rf /home/docker/new-api - echo "應用已卸載" - } - docker_app_plus + docker_app_uninstall() { + cd /opt/jumpserver-installer*/ + ./jmsctl.sh uninstall + cd /opt + rm -rf jumpserver-installer*/ + rm -rf jumpserver + echo "應用已卸載" + } - ;; + docker_app_plus + ;; + 61|libretranslate) + local docker_name="libretranslate" + local docker_img="libretranslate/libretranslate:latest" + local docker_port=8061 - 60) + docker_rum() { - 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 run -d \ + -p ${docker_port}:5000 \ + --name libretranslate \ + libretranslate/libretranslate \ + --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru - 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 "初始用戶名: admin" - echo "初始密碼: ChangeMe" - } + } + 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 + ;; - 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 "應用已卸載" - } + 62|ragflow) + 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_plus - ;; + 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 + } - 61) - local docker_name="libretranslate" - local docker_img="libretranslate/libretranslate:latest" - local docker_port=8061 + 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_rum() { + docker_app_uninstall() { + cd /home/docker/ragflow/docker/ && docker compose down --rmi all + rm -rf /home/docker/ragflow + echo "應用已卸載" + } - docker run -d \ - -p ${docker_port}:5000 \ - --name libretranslate \ - libretranslate/libretranslate \ - --load-only ko,zt,zh,en,ja,pt,es,fr,de,ru + docker_app_plus - } + ;; - 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 - ;; + 63|open-webui) + local docker_name="open-webui" + local docker_img="ghcr.io/open-webui/open-webui:main" + local docker_port=8063 + docker_rum() { - 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 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 - 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 + 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|it-tools) + 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 + } - 63) - local docker_name="open-webui" - local docker_img="ghcr.io/open-webui/open-webui:main" - local docker_port=8063 + 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 + ;; - 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 + 65|n8n) + local docker_name="n8n" + local docker_img="docker.n8n.io/n8nio/n8n" + local docker_port=8065 - } + docker_rum() { - 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 - ;; + 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} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - 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="是一款功能强大的自动化工作流平台" + local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 - ;; + 66|yt) + yt_menu_pro + ;; - 65) - local docker_name="n8n" - local docker_img="docker.n8n.io/n8nio/n8n" - local docker_port=8065 + 67|ddns) + local docker_name="ddns-go" + local docker_img="jeessy/ddns-go" + local docker_port=8067 - docker_rum() { + docker_rum() { + docker run -d \ + --name ddns-go \ + --restart=always \ + -p ${docker_port}:9876 \ + -v /home/docker/ddns-go:/root \ + jeessy/ddns-go - 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} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" + local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } + 68|allinssl) + local docker_name="allinssl" + local docker_img="allinssl/allinssl:latest" + local docker_port=8068 - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 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 + } - 66) - yt_menu_pro - ;; + local docker_describe="开源免费的 SSL 证书自动化管理平台" + local docker_url="官网介绍: https://allinssl.com" + local docker_use="echo \"安全入口: /allinssl\"" + local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" + local app_size="1" + docker_app + ;; - 67) - local docker_name="ddns-go" - local docker_img="jeessy/ddns-go" - local docker_port=8067 + 69|sftpgo) + local docker_name="sftpgo" + local docker_img="drakkan/sftpgo:latest" + local docker_port=8069 - docker_rum() { - docker run -d \ - --name ddns-go \ - --restart=always \ - -p ${docker_port}:9876 \ - -v /home/docker/ddns-go:/root \ - jeessy/ddns-go + docker_rum() { - } + mkdir -p /home/docker/sftpgo/data + mkdir -p /home/docker/sftpgo/config + chown -R 1000:1000 /home/docker/sftpgo - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + docker run -d \ + --name sftpgo \ + --restart=always \ + -p ${docker_port}:8080 \ + -p 22022:2022 \ + --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ + --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ + drakkan/sftpgo:latest + + } - 68) - local docker_name="allinssl" - local docker_img="allinssl/allinssl:latest" - local docker_port=8068 + local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" + local docker_url="官网介绍: https://sftpgo.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 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 \"用户名: allinssl 密码: allinssldocker\"" - local app_size="1" - docker_app - ;; + 70|astrbot) + local docker_name="astrbot" + local docker_img="soulter/astrbot:latest" + local docker_port=8070 + docker_rum() { - 69) - local docker_name="sftpgo" - local docker_img="drakkan/sftpgo:latest" - local docker_port=8069 + mkdir -p /home/docker/astrbot/data - docker_rum() { + docker run -d \ + -p ${docker_port}:6185 \ + -p 6195:6195 \ + -p 6196:6196 \ + -p 6199:6199 \ + -p 11451:11451 \ + -v /home/docker/astrbot/data:/AstrBot/data \ + --restart unless-stopped \ + --name astrbot \ + soulter/astrbot:latest - mkdir -p /home/docker/sftpgo/data - mkdir -p /home/docker/sftpgo/config - chown -R 1000:1000 /home/docker/sftpgo + } - docker run -d \ - --name sftpgo \ - --restart=always \ - -p ${docker_port}:8080 \ - -p 22022:2022 \ - --mount type=bind,source=/home/docker/sftpgo/data,target=/srv/sftpgo \ - --mount type=bind,source=/home/docker/sftpgo/config,target=/var/lib/sftpgo \ - drakkan/sftpgo:latest + local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官网介绍: https://astrbot.app/" + local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_passwd="" + local app_size="1" + docker_app + ;; - } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + 71|navidrome) + local docker_name="navidrome" + local docker_img="deluan/navidrome:latest" + local docker_port=8071 + docker_rum() { - 70) - local docker_name="astrbot" - local docker_img="soulter/astrbot:latest" - local docker_port=8070 + docker run -d \ + --name navidrome \ + --restart=unless-stopped \ + --user $(id -u):$(id -g) \ + -v /home/docker/navidrome/music:/music \ + -v /home/docker/navidrome/data:/data \ + -p ${docker_port}:4533 \ + -e ND_LOGLEVEL=info \ + deluan/navidrome:latest - docker_rum() { + } - mkdir -p /home/docker/astrbot/data + local docker_describe="是一个轻量、高性能的音乐流媒体服务器" + local docker_url="官网介绍: https://www.navidrome.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - docker run -d \ - -p ${docker_port}:6185 \ - -p 6195:6195 \ - -p 6196:6196 \ - -p 6199:6199 \ - -p 11451:11451 \ - -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ - --name astrbot \ - soulter/astrbot:latest - } + 72|bitwarden) - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" - local docker_passwd="" - local app_size="1" - docker_app - ;; + local docker_name="bitwarden" + local docker_img="vaultwarden/server" + local docker_port=8072 + docker_rum() { - 71) - local docker_name="navidrome" - local docker_img="deluan/navidrome:latest" - local docker_port=8071 + docker run -d \ + --name bitwarden \ + --restart always \ + -p ${docker_port}:80 \ + -v /home/docker/bitwarden/data:/data \ + vaultwarden/server - docker_rum() { + } - docker run -d \ - --name navidrome \ - --restart=unless-stopped \ - --user $(id -u):$(id -g) \ - -v /home/docker/navidrome/music:/music \ - -v /home/docker/navidrome/data:/data \ - -p ${docker_port}:4533 \ - -e ND_LOGLEVEL=info \ - deluan/navidrome:latest + local docker_describe="一个你可以控制数据的密码管理器" + local docker_url="官网介绍: https://bitwarden.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - ;; + ;; - 72) - local docker_name="bitwarden" - local docker_img="vaultwarden/server" - local docker_port=8072 + 73|libretv) - docker_rum() { + local docker_name="libretv" + local docker_img="bestzwei/libretv:latest" + local docker_port=8073 - docker run -d \ - --name bitwarden \ - --restart always \ - -p ${docker_port}:80 \ - -v /home/docker/bitwarden/data:/data \ - vaultwarden/server + docker_rum() { - } + read -e -p "設置LibreTV的登錄密碼:" app_passwd - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name libretv \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -e PASSWORD=${app_passwd} \ + bestzwei/libretv:latest + } - ;; + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; - 73) + 74|moontv) - local docker_name="libretv" - local docker_img="bestzwei/libretv:latest" - local docker_port=8073 + local docker_name="moontv" + local docker_img="ghcr.io/senshinya/moontv:latest" + local docker_port=8074 - docker_rum() { + docker_rum() { - read -e -p "設置LibreTV的登錄密碼:" app_passwd + read -e -p "設置MoonTV的登錄密碼:" app_passwd docker run -d \ - --name libretv \ + --name moontv \ --restart unless-stopped \ - -p ${docker_port}:8080 \ + -p ${docker_port}:3000 \ -e PASSWORD=${app_passwd} \ - bestzwei/libretv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; - - - 74) - - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - - docker_rum() { - - read -e -p "設置MoonTV的登錄密碼:" app_passwd - - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest - - } - - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app - - ;; + ghcr.io/senshinya/moontv:latest + } - 75) + local docker_describe="免费在线视频搜索与观看平台" + local docker_url="官网介绍: https://github.com/senshinya/MoonTV" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="melody" - local docker_img="foamzou/melody:latest" - local docker_port=8075 + ;; - docker_rum() { - docker run -d \ - --name melody \ - --restart unless-stopped \ - -p ${docker_port}:5566 \ - -v /home/docker/melody/.profile:/app/backend/.profile \ - foamzou/melody:latest + 75|melody) + local docker_name="melody" + local docker_img="foamzou/melody:latest" + local docker_port=8075 - } + docker_rum() { - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker run -d \ + --name melody \ + --restart unless-stopped \ + -p ${docker_port}:5566 \ + -v /home/docker/melody/.profile:/app/backend/.profile \ + foamzou/melody:latest - ;; - + } - 76) + local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" + local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - local docker_name="dosgame" - local docker_img="oldiy/dosgame-web-docker:latest" - local docker_port=8076 - docker_rum() { - docker run -d \ - --name dosgame \ - --restart unless-stopped \ - -p ${docker_port}:262 \ - oldiy/dosgame-web-docker:latest + ;; - } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" - local docker_use="" - local docker_passwd="" - local app_size="2" - docker_app + 76|dosgame) + local docker_name="dosgame" + local docker_img="oldiy/dosgame-web-docker:latest" + local docker_port=8076 - ;; + docker_rum() { + docker run -d \ + --name dosgame \ + --restart unless-stopped \ + -p ${docker_port}:262 \ + oldiy/dosgame-web-docker:latest - 77) + } - local docker_name="xunlei" - local docker_img="cnk3x/xunlei" - local docker_port=8077 + local docker_describe="是一个中文DOS游戏合集网站" + local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app - docker_rum() { - read -e -p "設定${docker_name}的登錄用戶名:" app_use - read -e -p "設定${docker_name}的登錄密碼:" app_passwd + ;; - docker run -d \ - --name xunlei \ - --restart unless-stopped \ - --privileged \ - -e XL_DASHBOARD_USERNAME=${app_use} \ - -e XL_DASHBOARD_PASSWORD=${app_passwd} \ - -v /home/docker/xunlei/data:/xunlei/data \ - -v /home/docker/xunlei/downloads:/xunlei/downloads \ - -p ${docker_port}:2345 \ - cnk3x/xunlei + 77|xunlei) - } + local docker_name="xunlei" + local docker_img="cnk3x/xunlei" + local docker_port=8077 - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" - local docker_passwd="" - local app_size="1" - docker_app + docker_rum() { - ;; + read -e -p "設定${docker_name}的登錄用戶名:" app_use + read -e -p "設定${docker_name}的登錄密碼:" app_passwd + docker run -d \ + --name xunlei \ + --restart unless-stopped \ + --privileged \ + -e XL_DASHBOARD_USERNAME=${app_use} \ + -e XL_DASHBOARD_PASSWORD=${app_passwd} \ + -v /home/docker/xunlei/data:/xunlei/data \ + -v /home/docker/xunlei/downloads:/xunlei/downloads \ + -p ${docker_port}:2345 \ + cnk3x/xunlei + } - 78) + local docker_describe="迅雷你的离线高速BT磁力下载工具" + local docker_url="官网介绍: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_passwd="" + local app_size="1" + docker_app - local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" - local docker_name="panda-wiki-nginx" - local docker_port="2443" - local app_size="2" + ;; - docker_app_install() { - bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" - } - docker_app_update() { - docker_app_install - } + 78|PandaWiki) - docker_app_uninstall() { - docker_app_install - } + local app_name="PandaWiki" + local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" + local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local docker_name="panda-wiki-nginx" + local docker_port="2443" + local app_size="2" - docker_app_plus - ;; + docker_app_install() { + bash -c "$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)" + } + docker_app_update() { + docker_app_install + } - 79) + docker_app_uninstall() { + docker_app_install + } - local docker_name="beszel" - local docker_img="henrygd/beszel" - local docker_port=8079 + docker_app_plus + ;; - docker_rum() { - mkdir -p /home/docker/beszel && \ - docker run -d \ - --name beszel \ - --restart=unless-stopped \ - -v /home/docker/beszel:/beszel_data \ - -p ${docker_port}:8090 \ - henrygd/beszel - } + 79|beszel) - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_name="beszel" + local docker_img="henrygd/beszel" + local docker_port=8079 - ;; + docker_rum() { + mkdir -p /home/docker/beszel && \ + docker run -d \ + --name beszel \ + --restart=unless-stopped \ + -v /home/docker/beszel:/beszel_data \ + -p ${docker_port}:8090 \ + henrygd/beszel - 80) - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden-linkwarden-1" - local docker_port="8080" - local app_size="3" + } - docker_app_install() { - install git openssl - mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden + local docker_describe="Beszel轻量易用的服务器监控" + local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - # 下載官方 docker-compose 和 env 文件 - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" + ;; - # 生成隨機密鑰與密碼 - local ADMIN_EMAIL="admin@example.com" - local ADMIN_PASSWORD=$(openssl rand -hex 8) - sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env - sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env - sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env - sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env + 80|linkwarden) + local app_name="linkwarden书签管理" + local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" + local app_url="官方网站: https://linkwarden.app/" + local docker_name="linkwarden" + local docker_port="8080" + local app_size="3" - # 追加管理員賬號信息 - echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env - echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env + docker_app_install() { + install git openssl + mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + # 下載官方 docker-compose 和 env 文件 + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 啟動容器 - docker compose up -d + # 生成隨機密鑰與密碼 + local ADMIN_EMAIL="admin@example.com" + local ADMIN_PASSWORD=$(openssl rand -hex 8) - clear - echo "已經安裝完成" - check_docker_app_ip + sed -i "s|^NEXTAUTH_URL=.*|NEXTAUTH_URL=http://localhost:${docker_port}/api/v1/auth|g" .env + sed -i "s|^NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET=$(openssl rand -hex 32)|g" .env + sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env + sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - } + # 追加管理員賬號信息 + echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env + echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env - docker_app_update() { - cd /home/docker/linkwarden && docker compose down --rmi all - curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml - curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - - # 保留原本的變量 - source .env - mv .env.new .env - echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env - echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env - echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env - echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env - echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env - echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env - sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - - docker compose up -d - } + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - docker_app_uninstall() { - cd /home/docker/linkwarden && docker compose down --rmi all - rm -rf /home/docker/linkwarden - echo "應用已卸載" - } + # 啟動容器 + docker compose up -d - docker_app_plus + clear + echo "已經安裝完成" + check_docker_app_ip + + } + + docker_app_update() { + cd /home/docker/linkwarden && docker compose down --rmi all + curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml + curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" + + # 保留原本的變量 + source .env + mv .env.new .env + echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env + echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET" >> .env + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> .env + echo "MEILI_MASTER_KEY=$MEILI_MASTER_KEY" >> .env + echo "ADMIN_EMAIL=$ADMIN_EMAIL" >> .env + echo "ADMIN_PASSWORD=$ADMIN_PASSWORD" >> .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml + + docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/linkwarden && docker compose down --rmi all + rm -rf /home/docker/linkwarden + echo "應用已卸載" + } + + docker_app_plus - ;; + ;; - 81) - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" - local docker_name="jitsi" - local docker_port="8081" - local app_size="3" + 81|jitsi) + local app_name="JitsiMeet视频会议" + local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" + local app_url="官方网站: https://jitsi.org/" + local docker_name="jitsi" + local docker_port="8081" + local app_size="3" - docker_app_install() { + docker_app_install() { - add_yuming - mkdir -p /home/docker/jitsi && cd /home/docker/jitsi - wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) - unzip "$(ls -t | head -n 1)" - cd "$(ls -dt */ | head -n 1)" - cp env.example .env - ./gen-passwords.sh - mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} - sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env - sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env - docker compose up -d + add_yuming + mkdir -p /home/docker/jitsi && cd /home/docker/jitsi + wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) + unzip "$(ls -t | head -n 1)" + cd "$(ls -dt */ | head -n 1)" + cp env.example .env + ./gen-passwords.sh + mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri} + sed -i "s|^HTTP_PORT=.*|HTTP_PORT=${docker_port}|" .env + sed -i "s|^#PUBLIC_URL=https://meet.example.com:\${HTTPS_PORT}|PUBLIC_URL=https://$yuming:443|" .env + docker compose up -d - ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" - } + } - docker_app_update() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - docker compose up -d + docker_app_update() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + docker compose up -d - } + } - docker_app_uninstall() { - cd /home/docker/jitsi - cd "$(ls -dt */ | head -n 1)" - docker compose down --rmi all - rm -rf /home/docker/jitsi - echo "應用已卸載" - } + docker_app_uninstall() { + cd /home/docker/jitsi + cd "$(ls -dt */ | head -n 1)" + docker compose down --rmi all + rm -rf /home/docker/jitsi + echo "應用已卸載" + } - docker_app_plus + docker_app_plus - ;; + ;; - 82) + 82|gpt-load) - local docker_name="gpt-load" - local docker_img="tbphp/gpt-load:latest" - local docker_port=8082 + local docker_name="gpt-load" + local docker_img="tbphp/gpt-load:latest" + local docker_port=8082 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/gpt-load && \ - docker run -d --name gpt-load \ - -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ - -v "/home/docker/gpt-load/data":/app/data \ - tbphp/gpt-load:latest + mkdir -p /home/docker/gpt-load && \ + docker run -d --name gpt-load \ + -p ${docker_port}:3001 \ + -e AUTH_KEY=sk-123456 \ + -v "/home/docker/gpt-load/data":/app/data \ + tbphp/gpt-load:latest - } + } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="高性能AI接口透明代理服务" + local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 83) + 83|komari) - local docker_name="komari" - local docker_img="ghcr.io/komari-monitor/komari:latest" - local docker_port=8083 + local docker_name="komari" + local docker_img="ghcr.io/komari-monitor/komari:latest" + local docker_port=8083 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/komari && \ - docker run -d \ - --name komari \ - -p ${docker_port}:25774 \ - -v /home/docker/komari:/app/data \ - -e ADMIN_USERNAME=admin \ - -e ADMIN_PASSWORD=1212156 \ - --restart=always \ - ghcr.io/komari-monitor/komari:latest + mkdir -p /home/docker/komari && \ + docker run -d \ + --name komari \ + -p ${docker_port}:25774 \ + -v /home/docker/komari:/app/data \ + -e ADMIN_USERNAME=admin \ + -e ADMIN_PASSWORD=1212156 \ + --restart=always \ + ghcr.io/komari-monitor/komari:latest - } + } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="轻量级的自托管服务器监控工具" + local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 84) + 84|wallos) - local docker_name="wallos" - local docker_img="bellamy/wallos:latest" - local docker_port=8084 + local docker_name="wallos" + local docker_img="bellamy/wallos:latest" + local docker_port=8084 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/wallos && \ - docker run -d --name wallos \ - -v /home/docker/wallos/db:/var/www/html/db \ - -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ - -e TZ=UTC \ - -p ${docker_port}:80 \ - --restart unless-stopped \ - bellamy/wallos:latest + mkdir -p /home/docker/wallos && \ + docker run -d --name wallos \ + -v /home/docker/wallos/db:/var/www/html/db \ + -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ + -e TZ=UTC \ + -p ${docker_port}:80 \ + --restart unless-stopped \ + bellamy/wallos:latest - } + } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="开源个人订阅追踪器,可用于财务管理" + local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 85) + 85|immich) - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" - local docker_port="8085" - local app_size="3" + local app_name="immich图片视频管理器" + local app_text="高性能自托管照片和视频管理解决方案。" + local app_url="官网介绍: https://github.com/immich-app/immich" + local docker_name="immich" + local docker_port="8085" + local app_size="3" - docker_app_install() { - install git openssl - mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} + docker_app_install() { + install git openssl + mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} - wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml - wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml + wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml - docker compose up -d + docker compose up -d - clear - echo "已經安裝完成" - check_docker_app_ip + clear + echo "已經安裝完成" + check_docker_app_ip - } + } - docker_app_update() { - cd /home/docker/${docker_name} && docker compose down --rmi all - docker_app_install - } + docker_app_update() { + cd /home/docker/${docker_name} && docker compose down --rmi all + docker_app_install + } - docker_app_uninstall() { - cd /home/docker/${docker_name} && docker compose down --rmi all - rm -rf /home/docker/${docker_name} - echo "應用已卸載" - } + docker_app_uninstall() { + cd /home/docker/${docker_name} && docker compose down --rmi all + rm -rf /home/docker/${docker_name} + echo "應用已卸載" + } - docker_app_plus + docker_app_plus - ;; + ;; - 86) + 86|jellyfin) - local docker_name="jellyfin" - local docker_img="jellyfin/jellyfin" - local docker_port=8086 + local docker_name="jellyfin" + local docker_img="jellyfin/jellyfin" + local docker_port=8086 - docker_rum() { + docker_rum() { - mkdir -p /home/docker/jellyfin/media - chmod -R 777 /home/docker/jellyfin + mkdir -p /home/docker/jellyfin/media + chmod -R 777 /home/docker/jellyfin - docker run -d \ - --name jellyfin \ - --user root \ - --volume /home/docker/jellyfin/config:/config \ - --volume /home/docker/jellyfin/cache:/cache \ - --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ - -p ${docker_port}:8096 \ - -p 7359:7359/udp \ - --restart=unless-stopped \ - jellyfin/jellyfin + docker run -d \ + --name jellyfin \ + --user root \ + --volume /home/docker/jellyfin/config:/config \ + --volume /home/docker/jellyfin/cache:/cache \ + --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ + -p ${docker_port}:8096 \ + -p 7359:7359/udp \ + --restart=unless-stopped \ + jellyfin/jellyfin - } + } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="是一款开源媒体服务器软件" + local docker_url="官网介绍: https://jellyfin.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 87) + 87|synctv) - local docker_name="synctv" - local docker_img="synctvorg/synctv" - local docker_port=8087 + local docker_name="synctv" + local docker_img="synctvorg/synctv" + local docker_port=8087 - docker_rum() { + docker_rum() { - docker run -d \ - --name synctv \ - -v /home/docker/synctv:/root/.synctv \ - -p ${docker_port}:8080 \ - --restart=always \ - synctvorg/synctv + docker run -d \ + --name synctv \ + -v /home/docker/synctv:/root/.synctv \ + -p ${docker_port}:8080 \ + --restart=always \ + synctvorg/synctv - } + } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" - local docker_passwd="" - local app_size="1" - docker_app + local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" + local docker_url="官网介绍: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_passwd="" + local app_size="1" + docker_app - ;; + ;; - 88) + 88|owncast) - local docker_name="owncast" - local docker_img="owncast/owncast:latest" - local docker_port=8088 + local docker_name="owncast" + local docker_img="owncast/owncast:latest" + local docker_port=8088 - docker_rum() { + docker_rum() { - docker run -d \ - --name owncast \ - -p ${docker_port}:8080 \ - -p 1935:1935 \ - -v /home/docker/owncast/data:/app/data \ - --restart=always \ - owncast/owncast:latest + docker run -d \ + --name owncast \ + -p ${docker_port}:8080 \ + -p 1935:1935 \ + -v /home/docker/owncast/data:/app/data \ + --restart=always \ + owncast/owncast:latest - } + } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" - local app_size="1" - docker_app + local docker_describe="开源、免费的自建直播平台" + local docker_url="官网介绍: https://owncast.online" + local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" + local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local app_size="1" + docker_app - ;; + ;; - 0) - kejilion - ;; - *) - echo "無效的輸入!" - ;; - esac - break_end + 0) + kejilion + ;; + *) + ;; + esac + break_end + sub_choice="" - done +done } @@ -12274,8 +12281,7 @@ EOF 39) clear - send_stats "命令行歷史記錄" - bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) + linux_fav ;; 41) @@ -13091,8 +13097,9 @@ echo "開放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" - - +echo "命令收藏夾 k fav | k 命令收藏夾" +echo "應用市場管理 k app" +echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" } @@ -13224,6 +13231,10 @@ else iptables_panel ;; + 命令收藏夹|fav) + linux_fav + ;; + status|状态) shift send_stats "軟件狀態查看" @@ -13303,8 +13314,17 @@ else fi ;; + + app) + shift + send_stats "應用$@" + linux_panel "$@" + ;; + + *) k_info ;; esac fi + From 12d26f91cde9c12970a567e52700cf1aec5973f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:59:47 +0800 Subject: [PATCH 051/553] Update kejilion.sh --- cn/kejilion.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 60ca8499d..599c27ce1 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8532,7 +8532,7 @@ while true; do fi case $sub_choice in - 1|bt) + 1|bt|baota) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" @@ -8580,7 +8580,7 @@ while true; do install_panel ;; - 3|1panel) + 3|1p|1panel) local lujing="command -v 1pctl" local panelname="1Panel" @@ -8746,7 +8746,7 @@ while true; do done ;; - 8|qb) + 8|qb|QB) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" @@ -10924,7 +10924,7 @@ while true; do wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/${docker_name}/docker-compose.yml docker compose up -d From 40049b73554076416f2640c03b42df6a1eb3ab27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 14 Aug 2025 21:00:19 +0800 Subject: [PATCH 052/553] Update kejilion.sh --- kejilion.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 2d4e3de54..6c9203fc9 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8532,7 +8532,7 @@ while true; do fi case $sub_choice in - 1|bt) + 1|bt|baota) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" @@ -8580,7 +8580,7 @@ while true; do install_panel ;; - 3|1panel) + 3|1p|1panel) local lujing="command -v 1pctl" local panelname="1Panel" @@ -8746,7 +8746,7 @@ while true; do done ;; - 8|qb) + 8|qb|QB) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" @@ -10924,7 +10924,7 @@ while true; do wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/${docker_name}/docker-compose.yml docker compose up -d From df27ae7496bd310a9843130efdabe0fcd2bda888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 07:31:28 +0800 Subject: [PATCH 053/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 599c27ce1..adb506e2c 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10706,7 +10706,7 @@ while true; do local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden" + local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -10914,7 +10914,7 @@ while true; do local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" + local docker_name="immich_server" local docker_port="8085" local app_size="3" From 312e08753b25554473b7d72b0cee356fac527ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 07:31:57 +0800 Subject: [PATCH 054/553] Update kejilion.sh --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 6c9203fc9..2553bb345 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10706,7 +10706,7 @@ while true; do local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden" + local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -10914,7 +10914,7 @@ while true; do local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" + local docker_name="immich_server" local docker_port="8085" local app_size="3" From 8e821dae9af79690054621dccc528a69ad94be0c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 15 Aug 2025 00:09:17 +0000 Subject: [PATCH 055/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-15=2000:09:17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 20 ++++++++++---------- jp/kejilion.sh | 24 ++++++++++++------------ kr/kejilion.sh | 14 +++++++------- tw/kejilion.sh | 12 ++++++------ 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 3af7d8ae4..12a8a1e7d 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1624,7 +1624,7 @@ nginx_upgrade() { docker restart $ldnmp_pods > /dev/null 2>&1 send_stats "renew$ldnmp_pods" - echo "renew${ldnmp_pods}Finish" + echo "renew${ldnmp_pods}Finished" } @@ -2720,7 +2720,7 @@ setup_docker_dir() { docker_app() { -send_stats "${docker_name}manage" +send_stats "${docker_name}Management" while true; do clear @@ -3377,7 +3377,7 @@ ldnmp_web_status() { echo "" echo "Site Directory" echo "------------------------" - echo -e "data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" + echo -e "Data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" echo "------------------------" echo "" echo "operate" @@ -3709,7 +3709,7 @@ delete_forwarding_service() { read -e -p "Please enter the service name that needs to be deleted:" service_name # Use sed to delete the service and its related configurations sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "Serve$service_nameDeleted successfully from frpc.toml" + echo "Service$service_nameDeleted successfully from frpc.toml" docker restart frpc @@ -8532,7 +8532,7 @@ while true; do fi case $sub_choice in - 1|bt) + 1|bt|baota) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" @@ -8580,7 +8580,7 @@ while true; do install_panel ;; - 3|1panel) + 3|1p|1panel) local lujing="command -v 1pctl" local panelname="1Panel" @@ -8746,7 +8746,7 @@ while true; do done ;; - 8|qb) + 8|qb|QB) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" @@ -10706,7 +10706,7 @@ while true; do local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden" + local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -10914,7 +10914,7 @@ while true; do local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" + local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -10924,7 +10924,7 @@ while true; do wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/${docker_name}/docker-compose.yml docker compose up -d diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 6c0e6868c..8cb98949f 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -5729,7 +5729,7 @@ restore_backup() { if [ $? -eq 0 ]; then echo "バックアップと復元を正常に!" else - echo "バックアップリカバリに失敗しました!" + echo "バックアップリカバリが失敗しました!" exit 1 fi } @@ -5901,7 +5901,7 @@ use_connection() { IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "接続$name ($ip)..." + echo "に接続します$name ($ip)..." if [[ -f "$password_or_key" ]]; then # キーに接続します ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip" @@ -6282,7 +6282,7 @@ run_task() { 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" @@ -6362,7 +6362,7 @@ schedule_task() { # 同じタスクが既に存在するかどうかを確認してください if crontab -l | grep -q "k rsync_run $num"; then - echo "错误: 该任务的定时同步已存在!" + echo "エラー:このタスクのタイミング同期はすでに存在しています!" return fi @@ -8532,7 +8532,7 @@ while true; do fi case $sub_choice in - 1|bt) + 1|bt|baota) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" @@ -8580,7 +8580,7 @@ while true; do install_panel ;; - 3|1panel) + 3|1p|1panel) local lujing="command -v 1pctl" local panelname="1Panel" @@ -8746,7 +8746,7 @@ while true; do done ;; - 8|qb) + 8|qb|QB) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" @@ -10706,7 +10706,7 @@ while true; do local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden" + local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -10914,7 +10914,7 @@ while true; do local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" + local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -10924,7 +10924,7 @@ while true; do wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/${docker_name}/docker-compose.yml docker compose up -d @@ -12306,7 +12306,7 @@ EOF 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 "9.基本的なツールをインストールします${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" echo "------------------------------------------------" read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice @@ -12752,7 +12752,7 @@ while true; do 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}Tech Lionスクリプトをインストールします${gl_kjlan}12. ${gl_bai}システムを更新します${gl_kjlan}13. ${gl_bai}システムを掃除します" + echo -e "${gl_kjlan}11. ${gl_bai}Tech Lionスクリプトをインストールします${gl_kjlan}12. ${gl_bai}システムを更新します${gl_kjlan}13. ${gl_bai}システムをきれいにします" echo -e "${gl_kjlan}14. ${gl_bai}Dockerをインストールします${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}" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 9822eb994..5130534f4 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -8532,7 +8532,7 @@ while true; do fi case $sub_choice in - 1|bt) + 1|bt|baota) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" @@ -8580,7 +8580,7 @@ while true; do install_panel ;; - 3|1panel) + 3|1p|1panel) local lujing="command -v 1pctl" local panelname="1Panel" @@ -8746,7 +8746,7 @@ while true; do done ;; - 8|qb) + 8|qb|QB) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" @@ -10706,7 +10706,7 @@ while true; do local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden" + local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -10914,7 +10914,7 @@ while true; do local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" + local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -10924,7 +10924,7 @@ while true; do wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/${docker_name}/docker-compose.yml docker compose up -d @@ -13064,7 +13064,7 @@ echo "스크립트 시작 k" echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" echo "업데이트 시스템 K 업데이트 | K 업데이트" -echo "깨끗한 시스템 쓰레기 K Clean | k 청소" +echo "깨끗한 시스템 쓰레기 K Clean | K 청소" echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" echo "BBR3 제어판 K BBR3 | K bbrv3" echo "커널 튜닝 패널 K nhyh | K 커널 최적화" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index fbbe65333..d5bcfe726 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -8532,7 +8532,7 @@ while true; do fi case $sub_choice in - 1|bt) + 1|bt|baota) local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" @@ -8580,7 +8580,7 @@ while true; do install_panel ;; - 3|1panel) + 3|1p|1panel) local lujing="command -v 1pctl" local panelname="1Panel" @@ -8746,7 +8746,7 @@ while true; do done ;; - 8|qb) + 8|qb|QB) local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" @@ -10706,7 +10706,7 @@ while true; do local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" - local docker_name="linkwarden" + local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -10914,7 +10914,7 @@ while true; do local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" - local docker_name="immich" + local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -10924,7 +10924,7 @@ while true; do wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O .env ${gh_proxy}github.com/immich-app/immich/releases/latest/download/example.env - sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/cloud/docker-compose.yml + sed -i "s/2283:2283/${docker_port}:2283/g" /home/docker/${docker_name}/docker-compose.yml docker compose up -d From 457c4a8e9d44600f5487d5c389cd66e98c03745c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 15:47:50 +0800 Subject: [PATCH 056/553] Update kejilion.sh --- cn/kejilion.sh | 191 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 139 insertions(+), 52 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index adb506e2c..23a83d4a7 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2760,8 +2760,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2775,8 +2775,8 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2791,8 +2791,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" send_stats "卸载$docker_name" ;; @@ -2872,19 +2872,19 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 2) docker_app_update - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt ;; 5) @@ -3549,21 +3549,21 @@ while true; do install wget iptables_open panel_app_install - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}安装" ;; 2) panel_app_manage - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}控制" ;; 3) panel_app_uninstall - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt send_stats "${panelname}卸载" ;; *) @@ -3862,6 +3862,7 @@ frps_main_ports() { frps_panel() { send_stats "FRP服务端" + local app_id="55" local docker_name="frps" local docker_port=8056 while true; do @@ -3892,8 +3893,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经安装完成" ;; 2) @@ -3902,8 +3903,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经更新完成" ;; 3) @@ -3913,8 +3914,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" ;; 5) @@ -3959,6 +3960,7 @@ frps_panel() { frpc_panel() { send_stats "FRP客户端" + local app_id="56" local docker_name="frpc" local docker_port=8055 while true; do @@ -3988,8 +3990,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经安装完成" ;; 2) @@ -3998,8 +4000,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经更新完成" ;; @@ -4009,8 +4011,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" ;; @@ -4041,6 +4043,7 @@ frpc_panel() { yt_menu_pro() { + local app_id="66" local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" @@ -4080,24 +4083,24 @@ yt_menu_pro() { install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." read ;; 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." yt-dlp -U - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." read ;; 3) send_stats "正在卸载 yt-dlp..." echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "卸载完成。按任意键继续..." read ;; 5) @@ -4911,7 +4914,6 @@ bbrv3() { echo "------------------------------------------------" echo "仅支持Debian/Ubuntu" echo "请备份数据,将为你升级Linux内核开启BBR3" - echo "VPS是512M内存的,请提前添加1G虚拟内存,防止因内存不足失联!" echo "------------------------------------------------" read -e -p "确定继续吗?(Y/N): " choice @@ -8533,7 +8535,7 @@ while true; do case $sub_choice in 1|bt|baota) - + local app_id="1" local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" @@ -8559,6 +8561,8 @@ while true; do ;; 2|aapanel) + + local app_id="2" local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" @@ -8582,6 +8586,7 @@ while true; do ;; 3|1p|1panel) + local app_id="3" local lujing="command -v 1pctl" local panelname="1Panel" local panelurl="https://1panel.cn/" @@ -8605,6 +8610,7 @@ while true; do ;; 4|npm) + local app_id="4" local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 @@ -8636,6 +8642,7 @@ while true; do 5|openlist) + local app_id="5" local docker_name="openlist" local docker_img="openlistteam/openlist:latest-aria2" local docker_port=5244 @@ -8666,6 +8673,7 @@ while true; do 6|webtop-ubuntu) + local app_id="6" local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 @@ -8706,6 +8714,8 @@ while true; do 7|nezha) clear send_stats "搭建哪吒" + + local app_id="7" local docker_name="nezha-dashboard" local docker_port=8008 while true; do @@ -8748,6 +8758,7 @@ while true; do 8|qb|QB) + local app_id="8" local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 @@ -8784,6 +8795,7 @@ while true; do send_stats "搭建邮局" clear install telnet + local app_id="9" local docker_name=“mailserver” while true; do check_docker_app @@ -8851,8 +8863,8 @@ while true; do --restart=always \ -d analogic/poste.io - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -8876,8 +8888,8 @@ while true; do --restart=always \ -d analogic/poste.i - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -8891,8 +8903,8 @@ while true; do docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" ;; @@ -8908,6 +8920,7 @@ while true; do 10|rocketchat) + local app_id="10" local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" @@ -8955,6 +8968,7 @@ while true; do 11|zentao) + local app_id="11" local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 @@ -8985,6 +8999,7 @@ while true; do ;; 12|qinglong) + local app_id="12" local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 @@ -9013,6 +9028,7 @@ while true; do ;; 13|cloudreve) + local app_id="13" local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" @@ -9048,6 +9064,7 @@ while true; do ;; 14|easyimage) + local app_id="14" local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=8014 @@ -9075,6 +9092,7 @@ while true; do ;; 15|emby) + local app_id="15" local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8015 @@ -9102,6 +9120,7 @@ while true; do ;; 16|looking) + local app_id="16" local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=8016 @@ -9123,6 +9142,7 @@ while true; do ;; 17|adguardhome) + local app_id="17" local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=8017 @@ -9155,6 +9175,7 @@ while true; do 18|onlyoffice) + local app_id="18" local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8018 @@ -9183,6 +9204,7 @@ while true; do 19|safeline) send_stats "搭建雷池" + local app_id="19" local docker_name=safeline-mgt local docker_port=9443 while true; do @@ -9208,8 +9230,8 @@ while true; do install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9221,8 +9243,8 @@ while true; do 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经更新完成" check_docker_app_ip @@ -9233,8 +9255,8 @@ while true; do 4) cd /data/safeline docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; @@ -9249,6 +9271,7 @@ while true; do ;; 20|portainer) + local app_id="20" local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=8020 @@ -9276,6 +9299,7 @@ while true; do ;; 21|vscode) + local app_id="21" local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8021 @@ -9298,6 +9322,7 @@ while true; do 22|uptime-kuma) + local app_id="22" local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=8022 @@ -9324,6 +9349,7 @@ while true; do ;; 23|memos) + local app_id="23" local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=8023 @@ -9343,6 +9369,7 @@ while true; do ;; 24|webtop) + local app_id="24" local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=8024 @@ -9383,6 +9410,7 @@ while true; do ;; 25|nextcloud) + local app_id="25" local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8025 @@ -9403,6 +9431,7 @@ while true; do ;; 26|qd) + local app_id="26" local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8026 @@ -9422,6 +9451,7 @@ while true; do ;; 27|dockge) + local app_id="27" local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=8027 @@ -9441,6 +9471,7 @@ while true; do ;; 28|speedtest) + local app_id="28" local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 @@ -9460,6 +9491,7 @@ while true; do ;; 29|searxng) + local app_id="29" local docker_name="searxng" local docker_img="searxng/searxng" local docker_port=8029 @@ -9484,6 +9516,7 @@ while true; do ;; 30|photoprism) + local app_id="30" local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=8030 @@ -9516,6 +9549,7 @@ while true; do 31|s-pdf) + local app_id="31" local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8031 @@ -9542,6 +9576,7 @@ while true; do ;; 32|drawio) + local app_id="32" local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=8032 @@ -9562,6 +9597,7 @@ while true; do ;; 33|sun-panel) + local app_id="33" local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=8033 @@ -9586,6 +9622,7 @@ while true; do ;; 34|pingvin-share) + local app_id="34" local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=8034 @@ -9610,6 +9647,7 @@ while true; do 35|moments) + local app_id="35" local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 @@ -9637,6 +9675,7 @@ while true; do 36|lobe-chat) + local app_id="36" local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 @@ -9658,6 +9697,7 @@ while true; do ;; 37|myip) + local app_id="37" local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 @@ -9692,6 +9732,7 @@ while true; do 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 app_id="39" local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 @@ -9711,6 +9752,7 @@ while true; do ;; 40|webssh) + local app_id="40" local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 @@ -9728,6 +9770,7 @@ while true; do 41|haozi) + local app_id="41" local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" @@ -9752,6 +9795,7 @@ while true; do 42|nexterm) + local app_id="42" local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 @@ -9776,6 +9820,7 @@ while true; do ;; 43|hbbs) + local app_id="43" local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9796,6 +9841,7 @@ while true; do ;; 44|hbbr) + local app_id="44" local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9815,6 +9861,7 @@ while true; do ;; 45|registry) + local app_id="45" local docker_name="registry" local docker_img="registry:2" local docker_port=8045 @@ -9840,6 +9887,7 @@ while true; do ;; 46|ghproxy) + local app_id="46" local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 @@ -9860,6 +9908,7 @@ while true; do 47|prometheus|grafana) + local app_id="47" local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" @@ -9898,6 +9947,7 @@ while true; do ;; 48|node-exporter) + local app_id="48" local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 @@ -9922,6 +9972,7 @@ while true; do ;; 49|cadvisor) + local app_id="49" local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 @@ -9952,6 +10003,7 @@ while true; do 50|changedetection) + local app_id="50" local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 @@ -9982,6 +10034,7 @@ while true; do 52|dpanel) + local app_id="52" local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 @@ -10005,6 +10058,7 @@ while true; do ;; 53|llama3) + local app_id="53" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10025,6 +10079,7 @@ while true; do 54|amh) + local app_id="54" local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" @@ -10047,7 +10102,7 @@ while true; do 55|frps) - frps_panel + frps_panel ;; 56|frpc) @@ -10055,6 +10110,7 @@ while true; do ;; 57|deepseek) + local app_id="57" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10075,6 +10131,7 @@ while true; do 58|dify) + local app_id="58" local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" @@ -10113,7 +10170,8 @@ while true; do ;; 59|new-api) - local app_name="New API" + local app_id="59" + local app_name="NewAPI" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" @@ -10165,6 +10223,7 @@ while true; do 60|jms) + local app_id="60" local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" @@ -10202,6 +10261,7 @@ while true; do ;; 61|libretranslate) + local app_id="61" local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 @@ -10227,6 +10287,7 @@ while true; do 62|ragflow) + local app_id="62" local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" @@ -10265,6 +10326,7 @@ while true; do 63|open-webui) + local app_id="63" local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 @@ -10284,6 +10346,7 @@ while true; do ;; 64|it-tools) + local app_id="64" local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 @@ -10302,6 +10365,7 @@ while true; do 65|n8n) + local app_id="65" local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 @@ -10341,6 +10405,7 @@ while true; do 67|ddns) + local app_id="67" local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=8067 @@ -10364,6 +10429,7 @@ while true; do ;; 68|allinssl) + local app_id="68" local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=8068 @@ -10382,6 +10448,7 @@ while true; do 69|sftpgo) + local app_id="69" local docker_name="sftpgo" local docker_img="drakkan/sftpgo:latest" local docker_port=8069 @@ -10413,6 +10480,7 @@ while true; do 70|astrbot) + local app_id="70" local docker_name="astrbot" local docker_img="soulter/astrbot:latest" local docker_port=8070 @@ -10444,6 +10512,7 @@ while true; do 71|navidrome) + local app_id="71" local docker_name="navidrome" local docker_img="deluan/navidrome:latest" local docker_port=8071 @@ -10473,6 +10542,7 @@ while true; do 72|bitwarden) + local app_id="72" local docker_name="bitwarden" local docker_img="vaultwarden/server" local docker_port=8072 @@ -10502,6 +10572,7 @@ while true; do 73|libretv) + local app_id="73" local docker_name="libretv" local docker_img="bestzwei/libretv:latest" local docker_port=8073 @@ -10531,6 +10602,7 @@ while true; do 74|moontv) + local app_id="74" local docker_name="moontv" local docker_img="ghcr.io/senshinya/moontv:latest" local docker_port=8074 @@ -10560,6 +10632,7 @@ while true; do 75|melody) + local app_id="75" local docker_name="melody" local docker_img="foamzou/melody:latest" local docker_port=8075 @@ -10589,6 +10662,7 @@ while true; do 76|dosgame) + local app_id="76" local docker_name="dosgame" local docker_img="oldiy/dosgame-web-docker:latest" local docker_port=8076 @@ -10614,6 +10688,7 @@ while true; do 77|xunlei) + local app_id="77" local docker_name="xunlei" local docker_img="cnk3x/xunlei" local docker_port=8077 @@ -10649,6 +10724,7 @@ while true; do 78|PandaWiki) + local app_id="78" local app_name="PandaWiki" local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" local app_url="官方介绍: https://github.com/chaitin/PandaWiki" @@ -10676,6 +10752,7 @@ while true; do 79|beszel) + local app_id="79" local docker_name="beszel" local docker_img="henrygd/beszel" local docker_port=8079 @@ -10703,6 +10780,8 @@ while true; do 80|linkwarden) + + local app_id="80" local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" @@ -10774,6 +10853,7 @@ while true; do 81|jitsi) + local app_id="81" local app_name="JitsiMeet视频会议" local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" local app_url="官方网站: https://jitsi.org/" @@ -10824,6 +10904,7 @@ while true; do 82|gpt-load) + local app_id="82" local docker_name="gpt-load" local docker_img="tbphp/gpt-load:latest" local docker_port=8082 @@ -10852,6 +10933,7 @@ while true; do 83|komari) + local app_id="83" local docker_name="komari" local docker_img="ghcr.io/komari-monitor/komari:latest" local docker_port=8083 @@ -10883,6 +10965,7 @@ while true; do 84|wallos) + local app_id="84" local docker_name="wallos" local docker_img="bellamy/wallos:latest" local docker_port=8084 @@ -10911,6 +10994,7 @@ while true; do 85|immich) + local app_id="85" local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" @@ -10953,6 +11037,7 @@ while true; do 86|jellyfin) + local app_id="86" local docker_name="jellyfin" local docker_img="jellyfin/jellyfin" local docker_port=8086 @@ -10988,6 +11073,7 @@ while true; do 87|synctv) + local app_id="87" local docker_name="synctv" local docker_img="synctvorg/synctv" local docker_port=8087 @@ -11015,6 +11101,7 @@ while true; do 88|owncast) + local app_id="88" local docker_name="owncast" local docker_img="owncast/owncast:latest" local docker_port=8088 From 3b509a1c9e2c429108a6e4d1e0b2ef7a7d1e0b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 15:48:20 +0800 Subject: [PATCH 057/553] Update kejilion.sh --- kejilion.sh | 191 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 139 insertions(+), 52 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 2553bb345..1882d4dbc 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2760,8 +2760,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2775,8 +2775,8 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2791,8 +2791,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" send_stats "卸载$docker_name" ;; @@ -2872,19 +2872,19 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 2) docker_app_update - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt ;; 5) @@ -3549,21 +3549,21 @@ while true; do install wget iptables_open panel_app_install - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}安装" ;; 2) panel_app_manage - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}控制" ;; 3) panel_app_uninstall - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt send_stats "${panelname}卸载" ;; *) @@ -3862,6 +3862,7 @@ frps_main_ports() { frps_panel() { send_stats "FRP服务端" + local app_id="55" local docker_name="frps" local docker_port=8056 while true; do @@ -3892,8 +3893,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经安装完成" ;; 2) @@ -3902,8 +3903,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经更新完成" ;; 3) @@ -3913,8 +3914,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" ;; 5) @@ -3959,6 +3960,7 @@ frps_panel() { frpc_panel() { send_stats "FRP客户端" + local app_id="56" local docker_name="frpc" local docker_port=8055 while true; do @@ -3988,8 +3990,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经安装完成" ;; 2) @@ -3998,8 +4000,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经更新完成" ;; @@ -4009,8 +4011,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" ;; @@ -4041,6 +4043,7 @@ frpc_panel() { yt_menu_pro() { + local app_id="66" local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" @@ -4080,24 +4083,24 @@ yt_menu_pro() { install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." read ;; 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." yt-dlp -U - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." read ;; 3) send_stats "正在卸载 yt-dlp..." echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "卸载完成。按任意键继续..." read ;; 5) @@ -4911,7 +4914,6 @@ bbrv3() { echo "------------------------------------------------" echo "仅支持Debian/Ubuntu" echo "请备份数据,将为你升级Linux内核开启BBR3" - echo "VPS是512M内存的,请提前添加1G虚拟内存,防止因内存不足失联!" echo "------------------------------------------------" read -e -p "确定继续吗?(Y/N): " choice @@ -8533,7 +8535,7 @@ while true; do case $sub_choice in 1|bt|baota) - + local app_id="1" local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" @@ -8559,6 +8561,8 @@ while true; do ;; 2|aapanel) + + local app_id="2" local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" @@ -8582,6 +8586,7 @@ while true; do ;; 3|1p|1panel) + local app_id="3" local lujing="command -v 1pctl" local panelname="1Panel" local panelurl="https://1panel.cn/" @@ -8605,6 +8610,7 @@ while true; do ;; 4|npm) + local app_id="4" local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 @@ -8636,6 +8642,7 @@ while true; do 5|openlist) + local app_id="5" local docker_name="openlist" local docker_img="openlistteam/openlist:latest-aria2" local docker_port=5244 @@ -8666,6 +8673,7 @@ while true; do 6|webtop-ubuntu) + local app_id="6" local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 @@ -8706,6 +8714,8 @@ while true; do 7|nezha) clear send_stats "搭建哪吒" + + local app_id="7" local docker_name="nezha-dashboard" local docker_port=8008 while true; do @@ -8748,6 +8758,7 @@ while true; do 8|qb|QB) + local app_id="8" local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 @@ -8784,6 +8795,7 @@ while true; do send_stats "搭建邮局" clear install telnet + local app_id="9" local docker_name=“mailserver” while true; do check_docker_app @@ -8851,8 +8863,8 @@ while true; do --restart=always \ -d analogic/poste.io - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -8876,8 +8888,8 @@ while true; do --restart=always \ -d analogic/poste.i - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -8891,8 +8903,8 @@ while true; do docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "应用已卸载" ;; @@ -8908,6 +8920,7 @@ while true; do 10|rocketchat) + local app_id="10" local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" @@ -8955,6 +8968,7 @@ while true; do 11|zentao) + local app_id="11" local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 @@ -8985,6 +8999,7 @@ while true; do ;; 12|qinglong) + local app_id="12" local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 @@ -9013,6 +9028,7 @@ while true; do ;; 13|cloudreve) + local app_id="13" local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" @@ -9048,6 +9064,7 @@ while true; do ;; 14|easyimage) + local app_id="14" local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=8014 @@ -9075,6 +9092,7 @@ while true; do ;; 15|emby) + local app_id="15" local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8015 @@ -9102,6 +9120,7 @@ while true; do ;; 16|looking) + local app_id="16" local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=8016 @@ -9123,6 +9142,7 @@ while true; do ;; 17|adguardhome) + local app_id="17" local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=8017 @@ -9155,6 +9175,7 @@ while true; do 18|onlyoffice) + local app_id="18" local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8018 @@ -9183,6 +9204,7 @@ while true; do 19|safeline) send_stats "搭建雷池" + local app_id="19" local docker_name=safeline-mgt local docker_port=9443 while true; do @@ -9208,8 +9230,8 @@ while true; do install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9221,8 +9243,8 @@ while true; do 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经更新完成" check_docker_app_ip @@ -9233,8 +9255,8 @@ while true; do 4) cd /data/safeline docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; @@ -9249,6 +9271,7 @@ while true; do ;; 20|portainer) + local app_id="20" local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=8020 @@ -9276,6 +9299,7 @@ while true; do ;; 21|vscode) + local app_id="21" local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8021 @@ -9298,6 +9322,7 @@ while true; do 22|uptime-kuma) + local app_id="22" local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=8022 @@ -9324,6 +9349,7 @@ while true; do ;; 23|memos) + local app_id="23" local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=8023 @@ -9343,6 +9369,7 @@ while true; do ;; 24|webtop) + local app_id="24" local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=8024 @@ -9383,6 +9410,7 @@ while true; do ;; 25|nextcloud) + local app_id="25" local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8025 @@ -9403,6 +9431,7 @@ while true; do ;; 26|qd) + local app_id="26" local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8026 @@ -9422,6 +9451,7 @@ while true; do ;; 27|dockge) + local app_id="27" local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=8027 @@ -9441,6 +9471,7 @@ while true; do ;; 28|speedtest) + local app_id="28" local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 @@ -9460,6 +9491,7 @@ while true; do ;; 29|searxng) + local app_id="29" local docker_name="searxng" local docker_img="searxng/searxng" local docker_port=8029 @@ -9484,6 +9516,7 @@ while true; do ;; 30|photoprism) + local app_id="30" local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=8030 @@ -9516,6 +9549,7 @@ while true; do 31|s-pdf) + local app_id="31" local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8031 @@ -9542,6 +9576,7 @@ while true; do ;; 32|drawio) + local app_id="32" local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=8032 @@ -9562,6 +9597,7 @@ while true; do ;; 33|sun-panel) + local app_id="33" local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=8033 @@ -9586,6 +9622,7 @@ while true; do ;; 34|pingvin-share) + local app_id="34" local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=8034 @@ -9610,6 +9647,7 @@ while true; do 35|moments) + local app_id="35" local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 @@ -9637,6 +9675,7 @@ while true; do 36|lobe-chat) + local app_id="36" local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 @@ -9658,6 +9697,7 @@ while true; do ;; 37|myip) + local app_id="37" local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 @@ -9692,6 +9732,7 @@ while true; do 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 app_id="39" local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 @@ -9711,6 +9752,7 @@ while true; do ;; 40|webssh) + local app_id="40" local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 @@ -9728,6 +9770,7 @@ while true; do 41|haozi) + local app_id="41" local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" @@ -9752,6 +9795,7 @@ while true; do 42|nexterm) + local app_id="42" local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 @@ -9776,6 +9820,7 @@ while true; do ;; 43|hbbs) + local app_id="43" local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9796,6 +9841,7 @@ while true; do ;; 44|hbbr) + local app_id="44" local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9815,6 +9861,7 @@ while true; do ;; 45|registry) + local app_id="45" local docker_name="registry" local docker_img="registry:2" local docker_port=8045 @@ -9840,6 +9887,7 @@ while true; do ;; 46|ghproxy) + local app_id="46" local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 @@ -9860,6 +9908,7 @@ while true; do 47|prometheus|grafana) + local app_id="47" local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" @@ -9898,6 +9947,7 @@ while true; do ;; 48|node-exporter) + local app_id="48" local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 @@ -9922,6 +9972,7 @@ while true; do ;; 49|cadvisor) + local app_id="49" local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 @@ -9952,6 +10003,7 @@ while true; do 50|changedetection) + local app_id="50" local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 @@ -9982,6 +10034,7 @@ while true; do 52|dpanel) + local app_id="52" local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 @@ -10005,6 +10058,7 @@ while true; do ;; 53|llama3) + local app_id="53" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10025,6 +10079,7 @@ while true; do 54|amh) + local app_id="54" local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" @@ -10047,7 +10102,7 @@ while true; do 55|frps) - frps_panel + frps_panel ;; 56|frpc) @@ -10055,6 +10110,7 @@ while true; do ;; 57|deepseek) + local app_id="57" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10075,6 +10131,7 @@ while true; do 58|dify) + local app_id="58" local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" @@ -10113,7 +10170,8 @@ while true; do ;; 59|new-api) - local app_name="New API" + local app_id="59" + local app_name="NewAPI" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" @@ -10165,6 +10223,7 @@ while true; do 60|jms) + local app_id="60" local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" @@ -10202,6 +10261,7 @@ while true; do ;; 61|libretranslate) + local app_id="61" local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 @@ -10227,6 +10287,7 @@ while true; do 62|ragflow) + local app_id="62" local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" @@ -10265,6 +10326,7 @@ while true; do 63|open-webui) + local app_id="63" local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 @@ -10284,6 +10346,7 @@ while true; do ;; 64|it-tools) + local app_id="64" local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 @@ -10302,6 +10365,7 @@ while true; do 65|n8n) + local app_id="65" local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 @@ -10341,6 +10405,7 @@ while true; do 67|ddns) + local app_id="67" local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=8067 @@ -10364,6 +10429,7 @@ while true; do ;; 68|allinssl) + local app_id="68" local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=8068 @@ -10382,6 +10448,7 @@ while true; do 69|sftpgo) + local app_id="69" local docker_name="sftpgo" local docker_img="drakkan/sftpgo:latest" local docker_port=8069 @@ -10413,6 +10480,7 @@ while true; do 70|astrbot) + local app_id="70" local docker_name="astrbot" local docker_img="soulter/astrbot:latest" local docker_port=8070 @@ -10444,6 +10512,7 @@ while true; do 71|navidrome) + local app_id="71" local docker_name="navidrome" local docker_img="deluan/navidrome:latest" local docker_port=8071 @@ -10473,6 +10542,7 @@ while true; do 72|bitwarden) + local app_id="72" local docker_name="bitwarden" local docker_img="vaultwarden/server" local docker_port=8072 @@ -10502,6 +10572,7 @@ while true; do 73|libretv) + local app_id="73" local docker_name="libretv" local docker_img="bestzwei/libretv:latest" local docker_port=8073 @@ -10531,6 +10602,7 @@ while true; do 74|moontv) + local app_id="74" local docker_name="moontv" local docker_img="ghcr.io/senshinya/moontv:latest" local docker_port=8074 @@ -10560,6 +10632,7 @@ while true; do 75|melody) + local app_id="75" local docker_name="melody" local docker_img="foamzou/melody:latest" local docker_port=8075 @@ -10589,6 +10662,7 @@ while true; do 76|dosgame) + local app_id="76" local docker_name="dosgame" local docker_img="oldiy/dosgame-web-docker:latest" local docker_port=8076 @@ -10614,6 +10688,7 @@ while true; do 77|xunlei) + local app_id="77" local docker_name="xunlei" local docker_img="cnk3x/xunlei" local docker_port=8077 @@ -10649,6 +10724,7 @@ while true; do 78|PandaWiki) + local app_id="78" local app_name="PandaWiki" local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" local app_url="官方介绍: https://github.com/chaitin/PandaWiki" @@ -10676,6 +10752,7 @@ while true; do 79|beszel) + local app_id="79" local docker_name="beszel" local docker_img="henrygd/beszel" local docker_port=8079 @@ -10703,6 +10780,8 @@ while true; do 80|linkwarden) + + local app_id="80" local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" @@ -10774,6 +10853,7 @@ while true; do 81|jitsi) + local app_id="81" local app_name="JitsiMeet视频会议" local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" local app_url="官方网站: https://jitsi.org/" @@ -10824,6 +10904,7 @@ while true; do 82|gpt-load) + local app_id="82" local docker_name="gpt-load" local docker_img="tbphp/gpt-load:latest" local docker_port=8082 @@ -10852,6 +10933,7 @@ while true; do 83|komari) + local app_id="83" local docker_name="komari" local docker_img="ghcr.io/komari-monitor/komari:latest" local docker_port=8083 @@ -10883,6 +10965,7 @@ while true; do 84|wallos) + local app_id="84" local docker_name="wallos" local docker_img="bellamy/wallos:latest" local docker_port=8084 @@ -10911,6 +10994,7 @@ while true; do 85|immich) + local app_id="85" local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" @@ -10953,6 +11037,7 @@ while true; do 86|jellyfin) + local app_id="86" local docker_name="jellyfin" local docker_img="jellyfin/jellyfin" local docker_port=8086 @@ -10988,6 +11073,7 @@ while true; do 87|synctv) + local app_id="87" local docker_name="synctv" local docker_img="synctvorg/synctv" local docker_port=8087 @@ -11015,6 +11101,7 @@ while true; do 88|owncast) + local app_id="88" local docker_name="owncast" local docker_img="owncast/owncast:latest" local docker_port=8088 From 06b7a91c3728774b954883a7b500258101383a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 15:57:30 +0800 Subject: [PATCH 058/553] Update kejilion.sh --- kejilion.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 1882d4dbc..7c741397d 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2761,7 +2761,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2776,7 +2776,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2873,12 +2873,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 2) docker_app_update - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall @@ -3550,13 +3550,13 @@ while true; do iptables_open panel_app_install - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}安装" ;; 2) panel_app_manage - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}控制" ;; @@ -3894,7 +3894,7 @@ frps_panel() { install_docker generate_frps_config - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经安装完成" ;; 2) @@ -3904,7 +3904,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经更新完成" ;; 3) @@ -3991,7 +3991,7 @@ frpc_panel() { install_docker configure_frpc - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经安装完成" ;; 2) @@ -4001,7 +4001,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经更新完成" ;; @@ -4084,7 +4084,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." read ;; 2) @@ -4092,7 +4092,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." read ;; 3) @@ -8864,7 +8864,7 @@ while true; do -d analogic/poste.io - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -8889,7 +8889,7 @@ while true; do -d analogic/poste.i - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -9231,7 +9231,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9244,7 +9244,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经更新完成" check_docker_app_ip From 86ad02a95e7844054ba4a179af3c5bffa4afe760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 15:59:19 +0800 Subject: [PATCH 059/553] Update kejilion.sh --- cn/kejilion.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 23a83d4a7..746464522 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2761,7 +2761,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2776,7 +2776,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "$docker_name 已经安装完成" @@ -2873,12 +2873,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 2) docker_app_update - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt ;; 3) docker_app_uninstall @@ -3550,13 +3550,13 @@ while true; do iptables_open panel_app_install - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}安装" ;; 2) panel_app_manage - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt send_stats "${panelname}控制" ;; @@ -3894,7 +3894,7 @@ frps_panel() { install_docker generate_frps_config - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经安装完成" ;; 2) @@ -3904,7 +3904,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP服务端已经更新完成" ;; 3) @@ -3991,7 +3991,7 @@ frpc_panel() { install_docker configure_frpc - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经安装完成" ;; 2) @@ -4001,7 +4001,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "FRP客户端已经更新完成" ;; @@ -4084,7 +4084,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "安装完成。按任意键继续..." read ;; 2) @@ -4092,7 +4092,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt echo "更新完成。按任意键继续..." read ;; 3) @@ -8864,7 +8864,7 @@ while true; do -d analogic/poste.io - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -8889,7 +8889,7 @@ while true; do -d analogic/poste.i - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "poste.io已经安装完成" @@ -9231,7 +9231,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9244,7 +9244,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt clear echo "雷池WAF面板已经更新完成" check_docker_app_ip From fff796a7fe29a3d0043e6a5389a4009ceed919f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 16:12:41 +0800 Subject: [PATCH 060/553] Update kejilion.sh --- cn/kejilion.sh | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 746464522..83dd2fc6d 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2717,6 +2717,13 @@ setup_docker_dir() { } +add_app_id() { +mkdir -p /home/docker +touch /home/docker/appno.txt +grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + +} + docker_app() { @@ -2761,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name 已经安装完成" @@ -2776,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name 已经安装完成" @@ -2873,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 2) docker_app_update - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 3) docker_app_uninstall @@ -3550,13 +3557,13 @@ while true; do iptables_open panel_app_install - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}安装" ;; 2) panel_app_manage - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}控制" ;; @@ -3894,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP服务端已经安装完成" ;; 2) @@ -3904,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP服务端已经更新完成" ;; 3) @@ -3991,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP客户端已经安装完成" ;; 2) @@ -4001,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP客户端已经更新完成" ;; @@ -4084,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "安装完成。按任意键继续..." read ;; 2) @@ -4092,7 +4099,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "更新完成。按任意键继续..." read ;; 3) @@ -8864,7 +8871,7 @@ while true; do -d analogic/poste.io - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io已经安装完成" @@ -8889,7 +8896,7 @@ while true; do -d analogic/poste.i - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io已经安装完成" @@ -9231,7 +9238,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9244,7 +9251,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "雷池WAF面板已经更新完成" check_docker_app_ip From 60879deb4af904db6cd762dc3003026a8df7551b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 16:13:18 +0800 Subject: [PATCH 061/553] Update kejilion.sh --- kejilion.sh | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 7c741397d..9ea5f7ea3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2717,6 +2717,13 @@ setup_docker_dir() { } +add_app_id() { +mkdir -p /home/docker +touch /home/docker/appno.txt +grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + +} + docker_app() { @@ -2761,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name 已经安装完成" @@ -2776,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name 已经安装完成" @@ -2873,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 2) docker_app_update - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 3) docker_app_uninstall @@ -3550,13 +3557,13 @@ while true; do iptables_open panel_app_install - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}安装" ;; 2) panel_app_manage - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}控制" ;; @@ -3894,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP服务端已经安装完成" ;; 2) @@ -3904,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP服务端已经更新完成" ;; 3) @@ -3991,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP客户端已经安装完成" ;; 2) @@ -4001,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP客户端已经更新完成" ;; @@ -4084,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "安装完成。按任意键继续..." read ;; 2) @@ -4092,7 +4099,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "更新完成。按任意键继续..." read ;; 3) @@ -8864,7 +8871,7 @@ while true; do -d analogic/poste.io - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io已经安装完成" @@ -8889,7 +8896,7 @@ while true; do -d analogic/poste.i - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io已经安装完成" @@ -9231,7 +9238,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9244,7 +9251,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - touch /home/docker/appno.txt; grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "雷池WAF面板已经更新完成" check_docker_app_ip From 7d582e269d084c3421bd597f12f350d35b607223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:10:45 +0800 Subject: [PATCH 062/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 83dd2fc6d..37a29051d 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10390,7 +10390,7 @@ while true; do -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ - -e N8N_WEBHOOK_URL=https://${yuming}/ \ + -e WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} From 930a44e83a596bf844ea33ccbf4ae8dca6d4a3cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:11:37 +0800 Subject: [PATCH 063/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 9ea5f7ea3..6a4216cc9 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10390,7 +10390,7 @@ while true; do -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ - -e N8N_WEBHOOK_URL=https://${yuming}/ \ + -e WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} From dbd4d272a3833b1ccf85ee61a1f5ba8841a8d37c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 15 Aug 2025 12:28:25 +0000 Subject: [PATCH 064/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-15=2012:28:25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 232 ++++++++++++++++++++++++++++------------ jp/kejilion.sh | 280 +++++++++++++++++++++++++++++++++---------------- kr/kejilion.sh | 276 ++++++++++++++++++++++++++++++++---------------- tw/kejilion.sh | 200 +++++++++++++++++++++++++---------- 4 files changed, 682 insertions(+), 306 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 12a8a1e7d..4aca50ce2 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1624,7 +1624,7 @@ nginx_upgrade() { docker restart $ldnmp_pods > /dev/null 2>&1 send_stats "renew$ldnmp_pods" - echo "renew${ldnmp_pods}Finished" + echo "renew${ldnmp_pods}Finish" } @@ -1740,7 +1740,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to the mode parameter + # Decide to turn on or off WAF according to mode parameters if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -2717,10 +2717,17 @@ setup_docker_dir() { } +add_app_id() { +mkdir -p /home/docker +touch /home/docker/appno.txt +grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + +} + docker_app() { -send_stats "${docker_name}Management" +send_stats "${docker_name}manage" while true; do clear @@ -2760,8 +2767,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_nameInstalled" @@ -2775,8 +2782,8 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_nameInstalled" @@ -2791,8 +2798,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -2872,19 +2879,19 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 2) docker_app_update - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt ;; 5) @@ -3377,7 +3384,7 @@ ldnmp_web_status() { echo "" echo "Site Directory" echo "------------------------" - echo -e "Data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" + echo -e "data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" echo "------------------------" echo "" echo "operate" @@ -3549,21 +3556,21 @@ while true; do install wget iptables_open panel_app_install - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}Install" ;; 2) panel_app_manage - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}control" ;; 3) panel_app_uninstall - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt send_stats "${panelname}uninstall" ;; *) @@ -3709,7 +3716,7 @@ delete_forwarding_service() { read -e -p "Please enter the service name that needs to be deleted:" service_name # Use sed to delete the service and its related configurations sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "Service$service_nameDeleted successfully from frpc.toml" + echo "Serve$service_nameDeleted successfully from frpc.toml" docker restart frpc @@ -3862,6 +3869,7 @@ frps_main_ports() { frps_panel() { send_stats "FRP server" + local app_id="55" local docker_name="frps" local docker_port=8056 while true; do @@ -3892,8 +3900,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "The FRP server has been installed" ;; 2) @@ -3902,8 +3910,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "The FRP server has been updated" ;; 3) @@ -3913,8 +3921,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" ;; 5) @@ -3959,6 +3967,7 @@ frps_panel() { frpc_panel() { send_stats "FRP Client" + local app_id="56" local docker_name="frpc" local docker_port=8055 while true; do @@ -3988,8 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "The FRP client has been installed" ;; 2) @@ -3998,8 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "The FRP client has been updated" ;; @@ -4009,8 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" ;; @@ -4041,6 +4050,7 @@ frpc_panel() { yt_menu_pro() { + local app_id="66" local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" @@ -4080,24 +4090,24 @@ yt_menu_pro() { install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "The installation is complete. Press any key to continue..." read ;; 2) send_stats "Update yt-dlp..." echo "Update yt-dlp..." yt-dlp -U - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "Update completed. Press any key to continue..." read ;; 3) send_stats "Uninstalling yt-dlp..." echo "Uninstalling yt-dlp..." rm -f /usr/local/bin/yt-dlp - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "Uninstall is complete. Press any key to continue..." read ;; 5) @@ -4911,7 +4921,6 @@ bbrv3() { echo "------------------------------------------------" echo "Only support Debian/Ubuntu" echo "Please back up the data and will enable BBR3 for you to upgrade the Linux kernel." - echo "VPS has 512M memory, please add 1G virtual memory in advance to prevent missing contact due to insufficient memory!" echo "------------------------------------------------" read -e -p "Are you sure to continue? (Y/N):" choice @@ -4980,7 +4989,7 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Operating system detected:$os_name $os_version" + echo "Detected operating systems:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." @@ -5809,7 +5818,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Example to create a new connection:" + echo "Create a new connection example:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -5950,7 +5959,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can be connected to other Linux systems via SSH" + echo "Can connect to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -7508,7 +7517,7 @@ linux_ldnmp() { echo -e "${gl_huang}------------------------" echo -e "${gl_huang}21. ${gl_bai}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy - domain name" - echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" + echo -e "${gl_huang}25. ${gl_bai}Install the Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" echo -e "${gl_huang}30. ${gl_bai}Customize static site" echo -e "${gl_huang}------------------------" @@ -7684,7 +7693,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Background login path: /admin" + echo "Backend login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -7915,7 +7924,7 @@ linux_ldnmp() { ;; 2) echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter to skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8533,7 +8542,7 @@ while true; do case $sub_choice in 1|bt|baota) - + local app_id="1" local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" @@ -8559,6 +8568,8 @@ while true; do ;; 2|aapanel) + + local app_id="2" local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" @@ -8582,6 +8593,7 @@ while true; do ;; 3|1p|1panel) + local app_id="3" local lujing="command -v 1pctl" local panelname="1Panel" local panelurl="https://1panel.cn/" @@ -8605,6 +8617,7 @@ while true; do ;; 4|npm) + local app_id="4" local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 @@ -8636,6 +8649,7 @@ while true; do 5|openlist) + local app_id="5" local docker_name="openlist" local docker_img="openlistteam/openlist:latest-aria2" local docker_port=5244 @@ -8666,6 +8680,7 @@ while true; do 6|webtop-ubuntu) + local app_id="6" local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 @@ -8706,6 +8721,8 @@ while true; do 7|nezha) clear send_stats "Build Nezha" + + local app_id="7" local docker_name="nezha-dashboard" local docker_port=8008 while true; do @@ -8748,6 +8765,7 @@ while true; do 8|qb|QB) + local app_id="8" local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 @@ -8784,6 +8802,7 @@ while true; do send_stats "Build a post office" clear install telnet + local app_id="9" local docker_name=“mailserver” while true; do check_docker_app @@ -8851,8 +8870,8 @@ while true; do --restart=always \ -d analogic/poste.io - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io has been installed" @@ -8876,8 +8895,8 @@ while true; do --restart=always \ -d analogic/poste.i - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io has been installed" @@ -8891,8 +8910,8 @@ while true; do docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "The app has been uninstalled" ;; @@ -8908,6 +8927,7 @@ while true; do 10|rocketchat) + local app_id="10" local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" @@ -8955,6 +8975,7 @@ while true; do 11|zentao) + local app_id="11" local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 @@ -8985,6 +9006,7 @@ while true; do ;; 12|qinglong) + local app_id="12" local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 @@ -9013,6 +9035,7 @@ while true; do ;; 13|cloudreve) + local app_id="13" local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" @@ -9048,6 +9071,7 @@ while true; do ;; 14|easyimage) + local app_id="14" local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=8014 @@ -9075,6 +9099,7 @@ while true; do ;; 15|emby) + local app_id="15" local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8015 @@ -9102,6 +9127,7 @@ while true; do ;; 16|looking) + local app_id="16" local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=8016 @@ -9123,6 +9149,7 @@ while true; do ;; 17|adguardhome) + local app_id="17" local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=8017 @@ -9155,6 +9182,7 @@ while true; do 18|onlyoffice) + local app_id="18" local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8018 @@ -9183,6 +9211,7 @@ while true; do 19|safeline) send_stats "Build a Thunder Pool" + local app_id="19" local docker_name=safeline-mgt local docker_port=9443 while true; do @@ -9208,8 +9237,8 @@ while true; do install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "The Thunder Pool WAF panel has been installed" check_docker_app_ip @@ -9221,8 +9250,8 @@ while true; do 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Thunder Pool WAF panel has been updated" check_docker_app_ip @@ -9233,8 +9262,8 @@ while true; do 4) cd /data/safeline docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" echo "docker compose down && docker compose down --rmi all" ;; @@ -9249,6 +9278,7 @@ while true; do ;; 20|portainer) + local app_id="20" local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=8020 @@ -9276,6 +9306,7 @@ while true; do ;; 21|vscode) + local app_id="21" local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8021 @@ -9298,6 +9329,7 @@ while true; do 22|uptime-kuma) + local app_id="22" local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=8022 @@ -9324,6 +9356,7 @@ while true; do ;; 23|memos) + local app_id="23" local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=8023 @@ -9343,6 +9376,7 @@ while true; do ;; 24|webtop) + local app_id="24" local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=8024 @@ -9383,6 +9417,7 @@ while true; do ;; 25|nextcloud) + local app_id="25" local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8025 @@ -9403,6 +9438,7 @@ while true; do ;; 26|qd) + local app_id="26" local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8026 @@ -9422,6 +9458,7 @@ while true; do ;; 27|dockge) + local app_id="27" local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=8027 @@ -9441,6 +9478,7 @@ while true; do ;; 28|speedtest) + local app_id="28" local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 @@ -9460,6 +9498,7 @@ while true; do ;; 29|searxng) + local app_id="29" local docker_name="searxng" local docker_img="searxng/searxng" local docker_port=8029 @@ -9484,6 +9523,7 @@ while true; do ;; 30|photoprism) + local app_id="30" local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=8030 @@ -9516,6 +9556,7 @@ while true; do 31|s-pdf) + local app_id="31" local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8031 @@ -9542,6 +9583,7 @@ while true; do ;; 32|drawio) + local app_id="32" local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=8032 @@ -9562,6 +9604,7 @@ while true; do ;; 33|sun-panel) + local app_id="33" local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=8033 @@ -9586,6 +9629,7 @@ while true; do ;; 34|pingvin-share) + local app_id="34" local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=8034 @@ -9610,6 +9654,7 @@ while true; do 35|moments) + local app_id="35" local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 @@ -9637,6 +9682,7 @@ while true; do 36|lobe-chat) + local app_id="36" local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 @@ -9658,6 +9704,7 @@ while true; do ;; 37|myip) + local app_id="37" local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 @@ -9692,6 +9739,7 @@ while true; do 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 app_id="39" local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 @@ -9711,6 +9759,7 @@ while true; do ;; 40|webssh) + local app_id="40" local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 @@ -9728,6 +9777,7 @@ while true; do 41|haozi) + local app_id="41" local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" @@ -9752,6 +9802,7 @@ while true; do 42|nexterm) + local app_id="42" local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 @@ -9776,6 +9827,7 @@ while true; do ;; 43|hbbs) + local app_id="43" local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9796,6 +9848,7 @@ while true; do ;; 44|hbbr) + local app_id="44" local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9815,6 +9868,7 @@ while true; do ;; 45|registry) + local app_id="45" local docker_name="registry" local docker_img="registry:2" local docker_port=8045 @@ -9840,6 +9894,7 @@ while true; do ;; 46|ghproxy) + local app_id="46" local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 @@ -9860,6 +9915,7 @@ while true; do 47|prometheus|grafana) + local app_id="47" local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" @@ -9898,6 +9954,7 @@ while true; do ;; 48|node-exporter) + local app_id="48" local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 @@ -9922,6 +9979,7 @@ while true; do ;; 49|cadvisor) + local app_id="49" local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 @@ -9952,6 +10010,7 @@ while true; do 50|changedetection) + local app_id="50" local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 @@ -9982,6 +10041,7 @@ while true; do 52|dpanel) + local app_id="52" local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 @@ -10005,6 +10065,7 @@ while true; do ;; 53|llama3) + local app_id="53" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10025,6 +10086,7 @@ while true; do 54|amh) + local app_id="54" local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" @@ -10047,7 +10109,7 @@ while true; do 55|frps) - frps_panel + frps_panel ;; 56|frpc) @@ -10055,6 +10117,7 @@ while true; do ;; 57|deepseek) + local app_id="57" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10075,6 +10138,7 @@ while true; do 58|dify) + local app_id="58" local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" @@ -10113,7 +10177,8 @@ while true; do ;; 59|new-api) - local app_name="New API" + local app_id="59" + local app_name="NewAPI" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" @@ -10165,6 +10230,7 @@ while true; do 60|jms) + local app_id="60" local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" @@ -10202,6 +10268,7 @@ while true; do ;; 61|libretranslate) + local app_id="61" local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 @@ -10227,6 +10294,7 @@ while true; do 62|ragflow) + local app_id="62" local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" @@ -10265,6 +10333,7 @@ while true; do 63|open-webui) + local app_id="63" local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 @@ -10284,6 +10353,7 @@ while true; do ;; 64|it-tools) + local app_id="64" local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 @@ -10302,6 +10372,7 @@ while true; do 65|n8n) + local app_id="65" local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 @@ -10319,7 +10390,7 @@ while true; do -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ - -e N8N_WEBHOOK_URL=https://${yuming}/ \ + -e WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} @@ -10341,6 +10412,7 @@ while true; do 67|ddns) + local app_id="67" local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=8067 @@ -10364,6 +10436,7 @@ while true; do ;; 68|allinssl) + local app_id="68" local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=8068 @@ -10382,6 +10455,7 @@ while true; do 69|sftpgo) + local app_id="69" local docker_name="sftpgo" local docker_img="drakkan/sftpgo:latest" local docker_port=8069 @@ -10413,6 +10487,7 @@ while true; do 70|astrbot) + local app_id="70" local docker_name="astrbot" local docker_img="soulter/astrbot:latest" local docker_port=8070 @@ -10444,6 +10519,7 @@ while true; do 71|navidrome) + local app_id="71" local docker_name="navidrome" local docker_img="deluan/navidrome:latest" local docker_port=8071 @@ -10473,6 +10549,7 @@ while true; do 72|bitwarden) + local app_id="72" local docker_name="bitwarden" local docker_img="vaultwarden/server" local docker_port=8072 @@ -10502,6 +10579,7 @@ while true; do 73|libretv) + local app_id="73" local docker_name="libretv" local docker_img="bestzwei/libretv:latest" local docker_port=8073 @@ -10531,6 +10609,7 @@ while true; do 74|moontv) + local app_id="74" local docker_name="moontv" local docker_img="ghcr.io/senshinya/moontv:latest" local docker_port=8074 @@ -10560,6 +10639,7 @@ while true; do 75|melody) + local app_id="75" local docker_name="melody" local docker_img="foamzou/melody:latest" local docker_port=8075 @@ -10589,6 +10669,7 @@ while true; do 76|dosgame) + local app_id="76" local docker_name="dosgame" local docker_img="oldiy/dosgame-web-docker:latest" local docker_port=8076 @@ -10614,6 +10695,7 @@ while true; do 77|xunlei) + local app_id="77" local docker_name="xunlei" local docker_img="cnk3x/xunlei" local docker_port=8077 @@ -10649,6 +10731,7 @@ while true; do 78|PandaWiki) + local app_id="78" local app_name="PandaWiki" local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" local app_url="官方介绍: https://github.com/chaitin/PandaWiki" @@ -10676,6 +10759,7 @@ while true; do 79|beszel) + local app_id="79" local docker_name="beszel" local docker_img="henrygd/beszel" local docker_port=8079 @@ -10703,6 +10787,8 @@ while true; do 80|linkwarden) + + local app_id="80" local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" @@ -10774,6 +10860,7 @@ while true; do 81|jitsi) + local app_id="81" local app_name="JitsiMeet视频会议" local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" local app_url="官方网站: https://jitsi.org/" @@ -10824,6 +10911,7 @@ while true; do 82|gpt-load) + local app_id="82" local docker_name="gpt-load" local docker_img="tbphp/gpt-load:latest" local docker_port=8082 @@ -10852,6 +10940,7 @@ while true; do 83|komari) + local app_id="83" local docker_name="komari" local docker_img="ghcr.io/komari-monitor/komari:latest" local docker_port=8083 @@ -10883,6 +10972,7 @@ while true; do 84|wallos) + local app_id="84" local docker_name="wallos" local docker_img="bellamy/wallos:latest" local docker_port=8084 @@ -10911,6 +11001,7 @@ while true; do 85|immich) + local app_id="85" local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" @@ -10953,6 +11044,7 @@ while true; do 86|jellyfin) + local app_id="86" local docker_name="jellyfin" local docker_img="jellyfin/jellyfin" local docker_port=8086 @@ -10988,6 +11080,7 @@ while true; do 87|synctv) + local app_id="87" local docker_name="synctv" local docker_img="synctvorg/synctv" local docker_port=8087 @@ -11015,6 +11108,7 @@ while true; do 88|owncast) + local app_id="88" local docker_name="owncast" local docker_img="owncast/owncast:latest" local docker_port=8088 @@ -11263,7 +11357,7 @@ linux_Settings() { echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host analysis${gl_kjlan}22. ${gl_bai}SSH Defense Program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" @@ -11294,7 +11388,7 @@ 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 "Shortcut keys are set" + echo "Shortcut keys have been set" send_stats "Script shortcut keys have been set" break_end linux_Settings @@ -12306,7 +12400,7 @@ EOF echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "7. Set the time zone to${gl_huang}Shanghai${gl_bai}" echo -e "8. Automatically optimize DNS address${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "9. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "9. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10. Switch to kernel parameter optimization in Linux system${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" read -e -p "Are you sure to have one-click maintenance? (Y/N):" choice @@ -12401,7 +12495,7 @@ EOF echo "Privacy and Security" echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" @@ -12538,7 +12632,7 @@ linux_file() { 5) # 删除目录 read -e -p "Please enter the directory name to delete:" dirname rm -rf "$dirname" && echo "Directory has been deleted" || echo "Deletion failed" - send_stats "Delete Directory" + send_stats "Delete directory" ;; 6) # 返回上一级选单目录 cd .. diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 8cb98949f..4da715382 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1558,7 +1558,7 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1740,7 +1740,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることにしました + # モードパラメーターに従って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 @@ -2101,7 +2101,7 @@ web_security() { echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" echo "https://dash.cloudflare.com/login" read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CFのグローバルAPIキーを入力してください。" 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 @@ -2129,7 +2129,7 @@ web_security() { echo "https://dash.cloudflare.com/login" echo "--------------" read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CFのグローバルAPIキーを入力してください。" cftoken read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID cd ~ @@ -2717,6 +2717,13 @@ setup_docker_dir() { } +add_app_id() { +mkdir -p /home/docker +touch /home/docker/appno.txt +grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + +} + docker_app() { @@ -2760,8 +2767,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_nameインストール" @@ -2775,8 +2782,8 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_nameインストール" @@ -2791,8 +2798,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" send_stats "アンインストール$docker_name" ;; @@ -2872,19 +2879,19 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 2) docker_app_update - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt ;; 5) @@ -3549,21 +3556,21 @@ while true; do install wget iptables_open panel_app_install - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}インストール" ;; 2) panel_app_manage - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}コントロール" ;; 3) panel_app_uninstall - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt send_stats "${panelname}アンインストール" ;; *) @@ -3682,7 +3689,7 @@ add_forwarding_service() { read -e -p "イントラネットポートを入力してください:" local_port read -e -p "外部ネットワークポートを入力してください:" remote_port - # ユーザー入力を構成ファイルに書き込みます + # 構成ファイルにユーザー入力を書き込みます cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3862,6 +3869,7 @@ frps_main_ports() { frps_panel() { send_stats "FRPサーバー" + local app_id="55" local docker_name="frps" local docker_port=8056 while true; do @@ -3869,7 +3877,7 @@ frps_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRPサーバー$check_frp $update_status" - echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" + echo "FRPイントラネット浸透サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" if [ -d "/home/frp/" ]; then @@ -3892,8 +3900,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRPサーバーがインストールされています" ;; 2) @@ -3902,8 +3910,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRPサーバーが更新されました" ;; 3) @@ -3913,8 +3921,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" ;; 5) @@ -3959,6 +3967,7 @@ frps_panel() { frpc_panel() { send_stats "FRPクライアント" + local app_id="56" local docker_name="frpc" local docker_port=8055 while true; do @@ -3988,8 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRPクライアントがインストールされています" ;; 2) @@ -3998,8 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRPクライアントが更新されました" ;; @@ -4009,8 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" ;; @@ -4041,6 +4050,7 @@ frpc_panel() { yt_menu_pro() { + local app_id="66" local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" @@ -4080,24 +4090,24 @@ yt_menu_pro() { install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "インストールが完了しました。任意のキーを押して続行します..." read ;; 2) send_stats "yt-dlpを更新..." echo "yt-dlpを更新..." yt-dlp -U - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) send_stats "yt-dlpのアンインストール..." echo "yt-dlpのアンインストール..." rm -f /usr/local/bin/yt-dlp - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "アンインストールが完了しました。任意のキーを押して続行します..." read ;; 5) @@ -4511,7 +4521,7 @@ echo -e "${gl_lv}ルートログインがセットアップされます!${gl_b root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能では、ルートユーザーを実行する必要があります!" && break_end && kejilion } @@ -4860,7 +4870,7 @@ bbrv3() { echo "" echo "カーネル管理" echo "------------------------" - echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" + echo "1。BBRV3カーネルを更新します2。BBRV3カーネルをアンインストールします" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -4911,7 +4921,6 @@ bbrv3() { echo "------------------------------------------------" echo "Debian/Ubuntuのみをサポートします" echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" - echo "VPSには512mのメモリがあります。メモリが不十分なため、接触の欠落を防ぐために、事前に1G仮想メモリを追加してください!" echo "------------------------------------------------" read -e -p "必ず続行しますか? (y/n):" choice @@ -5364,7 +5373,7 @@ Kernel_optimize() { echo "--------------------" echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" - echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを同時に改善します。" + echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" @@ -5729,7 +5738,7 @@ restore_backup() { if [ $? -eq 0 ]; then echo "バックアップと復元を正常に!" else - echo "バックアップリカバリが失敗しました!" + echo "バックアップリカバリに失敗しました!" exit 1 fi } @@ -5809,7 +5818,7 @@ list_connections() { # 新しい接続を追加します add_connection() { send_stats "新しい接続を追加します" - echo "新しい接続を作成する例:" + echo "新しい接続例を作成します:" echo "- 接続名:my_server" echo "- IPアドレス:192.168.1.100" echo "- ユーザー名:root" @@ -5901,7 +5910,7 @@ use_connection() { IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "に接続します$name ($ip)..." + echo "接続$name ($ip)..." if [[ -f "$password_or_key" ]]; then # キーに接続します ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip" @@ -6282,7 +6291,7 @@ run_task() { 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" @@ -6360,7 +6369,7 @@ schedule_task() { 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 @@ -6640,7 +6649,7 @@ linux_tools() { clear echo "ツールがインストールされており、使用方法は次のとおりです。" ffmpeg --help - send_stats "ffmpegをインストールします" + send_stats "FFMPEGをインストールします" ;; 11) @@ -6970,7 +6979,7 @@ linux_docker() { 3) send_stats "インターネットに参加してください" read -e -p "出口ネットワーク名:" dockernetwork - read -e -p "これらのコンテナはネットワークを終了します(複数のコンテナ名はスペースで区切られています):" dockernames + read -e -p "これらのコンテナはネットワークを出ます(複数のコンテナ名はスペースで区切られています):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7162,7 +7171,7 @@ linux_test() { case $sub_choice in 1) clear - send_stats "CHATGPTはステータス検出のロックを解除します" + send_stats "CHATGPTステータス検出のロックを解除します" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) @@ -7684,7 +7693,7 @@ linux_ldnmp() { echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックグラウンドログインパス: /admin" + echo "バックエンドログインパス: /admin" echo "------------------------" echo "ユーザー名:admin" echo "パスワード:管理者" @@ -7915,7 +7924,7 @@ linux_ldnmp() { ;; 2) echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8304,7 +8313,7 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" + echo "1.更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" echo "------------------------" echo "5。完全な環境を更新します" echo "------------------------" @@ -8499,7 +8508,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHub加速ステーション${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" @@ -8533,7 +8542,7 @@ while true; do case $sub_choice in 1|bt|baota) - + local app_id="1" local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" @@ -8559,6 +8568,8 @@ while true; do ;; 2|aapanel) + + local app_id="2" local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" @@ -8582,6 +8593,7 @@ while true; do ;; 3|1p|1panel) + local app_id="3" local lujing="command -v 1pctl" local panelname="1Panel" local panelurl="https://1panel.cn/" @@ -8605,6 +8617,7 @@ while true; do ;; 4|npm) + local app_id="4" local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 @@ -8636,6 +8649,7 @@ while true; do 5|openlist) + local app_id="5" local docker_name="openlist" local docker_img="openlistteam/openlist:latest-aria2" local docker_port=5244 @@ -8666,6 +8680,7 @@ while true; do 6|webtop-ubuntu) + local app_id="6" local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 @@ -8706,6 +8721,8 @@ while true; do 7|nezha) clear send_stats "ネザを作る" + + local app_id="7" local docker_name="nezha-dashboard" local docker_port=8008 while true; do @@ -8748,6 +8765,7 @@ while true; do 8|qb|QB) + local app_id="8" local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 @@ -8784,6 +8802,7 @@ while true; do send_stats "郵便局を建設します" clear install telnet + local app_id="9" local docker_name=“mailserver” while true; do check_docker_app @@ -8851,8 +8870,8 @@ while true; do --restart=always \ -d analogic/poste.io - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Poste.ioがインストールされています" @@ -8876,8 +8895,8 @@ while true; do --restart=always \ -d analogic/poste.i - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Poste.ioがインストールされています" @@ -8891,8 +8910,8 @@ while true; do docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "アプリはアンインストールされています" ;; @@ -8908,6 +8927,7 @@ while true; do 10|rocketchat) + local app_id="10" local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" @@ -8955,6 +8975,7 @@ while true; do 11|zentao) + local app_id="11" local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 @@ -8985,6 +9006,7 @@ while true; do ;; 12|qinglong) + local app_id="12" local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 @@ -9013,6 +9035,7 @@ while true; do ;; 13|cloudreve) + local app_id="13" local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" @@ -9048,6 +9071,7 @@ while true; do ;; 14|easyimage) + local app_id="14" local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=8014 @@ -9075,6 +9099,7 @@ while true; do ;; 15|emby) + local app_id="15" local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8015 @@ -9102,6 +9127,7 @@ while true; do ;; 16|looking) + local app_id="16" local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=8016 @@ -9123,6 +9149,7 @@ while true; do ;; 17|adguardhome) + local app_id="17" local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=8017 @@ -9155,6 +9182,7 @@ while true; do 18|onlyoffice) + local app_id="18" local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8018 @@ -9183,6 +9211,7 @@ while true; do 19|safeline) send_stats "サンダープールを構築します" + local app_id="19" local docker_name=safeline-mgt local docker_port=9443 while true; do @@ -9208,8 +9237,8 @@ while true; do install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "サンダープールWAFパネルがインストールされています" check_docker_app_ip @@ -9221,8 +9250,8 @@ while true; do 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "サンダープールWAFパネルが更新されました" check_docker_app_ip @@ -9233,8 +9262,8 @@ while true; do 4) cd /data/safeline docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" echo "docker compose down && docker compose down --rmi all" ;; @@ -9249,6 +9278,7 @@ while true; do ;; 20|portainer) + local app_id="20" local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=8020 @@ -9276,6 +9306,7 @@ while true; do ;; 21|vscode) + local app_id="21" local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8021 @@ -9298,6 +9329,7 @@ while true; do 22|uptime-kuma) + local app_id="22" local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=8022 @@ -9324,6 +9356,7 @@ while true; do ;; 23|memos) + local app_id="23" local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=8023 @@ -9343,6 +9376,7 @@ while true; do ;; 24|webtop) + local app_id="24" local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=8024 @@ -9383,6 +9417,7 @@ while true; do ;; 25|nextcloud) + local app_id="25" local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8025 @@ -9403,6 +9438,7 @@ while true; do ;; 26|qd) + local app_id="26" local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8026 @@ -9422,6 +9458,7 @@ while true; do ;; 27|dockge) + local app_id="27" local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=8027 @@ -9441,6 +9478,7 @@ while true; do ;; 28|speedtest) + local app_id="28" local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 @@ -9460,6 +9498,7 @@ while true; do ;; 29|searxng) + local app_id="29" local docker_name="searxng" local docker_img="searxng/searxng" local docker_port=8029 @@ -9484,6 +9523,7 @@ while true; do ;; 30|photoprism) + local app_id="30" local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=8030 @@ -9516,6 +9556,7 @@ while true; do 31|s-pdf) + local app_id="31" local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8031 @@ -9542,6 +9583,7 @@ while true; do ;; 32|drawio) + local app_id="32" local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=8032 @@ -9562,6 +9604,7 @@ while true; do ;; 33|sun-panel) + local app_id="33" local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=8033 @@ -9586,6 +9629,7 @@ while true; do ;; 34|pingvin-share) + local app_id="34" local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=8034 @@ -9610,6 +9654,7 @@ while true; do 35|moments) + local app_id="35" local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 @@ -9637,6 +9682,7 @@ while true; do 36|lobe-chat) + local app_id="36" local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 @@ -9658,6 +9704,7 @@ while true; do ;; 37|myip) + local app_id="37" local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 @@ -9692,6 +9739,7 @@ while true; do 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 app_id="39" local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 @@ -9711,6 +9759,7 @@ while true; do ;; 40|webssh) + local app_id="40" local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 @@ -9728,6 +9777,7 @@ while true; do 41|haozi) + local app_id="41" local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" @@ -9752,6 +9802,7 @@ while true; do 42|nexterm) + local app_id="42" local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 @@ -9776,6 +9827,7 @@ while true; do ;; 43|hbbs) + local app_id="43" local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9796,6 +9848,7 @@ while true; do ;; 44|hbbr) + local app_id="44" local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9815,6 +9868,7 @@ while true; do ;; 45|registry) + local app_id="45" local docker_name="registry" local docker_img="registry:2" local docker_port=8045 @@ -9840,6 +9894,7 @@ while true; do ;; 46|ghproxy) + local app_id="46" local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 @@ -9860,6 +9915,7 @@ while true; do 47|prometheus|grafana) + local app_id="47" local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" @@ -9898,6 +9954,7 @@ while true; do ;; 48|node-exporter) + local app_id="48" local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 @@ -9922,6 +9979,7 @@ while true; do ;; 49|cadvisor) + local app_id="49" local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 @@ -9952,6 +10010,7 @@ while true; do 50|changedetection) + local app_id="50" local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 @@ -9982,6 +10041,7 @@ while true; do 52|dpanel) + local app_id="52" local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 @@ -10005,6 +10065,7 @@ while true; do ;; 53|llama3) + local app_id="53" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10025,6 +10086,7 @@ while true; do 54|amh) + local app_id="54" local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" @@ -10047,7 +10109,7 @@ while true; do 55|frps) - frps_panel + frps_panel ;; 56|frpc) @@ -10055,6 +10117,7 @@ while true; do ;; 57|deepseek) + local app_id="57" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10075,6 +10138,7 @@ while true; do 58|dify) + local app_id="58" local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" @@ -10113,7 +10177,8 @@ while true; do ;; 59|new-api) - local app_name="New API" + local app_id="59" + local app_name="NewAPI" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" @@ -10165,6 +10230,7 @@ while true; do 60|jms) + local app_id="60" local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" @@ -10202,6 +10268,7 @@ while true; do ;; 61|libretranslate) + local app_id="61" local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 @@ -10227,6 +10294,7 @@ while true; do 62|ragflow) + local app_id="62" local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" @@ -10265,6 +10333,7 @@ while true; do 63|open-webui) + local app_id="63" local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 @@ -10284,6 +10353,7 @@ while true; do ;; 64|it-tools) + local app_id="64" local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 @@ -10302,6 +10372,7 @@ while true; do 65|n8n) + local app_id="65" local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 @@ -10319,7 +10390,7 @@ while true; do -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ - -e N8N_WEBHOOK_URL=https://${yuming}/ \ + -e WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} @@ -10341,6 +10412,7 @@ while true; do 67|ddns) + local app_id="67" local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=8067 @@ -10364,6 +10436,7 @@ while true; do ;; 68|allinssl) + local app_id="68" local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=8068 @@ -10382,6 +10455,7 @@ while true; do 69|sftpgo) + local app_id="69" local docker_name="sftpgo" local docker_img="drakkan/sftpgo:latest" local docker_port=8069 @@ -10413,6 +10487,7 @@ while true; do 70|astrbot) + local app_id="70" local docker_name="astrbot" local docker_img="soulter/astrbot:latest" local docker_port=8070 @@ -10444,6 +10519,7 @@ while true; do 71|navidrome) + local app_id="71" local docker_name="navidrome" local docker_img="deluan/navidrome:latest" local docker_port=8071 @@ -10473,6 +10549,7 @@ while true; do 72|bitwarden) + local app_id="72" local docker_name="bitwarden" local docker_img="vaultwarden/server" local docker_port=8072 @@ -10502,6 +10579,7 @@ while true; do 73|libretv) + local app_id="73" local docker_name="libretv" local docker_img="bestzwei/libretv:latest" local docker_port=8073 @@ -10531,6 +10609,7 @@ while true; do 74|moontv) + local app_id="74" local docker_name="moontv" local docker_img="ghcr.io/senshinya/moontv:latest" local docker_port=8074 @@ -10560,6 +10639,7 @@ while true; do 75|melody) + local app_id="75" local docker_name="melody" local docker_img="foamzou/melody:latest" local docker_port=8075 @@ -10589,6 +10669,7 @@ while true; do 76|dosgame) + local app_id="76" local docker_name="dosgame" local docker_img="oldiy/dosgame-web-docker:latest" local docker_port=8076 @@ -10614,6 +10695,7 @@ while true; do 77|xunlei) + local app_id="77" local docker_name="xunlei" local docker_img="cnk3x/xunlei" local docker_port=8077 @@ -10649,6 +10731,7 @@ while true; do 78|PandaWiki) + local app_id="78" local app_name="PandaWiki" local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" local app_url="官方介绍: https://github.com/chaitin/PandaWiki" @@ -10676,6 +10759,7 @@ while true; do 79|beszel) + local app_id="79" local docker_name="beszel" local docker_img="henrygd/beszel" local docker_port=8079 @@ -10703,6 +10787,8 @@ while true; do 80|linkwarden) + + local app_id="80" local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" @@ -10774,6 +10860,7 @@ while true; do 81|jitsi) + local app_id="81" local app_name="JitsiMeet视频会议" local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" local app_url="官方网站: https://jitsi.org/" @@ -10824,6 +10911,7 @@ while true; do 82|gpt-load) + local app_id="82" local docker_name="gpt-load" local docker_img="tbphp/gpt-load:latest" local docker_port=8082 @@ -10852,6 +10940,7 @@ while true; do 83|komari) + local app_id="83" local docker_name="komari" local docker_img="ghcr.io/komari-monitor/komari:latest" local docker_port=8083 @@ -10883,6 +10972,7 @@ while true; do 84|wallos) + local app_id="84" local docker_name="wallos" local docker_img="bellamy/wallos:latest" local docker_port=8084 @@ -10911,6 +11001,7 @@ while true; do 85|immich) + local app_id="85" local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" @@ -10953,6 +11044,7 @@ while true; do 86|jellyfin) + local app_id="86" local docker_name="jellyfin" local docker_img="jellyfin/jellyfin" local docker_port=8086 @@ -10988,6 +11080,7 @@ while true; do 87|synctv) + local app_id="87" local docker_name="synctv" local docker_img="synctvorg/synctv" local docker_port=8087 @@ -11015,6 +11108,7 @@ while true; do 88|owncast) + local app_id="88" local docker_name="owncast" local docker_img="owncast/owncast:latest" local docker_port=8088 @@ -11259,13 +11353,13 @@ linux_Settings() { 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}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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" + echo -e "${gl_kjlan}25. ${gl_bai}TGボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHハイリスクの脆弱性を修正します" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}ウイルススキャンツール${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}ファイルマネージャー" echo -e "${gl_kjlan}------------------------" @@ -11287,7 +11381,7 @@ linux_Settings() { 1) while true; do clear - read -e -p "ショートカットキーを入力してください(出口に0を入力してください):" kuaijiejian + read -e -p "ショートカットキーを入力してください(0を入力して終了してください):" kuaijiejian if [ "$kuaijiejian" == "0" ]; then break_end linux_Settings @@ -11747,7 +11841,7 @@ EOF echo "------------------------" echo "アメリカ" echo "21。WesternTime22。東部時間" - echo "23。カナダ時間24。メキシコの時間" + echo "23. 加拿大时间 24. 墨西哥时间" echo "25。ブラジル時間26。アルゼンチン時間" echo "------------------------" echo "31。UTCグローバル標準時間" @@ -11920,7 +12014,7 @@ EOF break # 跳出 ;; esac - send_stats "時限タスクを追加します" + send_stats "タイムされたタスクを追加します" ;; 2) read -e -p "削除する必要があるキーワードを入力してください。" kquest @@ -12073,7 +12167,7 @@ EOF case "$Limiting" in 1) # 新しい仮想メモリサイズを入力します - echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" + echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源を停止して、トラフィックエラーやオーバーフローを避けることができます。" read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb @@ -12099,7 +12193,7 @@ EOF crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - crontab -l | grep -v 'reboot' | crontab - rm ~/Limiting_Shut_down.sh - echo "現在の制限シャットダウン関数はオフになっています" + echo "電流制限シャットダウン機能はオフになっています" ;; *) break @@ -12120,7 +12214,7 @@ EOF echo "------------------------------------------------" echo "キーペアが生成され、SSHログインのより安全な方法" echo "------------------------" - echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" + echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -12306,7 +12400,7 @@ EOF 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 "9.基本ツールをインストールします${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" echo "------------------------------------------------" read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice @@ -12401,7 +12495,7 @@ EOF echo "プライバシーとセキュリティ" echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" + echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" echo "--------------------" @@ -12525,7 +12619,7 @@ linux_file() { ;; 3) # 修改目录权限 read -e -p "ディレクトリ名を入力してください:" dirname - read -e -p "許可を入力してください(755など):" perm + read -e -p "許可(755など)を入力してください。" perm chmod "$perm" "$dirname" && echo "許可が変更されました" || echo "変更に失敗しました" send_stats "ディレクトリ権限を変更します" ;; @@ -12557,7 +12651,7 @@ linux_file() { ;; 13) # 修改文件权限 read -e -p "ファイル名を入力してください:" filename - read -e -p "許可を入力してください(755など):" perm + read -e -p "許可(755など)を入力してください。" perm chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました" send_stats "ファイル権限を変更します" ;; @@ -12589,7 +12683,7 @@ linux_file() { read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" + send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリが存在しません" continue fi @@ -12752,7 +12846,7 @@ while true; do 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}Tech Lionスクリプトをインストールします${gl_kjlan}12. ${gl_bai}システムを更新します${gl_kjlan}13. ${gl_bai}システムをきれいにします" + echo -e "${gl_kjlan}11. ${gl_bai}Tech Lionスクリプトをインストールします${gl_kjlan}12. ${gl_bai}システムを更新します${gl_kjlan}13. ${gl_bai}システムを掃除します" echo -e "${gl_kjlan}14. ${gl_bai}Dockerをインストールします${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}" @@ -12868,7 +12962,7 @@ echo "------------------------" echo -e "${gl_lan}dmit四半期あたり28ドルUS CN2GIA 1コア2Gメモリ20Gハードドライブ800gトラフィック${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 $ 6.9東京ソフトバンク2コア1Gメモリ20gハードドライブ1Tトラフィック${gl_bai}" +echo -e "${gl_zi}V.PS月額6.9 $ 6.9東京ソフトバンク2コア1Gメモリ20gハードドライブ1tトラフィック${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?faffid=1355 &? affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}より人気のあるVPSオファー${gl_bai}" @@ -13087,11 +13181,11 @@ echo "ドメイン名証明書の有効期限クエリK SSL PS" echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" echo "Docker Container Management K Docker PS | K Dockerコンテナ" echo "Docker Image Management K Docker IMG | K Docker画像" -echo "LDNMPサイト管理k Web" +echo "LDNMPサイト管理K Web" echo "LDNMPキャッシュクリーンアップK Webキャッシュ" echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" -echo "ロードバランスkロードバランス| kロードバランシングをインストールします" +echo "ロードバランシングkロードバランス| kロードバランシングをインストールします" echo "ファイアウォールパネルk fhq | kファイアウォール" echo "オープンポートK DKDK 8080 | Kオープンポート8080" echo "ポートK GBDK 7800を閉じる| kポート7800を閉じます" @@ -13151,7 +13245,7 @@ else rsync_run) shift - send_stats "タイム付きRSYNC同期" + send_stats "タイミング付きRSYNC同期" run_task "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 5130534f4..3be3371ea 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 명령을 실행할 함수를 정의합니다 +# 명령을 실행하는 함수를 정의합니다 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -334,7 +334,7 @@ enable() { break_end() { - echo -e "${gl_lv}작업이 완료되었습니다${gl_bai}" + echo -e "${gl_lv}操作完成${gl_bai}" echo "계속하려면 키를 누르십시오 ..." read -n 1 -s -r -p "" echo "" @@ -520,7 +520,7 @@ while true; do echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) send_stats "새 컨테이너를 만듭니다" @@ -644,7 +644,7 @@ while true; do echo "도커 이미지 목록" docker image ls echo "" - echo "미러 작동" + echo "거울 작동" echo "------------------------" echo "1. 지정된 이미지 가져 오기 3. 지정된 이미지 삭제" echo "2. 지정된 이미지 업데이트 4. 모든 이미지 삭제" @@ -1234,7 +1234,7 @@ iptables_panel() { ;; 17) - read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오 :" country_code manage_country_rules unblock $country_code send_stats "나라를 정리하십시오$country_codeIP" ;; @@ -1558,7 +1558,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -1664,7 +1664,7 @@ cf_purge_cache() { # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트하십시오 + # 캐시 청소 여부를 사용자에게 프롬프트합니다 read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer if [[ "$answer" == "y" ]]; then echo "CF 정보가 저장됩니다$CONFIG_FILE, 나중에 CF 정보를 수정할 수 있습니다" @@ -1723,7 +1723,7 @@ web_del() { 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 @@ -2717,6 +2717,13 @@ setup_docker_dir() { } +add_app_id() { +mkdir -p /home/docker +touch /home/docker/appno.txt +grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + +} + docker_app() { @@ -2760,8 +2767,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name설치" @@ -2775,8 +2782,8 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name설치" @@ -2791,8 +2798,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" send_stats "제거하십시오$docker_name" ;; @@ -2872,19 +2879,19 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 2) docker_app_update - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt ;; 5) @@ -3549,21 +3556,21 @@ while true; do install wget iptables_open panel_app_install - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}설치하다" ;; 2) panel_app_manage - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}제어" ;; 3) panel_app_uninstall - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt send_stats "${panelname}제거하십시오" ;; *) @@ -3862,6 +3869,7 @@ frps_main_ports() { frps_panel() { send_stats "FRP 서버" + local app_id="55" local docker_name="frps" local docker_port=8056 while true; do @@ -3892,8 +3900,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP 서버가 설치되었습니다" ;; 2) @@ -3902,8 +3910,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP 서버가 업데이트되었습니다" ;; 3) @@ -3913,12 +3921,12 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" ;; 5) - echo "리버스 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" + echo "반전 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" send_stats "외부 도메인 이름에 대한 FRP 액세스" add_yuming read -e -p "인트라넷 침투 서비스 포트를 입력하십시오 :" frps_port @@ -3938,7 +3946,7 @@ frps_panel() { 8) send_stats "IP 액세스를 차단하십시오" - echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단할 수 있습니다." + echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단하십시오." read -e -p "차단 해야하는 포트를 입력하십시오." frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -3959,6 +3967,7 @@ frps_panel() { frpc_panel() { send_stats "FRP 클라이언트" + local app_id="56" local docker_name="frpc" local docker_port=8055 while true; do @@ -3988,8 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP 클라이언트가 설치되었습니다" ;; 2) @@ -3998,8 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP 클라이언트가 업데이트되었습니다" ;; @@ -4009,8 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" ;; @@ -4041,6 +4050,7 @@ frpc_panel() { yt_menu_pro() { + local app_id="66" local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" @@ -4080,24 +4090,24 @@ yt_menu_pro() { install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 2) send_stats "yt-dlp 업데이트 ..." echo "yt-dlp 업데이트 ..." yt-dlp -U - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 3) send_stats "yt-dlp 제거 ..." echo "yt-dlp 제거 ..." rm -f /usr/local/bin/yt-dlp - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 5) @@ -4125,7 +4135,7 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "배치 다운로드가 완료되었습니다. 키를 눌러 계속하십시오 ..." ;; + read -e -p "배치 다운로드가 완료되었고, 키를 눌러 계속하십시오 ..." ;; 7) send_stats "맞춤형 비디오 다운로드" read -e -p "전체 YT-DLP 매개 변수를 입력하십시오 (YT-DLP 제외) :" custom @@ -4911,7 +4921,6 @@ bbrv3() { echo "------------------------------------------------" echo "데비안/우분투 만 지원합니다" echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." - echo "VPS는 512m 메모리를 가지고 있습니다. 메모리가 충분하지 않아 접점 누락을 방지하기 위해 1G 가상 메모리를 미리 추가하십시오!" echo "------------------------------------------------" read -e -p "계속할거야? (Y/N) :" choice @@ -4980,7 +4989,7 @@ elrepo_install() { linux_Settings fi # 감지 된 운영 체제 정보를 인쇄합니다 - echo "운영 체제 감지 :$os_name $os_version" + echo "감지 된 운영 체제 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." @@ -5809,7 +5818,7 @@ list_connections() { # 새 연결을 추가하십시오 add_connection() { send_stats "새 연결을 추가하십시오" - echo "새 연결을 만드는 예 :" + echo "새 연결 예제 :" echo "- 연결 이름 : my_server" echo "-IP 주소 : 192.168.1.100" echo "- 사용자 이름 : 루트" @@ -6087,11 +6096,11 @@ format_partition() { fi # 형식 파티션 - echo "파티션 서식 /dev /$PARTITION~을 위한$FS_TYPE ..." + echo "파티션 형식 /dev /$PARTITION~을 위한$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 형식이 성공적이었습니다!" + echo "파티션 형식이 성공했습니다!" else echo "파티션 형식이 실패했습니다!" fi @@ -6866,7 +6875,7 @@ linux_docker() { 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}Docker 환경을 제거하십시오" + echo -e "${gl_kjlan}20. ${gl_bai}도커 환경을 제거하십시오" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7136,7 +7145,7 @@ linux_test() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}네트워크 속도 측정" - echo -e "${gl_kjlan}11. ${gl_bai}Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + echo -e "${gl_kjlan}11. ${gl_bai}Besttrace Three Network Backhaul 지연 라우팅 테스트" echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" @@ -7330,7 +7339,7 @@ linux_Oracle() { 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 + 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 @@ -7513,7 +7522,7 @@ linux_ldnmp() { 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}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 환경을 제거하십시오" @@ -7842,7 +7851,7 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드하십시오" + echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드합니다" echo "-------------" echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download @@ -7915,7 +7924,7 @@ linux_ldnmp() { ;; 2) echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db + read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8194,7 +8203,7 @@ linux_ldnmp() { 33) clear - send_stats "시간이 지정된 원격 백업" + send_stats "시간이 정한 원격 백업" read -e -p "원격 서버 IP를 입력하십시오." useip read -e -p "원격 서버 비밀번호를 입력하십시오." usepasswd @@ -8483,7 +8492,7 @@ while true; do echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" - echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" + echo -e "${gl_kjlan}19. ${color19}Thunder Pool Waf 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" @@ -8511,7 +8520,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" - echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" + echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플로우 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" echo -e "${gl_kjlan}------------------------" @@ -8533,7 +8542,7 @@ while true; do case $sub_choice in 1|bt|baota) - + local app_id="1" local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" @@ -8559,6 +8568,8 @@ while true; do ;; 2|aapanel) + + local app_id="2" local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" @@ -8582,6 +8593,7 @@ while true; do ;; 3|1p|1panel) + local app_id="3" local lujing="command -v 1pctl" local panelname="1Panel" local panelurl="https://1panel.cn/" @@ -8605,6 +8617,7 @@ while true; do ;; 4|npm) + local app_id="4" local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 @@ -8636,6 +8649,7 @@ while true; do 5|openlist) + local app_id="5" local docker_name="openlist" local docker_img="openlistteam/openlist:latest-aria2" local docker_port=5244 @@ -8666,6 +8680,7 @@ while true; do 6|webtop-ubuntu) + local app_id="6" local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 @@ -8706,6 +8721,8 @@ while true; do 7|nezha) clear send_stats "Nezha를 구축하십시오" + + local app_id="7" local docker_name="nezha-dashboard" local docker_port=8008 while true; do @@ -8748,6 +8765,7 @@ while true; do 8|qb|QB) + local app_id="8" local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 @@ -8784,6 +8802,7 @@ while true; do send_stats "우체국을 건설하십시오" clear install telnet + local app_id="9" local docker_name=“mailserver” while true; do check_docker_app @@ -8851,8 +8870,8 @@ while true; do --restart=always \ -d analogic/poste.io - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Poste.io가 설치되었습니다" @@ -8876,8 +8895,8 @@ while true; do --restart=always \ -d analogic/poste.i - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Poste.io가 설치되었습니다" @@ -8891,8 +8910,8 @@ while true; do docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" ;; @@ -8908,6 +8927,7 @@ while true; do 10|rocketchat) + local app_id="10" local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" @@ -8955,6 +8975,7 @@ while true; do 11|zentao) + local app_id="11" local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 @@ -8985,6 +9006,7 @@ while true; do ;; 12|qinglong) + local app_id="12" local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 @@ -9013,6 +9035,7 @@ while true; do ;; 13|cloudreve) + local app_id="13" local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" @@ -9048,6 +9071,7 @@ while true; do ;; 14|easyimage) + local app_id="14" local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=8014 @@ -9075,6 +9099,7 @@ while true; do ;; 15|emby) + local app_id="15" local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8015 @@ -9102,6 +9127,7 @@ while true; do ;; 16|looking) + local app_id="16" local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=8016 @@ -9123,6 +9149,7 @@ while true; do ;; 17|adguardhome) + local app_id="17" local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=8017 @@ -9155,6 +9182,7 @@ while true; do 18|onlyoffice) + local app_id="18" local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8018 @@ -9183,13 +9211,14 @@ while true; do 19|safeline) send_stats "천둥 수영장을 건설하십시오" + local app_id="19" local docker_name=safeline-mgt local docker_port=9443 while true; do check_docker_app clear echo -e "썬더 풀 서비스$check_docker" - echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." + echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip @@ -9208,8 +9237,8 @@ while true; do install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Thunder Pool WAF 패널이 설치되었습니다" check_docker_app_ip @@ -9221,8 +9250,8 @@ while true; do 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "Thunder Pool WAF 패널이 업데이트되었습니다" check_docker_app_ip @@ -9233,8 +9262,8 @@ while true; do 4) cd /data/safeline docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." echo "docker compose down && docker compose down --rmi all" ;; @@ -9249,6 +9278,7 @@ while true; do ;; 20|portainer) + local app_id="20" local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=8020 @@ -9276,6 +9306,7 @@ while true; do ;; 21|vscode) + local app_id="21" local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8021 @@ -9298,6 +9329,7 @@ while true; do 22|uptime-kuma) + local app_id="22" local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=8022 @@ -9324,6 +9356,7 @@ while true; do ;; 23|memos) + local app_id="23" local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=8023 @@ -9343,6 +9376,7 @@ while true; do ;; 24|webtop) + local app_id="24" local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=8024 @@ -9383,6 +9417,7 @@ while true; do ;; 25|nextcloud) + local app_id="25" local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8025 @@ -9403,6 +9438,7 @@ while true; do ;; 26|qd) + local app_id="26" local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8026 @@ -9422,6 +9458,7 @@ while true; do ;; 27|dockge) + local app_id="27" local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=8027 @@ -9441,6 +9478,7 @@ while true; do ;; 28|speedtest) + local app_id="28" local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 @@ -9460,6 +9498,7 @@ while true; do ;; 29|searxng) + local app_id="29" local docker_name="searxng" local docker_img="searxng/searxng" local docker_port=8029 @@ -9484,6 +9523,7 @@ while true; do ;; 30|photoprism) + local app_id="30" local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=8030 @@ -9516,6 +9556,7 @@ while true; do 31|s-pdf) + local app_id="31" local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8031 @@ -9542,6 +9583,7 @@ while true; do ;; 32|drawio) + local app_id="32" local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=8032 @@ -9562,6 +9604,7 @@ while true; do ;; 33|sun-panel) + local app_id="33" local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=8033 @@ -9586,6 +9629,7 @@ while true; do ;; 34|pingvin-share) + local app_id="34" local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=8034 @@ -9610,6 +9654,7 @@ while true; do 35|moments) + local app_id="35" local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 @@ -9637,6 +9682,7 @@ while true; do 36|lobe-chat) + local app_id="36" local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 @@ -9658,6 +9704,7 @@ while true; do ;; 37|myip) + local app_id="37" local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 @@ -9692,6 +9739,7 @@ while true; do 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 app_id="39" local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 @@ -9711,6 +9759,7 @@ while true; do ;; 40|webssh) + local app_id="40" local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 @@ -9728,6 +9777,7 @@ while true; do 41|haozi) + local app_id="41" local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" @@ -9752,6 +9802,7 @@ while true; do 42|nexterm) + local app_id="42" local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 @@ -9776,6 +9827,7 @@ while true; do ;; 43|hbbs) + local app_id="43" local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9796,6 +9848,7 @@ while true; do ;; 44|hbbr) + local app_id="44" local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9815,6 +9868,7 @@ while true; do ;; 45|registry) + local app_id="45" local docker_name="registry" local docker_img="registry:2" local docker_port=8045 @@ -9840,6 +9894,7 @@ while true; do ;; 46|ghproxy) + local app_id="46" local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 @@ -9860,6 +9915,7 @@ while true; do 47|prometheus|grafana) + local app_id="47" local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" @@ -9898,6 +9954,7 @@ while true; do ;; 48|node-exporter) + local app_id="48" local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 @@ -9922,6 +9979,7 @@ while true; do ;; 49|cadvisor) + local app_id="49" local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 @@ -9952,6 +10010,7 @@ while true; do 50|changedetection) + local app_id="50" local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 @@ -9982,6 +10041,7 @@ while true; do 52|dpanel) + local app_id="52" local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 @@ -10005,6 +10065,7 @@ while true; do ;; 53|llama3) + local app_id="53" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10025,6 +10086,7 @@ while true; do 54|amh) + local app_id="54" local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" @@ -10047,7 +10109,7 @@ while true; do 55|frps) - frps_panel + frps_panel ;; 56|frpc) @@ -10055,6 +10117,7 @@ while true; do ;; 57|deepseek) + local app_id="57" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10075,6 +10138,7 @@ while true; do 58|dify) + local app_id="58" local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" @@ -10113,7 +10177,8 @@ while true; do ;; 59|new-api) - local app_name="New API" + local app_id="59" + local app_name="NewAPI" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" @@ -10165,6 +10230,7 @@ while true; do 60|jms) + local app_id="60" local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" @@ -10202,6 +10268,7 @@ while true; do ;; 61|libretranslate) + local app_id="61" local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 @@ -10227,6 +10294,7 @@ while true; do 62|ragflow) + local app_id="62" local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" @@ -10265,6 +10333,7 @@ while true; do 63|open-webui) + local app_id="63" local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 @@ -10284,6 +10353,7 @@ while true; do ;; 64|it-tools) + local app_id="64" local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 @@ -10302,6 +10372,7 @@ while true; do 65|n8n) + local app_id="65" local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 @@ -10319,7 +10390,7 @@ while true; do -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ - -e N8N_WEBHOOK_URL=https://${yuming}/ \ + -e WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} @@ -10341,6 +10412,7 @@ while true; do 67|ddns) + local app_id="67" local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=8067 @@ -10364,6 +10436,7 @@ while true; do ;; 68|allinssl) + local app_id="68" local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=8068 @@ -10382,6 +10455,7 @@ while true; do 69|sftpgo) + local app_id="69" local docker_name="sftpgo" local docker_img="drakkan/sftpgo:latest" local docker_port=8069 @@ -10413,6 +10487,7 @@ while true; do 70|astrbot) + local app_id="70" local docker_name="astrbot" local docker_img="soulter/astrbot:latest" local docker_port=8070 @@ -10444,6 +10519,7 @@ while true; do 71|navidrome) + local app_id="71" local docker_name="navidrome" local docker_img="deluan/navidrome:latest" local docker_port=8071 @@ -10473,6 +10549,7 @@ while true; do 72|bitwarden) + local app_id="72" local docker_name="bitwarden" local docker_img="vaultwarden/server" local docker_port=8072 @@ -10502,6 +10579,7 @@ while true; do 73|libretv) + local app_id="73" local docker_name="libretv" local docker_img="bestzwei/libretv:latest" local docker_port=8073 @@ -10531,6 +10609,7 @@ while true; do 74|moontv) + local app_id="74" local docker_name="moontv" local docker_img="ghcr.io/senshinya/moontv:latest" local docker_port=8074 @@ -10560,6 +10639,7 @@ while true; do 75|melody) + local app_id="75" local docker_name="melody" local docker_img="foamzou/melody:latest" local docker_port=8075 @@ -10589,6 +10669,7 @@ while true; do 76|dosgame) + local app_id="76" local docker_name="dosgame" local docker_img="oldiy/dosgame-web-docker:latest" local docker_port=8076 @@ -10614,6 +10695,7 @@ while true; do 77|xunlei) + local app_id="77" local docker_name="xunlei" local docker_img="cnk3x/xunlei" local docker_port=8077 @@ -10649,6 +10731,7 @@ while true; do 78|PandaWiki) + local app_id="78" local app_name="PandaWiki" local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" local app_url="官方介绍: https://github.com/chaitin/PandaWiki" @@ -10676,6 +10759,7 @@ while true; do 79|beszel) + local app_id="79" local docker_name="beszel" local docker_img="henrygd/beszel" local docker_port=8079 @@ -10703,6 +10787,8 @@ while true; do 80|linkwarden) + + local app_id="80" local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" @@ -10774,6 +10860,7 @@ while true; do 81|jitsi) + local app_id="81" local app_name="JitsiMeet视频会议" local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" local app_url="官方网站: https://jitsi.org/" @@ -10824,6 +10911,7 @@ while true; do 82|gpt-load) + local app_id="82" local docker_name="gpt-load" local docker_img="tbphp/gpt-load:latest" local docker_port=8082 @@ -10852,6 +10940,7 @@ while true; do 83|komari) + local app_id="83" local docker_name="komari" local docker_img="ghcr.io/komari-monitor/komari:latest" local docker_port=8083 @@ -10883,6 +10972,7 @@ while true; do 84|wallos) + local app_id="84" local docker_name="wallos" local docker_img="bellamy/wallos:latest" local docker_port=8084 @@ -10911,6 +11001,7 @@ while true; do 85|immich) + local app_id="85" local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" @@ -10953,6 +11044,7 @@ while true; do 86|jellyfin) + local app_id="86" local docker_name="jellyfin" local docker_img="jellyfin/jellyfin" local docker_port=8086 @@ -10988,6 +11080,7 @@ while true; do 87|synctv) + local app_id="87" local docker_name="synctv" local docker_img="synctvorg/synctv" local docker_port=8087 @@ -11015,6 +11108,7 @@ while true; do 88|owncast) + local app_id="88" local docker_name="owncast" local docker_img="owncast/owncast:latest" local docker_port=8088 @@ -11203,7 +11297,7 @@ linux_work() { 22) read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME tmux_run - send_stats "사용자 정의 작업 공간" + send_stats "맞춤형 작업 공간" ;; @@ -11252,7 +11346,7 @@ linux_Settings() { 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}지정된 버전의 Python을 설치하십시오" + echo -e "${gl_kjlan}3. ${gl_bai}루트 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python을 설치하십시오" 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${gl_kjlan}10. ${gl_bai}우선 순위 IPv4/IPv6을 전환하십시오" @@ -11263,7 +11357,7 @@ linux_Settings() { 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}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 고위험 취약점을 수정하십시오" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" @@ -11294,7 +11388,7 @@ 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 "바로 가기 키가 설정되어 있습니다" + echo "바로 가기 키가 설정되었습니다" send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings @@ -11459,7 +11553,7 @@ EOF ;; 9) root_use - send_stats "신규 사용자는 루트를 비활성화합니다" + send_stats "새로운 사용자가 루트를 비활성화합니다" read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username if [ "$new_username" == "0" ]; then break_end @@ -11731,7 +11825,7 @@ EOF echo "현재 시스템 시간 :$current_time" echo "" - echo "시간대 스위칭" + echo "시간대 전환" echo "------------------------" echo "아시아" echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" @@ -11743,7 +11837,7 @@ EOF echo "유럽" echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" echo "13. 베를린 시간, 독일 14. 모스크바 시간, 러시아" - echo "15. 네덜란드에서 우트레흐트 시간 16. 스페인의 마드리드 시간" + echo "15. 네덜란드의 위트레흐트 시간 16. 스페인의 마드리드 시간" echo "------------------------" echo "미국" echo "21. 서양 시간 22. 동부 시간" @@ -12559,7 +12653,7 @@ linux_file() { read -e -p "파일 이름을 입력하십시오 :" filename read -e -p "권한을 입력하십시오 (예 : 755) :" perm chmod "$perm" "$filename" && echo "권한이 수정되었습니다" || echo "수정이 실패했습니다" - send_stats "파일 권한을 수정하십시오" + send_stats "파일 권한을 수정합니다" ;; 14) # 重命名文件 read -e -p "현재 파일 이름을 입력하십시오 :" current_name @@ -12622,7 +12716,7 @@ linux_file() { # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사합니다" + send_stats "파일 또는 디렉토리를 복사하십시오" ;; @@ -12856,7 +12950,7 @@ 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_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 코어 4G 메모리 50G 하드 드라이브 4T 트래픽 월${gl_bai}" @@ -13020,7 +13114,7 @@ echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu 서버 오프닝 스크립 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}0. ${gl_bai}스크립트 종료" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "선택을 입력하십시오 :" choice @@ -13242,7 +13336,7 @@ else ;; start|启动) shift - send_stats "소프트웨어 시작" + send_stats "소프트웨어 스타트 업" start "$@" ;; stop|停止) diff --git a/tw/kejilion.sh b/tw/kejilion.sh index d5bcfe726..7860f9ecf 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -2717,6 +2717,13 @@ setup_docker_dir() { } +add_app_id() { +mkdir -p /home/docker +touch /home/docker/appno.txt +grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker/appno.txt + +} + docker_app() { @@ -2760,8 +2767,8 @@ while true; do docker_rum setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name已經安裝完成" @@ -2775,8 +2782,8 @@ while true; do docker rm -f "$docker_name" docker rmi -f "$docker_img" docker_rum - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "$docker_name已經安裝完成" @@ -2791,8 +2798,8 @@ while true; do docker rmi -f "$docker_img" rm -rf "/home/docker/$docker_name" rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "應用已卸載" send_stats "解除安裝$docker_name" ;; @@ -2872,19 +2879,19 @@ docker_app_plus() { docker_app_install setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 2) docker_app_update - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) ;; 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt ;; 5) @@ -3549,21 +3556,21 @@ while true; do install wget iptables_open panel_app_install - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}安裝" ;; 2) panel_app_manage - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) send_stats "${panelname}控制" ;; 3) panel_app_uninstall - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt send_stats "${panelname}解除安裝" ;; *) @@ -3862,6 +3869,7 @@ frps_main_ports() { frps_panel() { send_stats "FRP服務端" + local app_id="55" local docker_name="frps" local docker_port=8056 while true; do @@ -3892,8 +3900,8 @@ frps_panel() { install jq grep ss install_docker generate_frps_config - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP服務端已經安裝完成" ;; 2) @@ -3902,8 +3910,8 @@ frps_panel() { docker rm -f frps && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP服務端已經更新完成" ;; 3) @@ -3913,8 +3921,8 @@ frps_panel() { rm -rf /home/frp close_port 8055 8056 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "應用已卸載" ;; 5) @@ -3959,6 +3967,7 @@ frps_panel() { frpc_panel() { send_stats "FRP客戶端" + local app_id="56" local docker_name="frpc" local docker_port=8055 while true; do @@ -3988,8 +3997,8 @@ frpc_panel() { install jq grep ss install_docker configure_frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP客戶端已經安裝完成" ;; 2) @@ -3998,8 +4007,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine >/dev/null 2>&1 [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "FRP客戶端已經更新完成" ;; @@ -4009,8 +4018,8 @@ frpc_panel() { docker rm -f frpc && docker rmi kjlion/frp:alpine rm -rf /home/frp close_port 8055 - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "應用已卸載" ;; @@ -4041,6 +4050,7 @@ frpc_panel() { yt_menu_pro() { + local app_id="66" local VIDEO_DIR="/home/yt-dlp" local URL_FILE="$VIDEO_DIR/urls.txt" local ARCHIVE_FILE="$VIDEO_DIR/archive.txt" @@ -4080,24 +4090,24 @@ yt_menu_pro() { install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "安裝完成。按任意鍵繼續..." read ;; 2) send_stats "正在更新 yt-dlp..." echo "正在更新 yt-dlp..." yt-dlp -U - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) echo "更新完成。按任意鍵繼續..." read ;; 3) send_stats "正在卸載 yt-dlp..." echo "正在卸載 yt-dlp..." rm -f /usr/local/bin/yt-dlp - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "卸載完成。按任意鍵繼續..." read ;; 5) @@ -4911,7 +4921,6 @@ bbrv3() { echo "------------------------------------------------" echo "僅支持Debian/Ubuntu" echo "請備份數據,將為你升級Linux內核開啟BBR3" - echo "VPS是512M內存的,請提前添加1G虛擬內存,防止因內存不足失聯!" echo "------------------------------------------------" read -e -p "確定繼續嗎? (Y/N):" choice @@ -8533,7 +8542,7 @@ while true; do case $sub_choice in 1|bt|baota) - + local app_id="1" local lujing="[ -d "/www/server/panel" ]" local panelname="宝塔面板" local panelurl="https://www.bt.cn/new/index.html" @@ -8559,6 +8568,8 @@ while true; do ;; 2|aapanel) + + local app_id="2" local lujing="[ -d "/www/server/panel" ]" local panelname="aapanel" local panelurl="https://www.aapanel.com/new/index.html" @@ -8582,6 +8593,7 @@ while true; do ;; 3|1p|1panel) + local app_id="3" local lujing="command -v 1pctl" local panelname="1Panel" local panelurl="https://1panel.cn/" @@ -8605,6 +8617,7 @@ while true; do ;; 4|npm) + local app_id="4" local docker_name="npm" local docker_img="jc21/nginx-proxy-manager:latest" local docker_port=81 @@ -8636,6 +8649,7 @@ while true; do 5|openlist) + local app_id="5" local docker_name="openlist" local docker_img="openlistteam/openlist:latest-aria2" local docker_port=5244 @@ -8666,6 +8680,7 @@ while true; do 6|webtop-ubuntu) + local app_id="6" local docker_name="webtop-ubuntu" local docker_img="lscr.io/linuxserver/webtop:ubuntu-kde" local docker_port=3006 @@ -8706,6 +8721,8 @@ while true; do 7|nezha) clear send_stats "搭建哪吒" + + local app_id="7" local docker_name="nezha-dashboard" local docker_port=8008 while true; do @@ -8748,6 +8765,7 @@ while true; do 8|qb|QB) + local app_id="8" local docker_name="qbittorrent" local docker_img="lscr.io/linuxserver/qbittorrent:latest" local docker_port=8081 @@ -8784,6 +8802,7 @@ while true; do send_stats "搭建郵局" clear install telnet + local app_id="9" local docker_name=“mailserver” while true; do check_docker_app @@ -8851,8 +8870,8 @@ while true; do --restart=always \ -d analogic/poste.io - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io已經安裝完成" @@ -8876,8 +8895,8 @@ while true; do --restart=always \ -d analogic/poste.i - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "poste.io已經安裝完成" @@ -8891,8 +8910,8 @@ while true; do docker rmi -f analogic/poste.io rm /home/docker/mail.txt rm -rf /home/docker/mail - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "應用已卸載" ;; @@ -8908,6 +8927,7 @@ while true; do 10|rocketchat) + local app_id="10" local app_name="Rocket.Chat聊天系统" local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," local app_url="官方介绍: https://www.rocket.chat/" @@ -8955,6 +8975,7 @@ while true; do 11|zentao) + local app_id="11" local docker_name="zentao-server" local docker_img="idoop/zentao:latest" local docker_port=82 @@ -8985,6 +9006,7 @@ while true; do ;; 12|qinglong) + local app_id="12" local docker_name="qinglong" local docker_img="whyour/qinglong:latest" local docker_port=5700 @@ -9013,6 +9035,7 @@ while true; do ;; 13|cloudreve) + local app_id="13" local app_name="cloudreve网盘" local app_text="cloudreve是一个支持多家云存储的网盘系统" local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" @@ -9048,6 +9071,7 @@ while true; do ;; 14|easyimage) + local app_id="14" local docker_name="easyimage" local docker_img="ddsderek/easyimage:latest" local docker_port=8014 @@ -9075,6 +9099,7 @@ while true; do ;; 15|emby) + local app_id="15" local docker_name="emby" local docker_img="linuxserver/emby:latest" local docker_port=8015 @@ -9102,6 +9127,7 @@ while true; do ;; 16|looking) + local app_id="16" local docker_name="looking-glass" local docker_img="wikihostinc/looking-glass-server" local docker_port=8016 @@ -9123,6 +9149,7 @@ while true; do ;; 17|adguardhome) + local app_id="17" local docker_name="adguardhome" local docker_img="adguard/adguardhome" local docker_port=8017 @@ -9155,6 +9182,7 @@ while true; do 18|onlyoffice) + local app_id="18" local docker_name="onlyoffice" local docker_img="onlyoffice/documentserver" local docker_port=8018 @@ -9183,6 +9211,7 @@ while true; do 19|safeline) send_stats "搭建雷池" + local app_id="19" local docker_name=safeline-mgt local docker_port=9443 while true; do @@ -9208,8 +9237,8 @@ while true; do install_docker check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "雷池WAF面板已經安裝完成" check_docker_app_ip @@ -9221,8 +9250,8 @@ while true; do 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 "" - local app_no=$sub_choice - grep -qxF "${app_no}" /home/docker/appno.txt || echo "${app_no}" >> /home/docker/appno.txt + + mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear echo "雷池WAF面板已經更新完成" check_docker_app_ip @@ -9233,8 +9262,8 @@ while true; do 4) cd /data/safeline docker compose down --rmi all - local app_no=$sub_choice - sed -i "/\b${app_no}\b/d" /home/docker/appno.txt + + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "如果你是默認安裝目錄那現在項目已經卸載。如果你是自定義安裝目錄你需要到安裝目錄下自行執行:" echo "docker compose down && docker compose down --rmi all" ;; @@ -9249,6 +9278,7 @@ while true; do ;; 20|portainer) + local app_id="20" local docker_name="portainer" local docker_img="portainer/portainer" local docker_port=8020 @@ -9276,6 +9306,7 @@ while true; do ;; 21|vscode) + local app_id="21" local docker_name="vscode-web" local docker_img="codercom/code-server" local docker_port=8021 @@ -9298,6 +9329,7 @@ while true; do 22|uptime-kuma) + local app_id="22" local docker_name="uptime-kuma" local docker_img="louislam/uptime-kuma:latest" local docker_port=8022 @@ -9324,6 +9356,7 @@ while true; do ;; 23|memos) + local app_id="23" local docker_name="memos" local docker_img="ghcr.io/usememos/memos:latest" local docker_port=8023 @@ -9343,6 +9376,7 @@ while true; do ;; 24|webtop) + local app_id="24" local docker_name="webtop" local docker_img="lscr.io/linuxserver/webtop:latest" local docker_port=8024 @@ -9383,6 +9417,7 @@ while true; do ;; 25|nextcloud) + local app_id="25" local docker_name="nextcloud" local docker_img="nextcloud:latest" local docker_port=8025 @@ -9403,6 +9438,7 @@ while true; do ;; 26|qd) + local app_id="26" local docker_name="qd" local docker_img="qdtoday/qd:latest" local docker_port=8026 @@ -9422,6 +9458,7 @@ while true; do ;; 27|dockge) + local app_id="27" local docker_name="dockge" local docker_img="louislam/dockge:latest" local docker_port=8027 @@ -9441,6 +9478,7 @@ while true; do ;; 28|speedtest) + local app_id="28" local docker_name="speedtest" local docker_img="ghcr.io/librespeed/speedtest" local docker_port=8028 @@ -9460,6 +9498,7 @@ while true; do ;; 29|searxng) + local app_id="29" local docker_name="searxng" local docker_img="searxng/searxng" local docker_port=8029 @@ -9484,6 +9523,7 @@ while true; do ;; 30|photoprism) + local app_id="30" local docker_name="photoprism" local docker_img="photoprism/photoprism:latest" local docker_port=8030 @@ -9516,6 +9556,7 @@ while true; do 31|s-pdf) + local app_id="31" local docker_name="s-pdf" local docker_img="frooodle/s-pdf:latest" local docker_port=8031 @@ -9542,6 +9583,7 @@ while true; do ;; 32|drawio) + local app_id="32" local docker_name="drawio" local docker_img="jgraph/drawio" local docker_port=8032 @@ -9562,6 +9604,7 @@ while true; do ;; 33|sun-panel) + local app_id="33" local docker_name="sun-panel" local docker_img="hslr/sun-panel" local docker_port=8033 @@ -9586,6 +9629,7 @@ while true; do ;; 34|pingvin-share) + local app_id="34" local docker_name="pingvin-share" local docker_img="stonith404/pingvin-share" local docker_port=8034 @@ -9610,6 +9654,7 @@ while true; do 35|moments) + local app_id="35" local docker_name="moments" local docker_img="kingwrcy/moments:latest" local docker_port=8035 @@ -9637,6 +9682,7 @@ while true; do 36|lobe-chat) + local app_id="36" local docker_name="lobe-chat" local docker_img="lobehub/lobe-chat:latest" local docker_port=8036 @@ -9658,6 +9704,7 @@ while true; do ;; 37|myip) + local app_id="37" local docker_name="myip" local docker_img="jason5ng32/myip:latest" local docker_port=8037 @@ -9692,6 +9739,7 @@ while true; do 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 app_id="39" local docker_name="bililive-go" local docker_img="chigusa/bililive-go" local docker_port=8039 @@ -9711,6 +9759,7 @@ while true; do ;; 40|webssh) + local app_id="40" local docker_name="webssh" local docker_img="jrohy/webssh" local docker_port=8040 @@ -9728,6 +9777,7 @@ while true; do 41|haozi) + local app_id="41" local lujing="[ -d "/www/server/panel" ]" local panelname="耗子面板" local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" @@ -9752,6 +9802,7 @@ while true; do 42|nexterm) + local app_id="42" local docker_name="nexterm" local docker_img="germannewsmaker/nexterm:latest" local docker_port=8042 @@ -9776,6 +9827,7 @@ while true; do ;; 43|hbbs) + local app_id="43" local docker_name="hbbs" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9796,6 +9848,7 @@ while true; do ;; 44|hbbr) + local app_id="44" local docker_name="hbbr" local docker_img="rustdesk/rustdesk-server" local docker_port=0000 @@ -9815,6 +9868,7 @@ while true; do ;; 45|registry) + local app_id="45" local docker_name="registry" local docker_img="registry:2" local docker_port=8045 @@ -9840,6 +9894,7 @@ while true; do ;; 46|ghproxy) + local app_id="46" local docker_name="ghproxy" local docker_img="wjqserver/ghproxy:latest" local docker_port=8046 @@ -9860,6 +9915,7 @@ while true; do 47|prometheus|grafana) + local app_id="47" local app_name="普罗米修斯监控" local app_text="Prometheus+Grafana企业级监控系统" local app_url="官网介绍: https://prometheus.io" @@ -9898,6 +9954,7 @@ while true; do ;; 48|node-exporter) + local app_id="48" local docker_name="node-exporter" local docker_img="prom/node-exporter" local docker_port=8048 @@ -9922,6 +9979,7 @@ while true; do ;; 49|cadvisor) + local app_id="49" local docker_name="cadvisor" local docker_img="gcr.io/cadvisor/cadvisor:latest" local docker_port=8049 @@ -9952,6 +10010,7 @@ while true; do 50|changedetection) + local app_id="50" local docker_name="changedetection" local docker_img="dgtlmoon/changedetection.io:latest" local docker_port=8050 @@ -9982,6 +10041,7 @@ while true; do 52|dpanel) + local app_id="52" local docker_name="dpanel" local docker_img="dpanel/dpanel:lite" local docker_port=8052 @@ -10005,6 +10065,7 @@ while true; do ;; 53|llama3) + local app_id="53" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10025,6 +10086,7 @@ while true; do 54|amh) + local app_id="54" local lujing="[ -d "/www/server/panel" ]" local panelname="AMH面板" local panelurl="官方地址: https://amh.sh/index.htm?amh" @@ -10047,7 +10109,7 @@ while true; do 55|frps) - frps_panel + frps_panel ;; 56|frpc) @@ -10055,6 +10117,7 @@ while true; do ;; 57|deepseek) + local app_id="57" local docker_name="ollama" local docker_img="ghcr.io/open-webui/open-webui:ollama" local docker_port=8053 @@ -10075,6 +10138,7 @@ while true; do 58|dify) + local app_id="58" local app_name="Dify知识库" local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" local app_url="官方网站: https://docs.dify.ai/zh-hans" @@ -10113,7 +10177,8 @@ while true; do ;; 59|new-api) - local app_name="New API" + local app_id="59" + local app_name="NewAPI" local app_text="新一代大模型网关与AI资产管理系统" local app_url="官方网站: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" @@ -10165,6 +10230,7 @@ while true; do 60|jms) + local app_id="60" local app_name="JumpServer开源堡垒机" local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" local app_url="官方介绍: https://github.com/jumpserver/jumpserver" @@ -10202,6 +10268,7 @@ while true; do ;; 61|libretranslate) + local app_id="61" local docker_name="libretranslate" local docker_img="libretranslate/libretranslate:latest" local docker_port=8061 @@ -10227,6 +10294,7 @@ while true; do 62|ragflow) + local app_id="62" local app_name="RAGFlow知识库" local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" local app_url="官方网站: https://github.com/infiniflow/ragflow" @@ -10265,6 +10333,7 @@ while true; do 63|open-webui) + local app_id="63" local docker_name="open-webui" local docker_img="ghcr.io/open-webui/open-webui:main" local docker_port=8063 @@ -10284,6 +10353,7 @@ while true; do ;; 64|it-tools) + local app_id="64" local docker_name="it-tools" local docker_img="corentinth/it-tools:latest" local docker_port=8064 @@ -10302,6 +10372,7 @@ while true; do 65|n8n) + local app_id="65" local docker_name="n8n" local docker_img="docker.n8n.io/n8nio/n8n" local docker_port=8065 @@ -10319,7 +10390,7 @@ while true; do -e N8N_HOST=${yuming} \ -e N8N_PORT=5678 \ -e N8N_PROTOCOL=https \ - -e N8N_WEBHOOK_URL=https://${yuming}/ \ + -e WEBHOOK_URL=https://${yuming}/ \ docker.n8n.io/n8nio/n8n ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} @@ -10341,6 +10412,7 @@ while true; do 67|ddns) + local app_id="67" local docker_name="ddns-go" local docker_img="jeessy/ddns-go" local docker_port=8067 @@ -10364,6 +10436,7 @@ while true; do ;; 68|allinssl) + local app_id="68" local docker_name="allinssl" local docker_img="allinssl/allinssl:latest" local docker_port=8068 @@ -10382,6 +10455,7 @@ while true; do 69|sftpgo) + local app_id="69" local docker_name="sftpgo" local docker_img="drakkan/sftpgo:latest" local docker_port=8069 @@ -10413,6 +10487,7 @@ while true; do 70|astrbot) + local app_id="70" local docker_name="astrbot" local docker_img="soulter/astrbot:latest" local docker_port=8070 @@ -10444,6 +10519,7 @@ while true; do 71|navidrome) + local app_id="71" local docker_name="navidrome" local docker_img="deluan/navidrome:latest" local docker_port=8071 @@ -10473,6 +10549,7 @@ while true; do 72|bitwarden) + local app_id="72" local docker_name="bitwarden" local docker_img="vaultwarden/server" local docker_port=8072 @@ -10502,6 +10579,7 @@ while true; do 73|libretv) + local app_id="73" local docker_name="libretv" local docker_img="bestzwei/libretv:latest" local docker_port=8073 @@ -10531,6 +10609,7 @@ while true; do 74|moontv) + local app_id="74" local docker_name="moontv" local docker_img="ghcr.io/senshinya/moontv:latest" local docker_port=8074 @@ -10560,6 +10639,7 @@ while true; do 75|melody) + local app_id="75" local docker_name="melody" local docker_img="foamzou/melody:latest" local docker_port=8075 @@ -10589,6 +10669,7 @@ while true; do 76|dosgame) + local app_id="76" local docker_name="dosgame" local docker_img="oldiy/dosgame-web-docker:latest" local docker_port=8076 @@ -10614,6 +10695,7 @@ while true; do 77|xunlei) + local app_id="77" local docker_name="xunlei" local docker_img="cnk3x/xunlei" local docker_port=8077 @@ -10649,6 +10731,7 @@ while true; do 78|PandaWiki) + local app_id="78" local app_name="PandaWiki" local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" local app_url="官方介绍: https://github.com/chaitin/PandaWiki" @@ -10676,6 +10759,7 @@ while true; do 79|beszel) + local app_id="79" local docker_name="beszel" local docker_img="henrygd/beszel" local docker_port=8079 @@ -10703,6 +10787,8 @@ while true; do 80|linkwarden) + + local app_id="80" local app_name="linkwarden书签管理" local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" local app_url="官方网站: https://linkwarden.app/" @@ -10774,6 +10860,7 @@ while true; do 81|jitsi) + local app_id="81" local app_name="JitsiMeet视频会议" local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" local app_url="官方网站: https://jitsi.org/" @@ -10824,6 +10911,7 @@ while true; do 82|gpt-load) + local app_id="82" local docker_name="gpt-load" local docker_img="tbphp/gpt-load:latest" local docker_port=8082 @@ -10852,6 +10940,7 @@ while true; do 83|komari) + local app_id="83" local docker_name="komari" local docker_img="ghcr.io/komari-monitor/komari:latest" local docker_port=8083 @@ -10883,6 +10972,7 @@ while true; do 84|wallos) + local app_id="84" local docker_name="wallos" local docker_img="bellamy/wallos:latest" local docker_port=8084 @@ -10911,6 +11001,7 @@ while true; do 85|immich) + local app_id="85" local app_name="immich图片视频管理器" local app_text="高性能自托管照片和视频管理解决方案。" local app_url="官网介绍: https://github.com/immich-app/immich" @@ -10953,6 +11044,7 @@ while true; do 86|jellyfin) + local app_id="86" local docker_name="jellyfin" local docker_img="jellyfin/jellyfin" local docker_port=8086 @@ -10988,6 +11080,7 @@ while true; do 87|synctv) + local app_id="87" local docker_name="synctv" local docker_img="synctvorg/synctv" local docker_port=8087 @@ -11015,6 +11108,7 @@ while true; do 88|owncast) + local app_id="88" local docker_name="owncast" local docker_img="owncast/owncast:latest" local docker_port=8088 From 205923edcb026e4cbd221cbd3fe5a1e3bbe7cd6d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 17 Aug 2025 04:16:15 +0000 Subject: [PATCH 065/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-17=2004:16:15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 22 +- jp/kejilion.sh | 4436 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 4374 +++++++++++++++++++++++------------------------ 3 files changed, 4416 insertions(+), 4416 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 4aca50ce2..cd73886fb 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1740,7 +1740,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to mode parameters + # Decide to turn on or off WAF according to the mode parameter if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -4989,7 +4989,7 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Detected operating systems:$os_name $os_version" + echo "Operating system detected:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." @@ -5818,7 +5818,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Create a new connection example:" + echo "Example to create a new connection:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -5959,7 +5959,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can connect to other Linux systems via SSH" + echo "Can be connected to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -7517,7 +7517,7 @@ linux_ldnmp() { echo -e "${gl_huang}------------------------" echo -e "${gl_huang}21. ${gl_bai}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy - domain name" - echo -e "${gl_huang}25. ${gl_bai}Install the Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" + echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" echo -e "${gl_huang}30. ${gl_bai}Customize static site" echo -e "${gl_huang}------------------------" @@ -7693,7 +7693,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Backend login path: /admin" + echo "Background login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -7924,7 +7924,7 @@ linux_ldnmp() { ;; 2) echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter to skip remote download:" url_download_db + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -11357,7 +11357,7 @@ linux_Settings() { echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host analysis${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" @@ -11388,7 +11388,7 @@ 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 "Shortcut keys have been set" + echo "Shortcut keys are set" send_stats "Script shortcut keys have been set" break_end linux_Settings @@ -12400,7 +12400,7 @@ EOF echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "7. Set the time zone to${gl_huang}Shanghai${gl_bai}" echo -e "8. Automatically optimize DNS address${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "9. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "9. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10. Switch to kernel parameter optimization in Linux system${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" read -e -p "Are you sure to have one-click maintenance? (Y/N):" choice @@ -12632,7 +12632,7 @@ linux_file() { 5) # 删除目录 read -e -p "Please enter the directory name to delete:" dirname rm -rf "$dirname" && echo "Directory has been deleted" || echo "Deletion failed" - send_stats "Delete directory" + send_stats "Delete Directory" ;; 6) # 返回上一级选单目录 cd .. diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 4da715382..b449d9342 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# コマンドを実行する関数を定義します +# 定义一个函数来执行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! -# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 -# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# ユーザーに条件に同意するように促します +# 提示用户同意条款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" - echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" - echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" + echo "首次使用脚本,请先阅读并同意用户许可协议。" + echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "上記の条件に同意しますか? (y/n):" user_input + read -r -p "是否同意以上条款?(y/n): " user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "ライセンスの同意" + 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 "許可の拒否" + send_stats "许可拒绝" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}インストール$package...${gl_bai}" + echo -e "${gl_huang}正在安装 $package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "現在利用可能なスペース:$((available_space_mb/1024))g" - echo "最小需要スペース:${required_gb}G" - echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" - send_stats "ディスクスペースが不十分です" + echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" + echo "当前可用空间: $((available_space_mb/1024))G" + echo "最小需求空间: ${required_gb}G" + echo "无法继续安装,请清理磁盘空间后重试。" + send_stats "磁盘空间不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}アンインストール$package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return 1 fi done } -# さまざまな分布に適したUniversal SystemCTL関数 +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# サービスを再起動します +# 重启服务 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1サービスは再開されました。" + echo "$1 服务已重启。" else - echo "エラー:再起動$1サービスは失敗しました。" + echo "错误:重启 $1 服务失败。" fi } -# サービスを開始します +# 启动服务 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1サービスが開始されました。" + echo "$1 服务已启动。" else - echo "エラー:開始$1サービスは失敗しました。" + echo "错误:启动 $1 服务失败。" fi } -# サービスを停止します +# 停止服务 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1サービスは停止しました。" + echo "$1 服务已停止。" else - echo "エラー:停止します$1サービスは失敗しました。" + echo "错误:停止 $1 服务失败。" fi } -# サービスのステータスを確認します +# 查看服务状态 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1サービスステータスが表示されます。" + echo "$1 服务状态已显示。" else - echo "エラー:表示できません$1サービスステータス。" + echo "错误:无法显示 $1 服务状态。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME電源を入れるように設定します。" + echo "$SERVICE_NAME 已设置为开机自启。" } break_end() { - echo -e "${gl_lv}操作が完了しました${gl_bai}" - echo "任意のキーを押して続行します..." + echo -e "${gl_lv}操作完成${gl_bai}" + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -425,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker環境のインストール...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -500,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Dockerコンテナ管理" - echo "Dockerコンテナリスト" + send_stats "Docker容器管理" + echo "Docker容器列表" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "コンテナ操作" + echo "容器操作" echo "------------------------" - echo "1.新しいコンテナを作成します" + echo "1. 创建新的容器" echo "------------------------" - echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" - echo "3.指定された容器を停止します7。すべての容器を停止します" - echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" - echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" + echo "2. 启动指定容器 6. 启动所有容器" + echo "3. 停止指定容器 7. 停止所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11。指定されたコンテナを入力します12。コンテナログを表示します" - echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "新しいコンテナを作成します" - read -e -p "作成コマンドを入力してください:" dockername + send_stats "新建容器" + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "指定された容器を起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) - send_stats "指定された容器を停止します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "停止指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "指定されたコンテナを削除します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "指定された容器を再起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "重启指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker restart $dockername ;; 6) - send_stats "すべてのコンテナを起動します" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) - send_stats "すべてのコンテナを停止します" + send_stats "停止所有容器" docker stop $(docker ps -q) ;; 8) - send_stats "すべてのコンテナを削除します" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "すべてのコンテナを再起動します" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "コンテナを入力します" - read -e -p "コンテナ名を入力してください:" dockername + send_stats "进入容器" + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "コンテナログを表示します" - read -e -p "コンテナ名を入力してください:" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "コンテナネットワークを表示します" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "コンテナの占有を表示します" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "コンテナポートアクセスを許可します" - read -e -p "コンテナ名を入力してください:" docker_name + send_stats "允许容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +620,8 @@ while true; do ;; 16) - send_stats "コンテナポートアクセスをブロックします" - read -e -p "コンテナ名を入力してください:" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker画像管理" - echo "Docker画像リスト" + send_stats "Docker镜像管理" + echo "Docker镜像列表" docker image ls echo "" - echo "ミラー操作" + echo "镜像操作" echo "------------------------" - echo "1.指定された画像を取得する3。指定された画像を削除します" - echo "2。指定された画像4を更新します。すべての画像を削除します" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "鏡を引っ張ります" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}画像を取得する:$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "画像を更新します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}更新された画像:$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "ミラーを削除します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "すべての画像を削除します" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "サポートされていない分布:$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "オペレーティングシステムを決定することはできません。" + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +775,27 @@ docker_ipv6_on() { 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を使用して、構成ファイルの更新を処理します + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 現在の構成には既にIPv6設定があるかどうかを確認してください + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 構成を更新し、IPv6を有効にします + # 更新配置,开启 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}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 構成ファイルが存在するかどうかを確認します + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" + echo -e "${gl_hong}配置文件不存在${gl_bai}" return fi - # 現在の構成をお読みください + # 读取当前配置 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # JQを使用して、構成ファイルの更新を処理します + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 現在のIPv6ステータスを確認してください + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 元の構成と新しい構成を比較します + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + 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" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "ポートが開かれました" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + 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" + echo "已关闭端口 $port" fi done - # 既存のルールを削除する(ある場合) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 最初に新しいルールを挿入します + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "ポートは閉じた" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + 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" + echo "已放行IP $ip" fi done save_iptables_rules - send_stats "IPをリリースしました" + send_stats "已放行IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + 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" + echo "已阻止IP $ip" fi done save_iptables_rules - send_stats "IPブロック" + send_stats "已阻止IP" } @@ -990,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 防御DDOをオンにします + # 开启防御 DDoS 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 @@ -1000,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS防御をオンにします" + send_stats "开启DDoS防御" } -# DDOS防御をオフにします +# 关闭DDoS防御 disable_ddos_defense() { - # 防御DDOをオフにします + # 关闭防御 DDoS 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 @@ -1015,14 +1015,14 @@ disable_ddos_defense() { 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防御をオフにします" + send_stats "关闭DDoS防御" } -# 国家IPルールを管理する機能 +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # IPSETが存在しない場合は作成します + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IPエリアファイルをダウンロードします + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # IPSETにIPを追加します + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # iptablesでIPをブロックします + # 使用 iptables 阻止 IP 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_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 許可された国のIPSETを作成する(存在しない場合) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IPエリアファイルをダウンロードします + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + 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" - # IPSETにIPを追加します + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 指定された国のIPのみが許可されています + # 仅允许指定国家的 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_codeIPアドレス" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 国のiptablesルールを削除します + # 删除国家的 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を破壊します + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "正常に持ち上げられました$country_codeIPアドレスの制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高度なファイアウォール管理" - send_stats "高度なファイアウォール管理" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "ファイアウォール管理" + echo "防火墙管理" echo "------------------------" - echo "1.指定されたポート2を開きます。指定されたポートを閉じます" - echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5。IPホワイトリスト6。IPブラックリスト" - echo "7.指定されたIPをクリアします" + echo "5. IP白名单 6. IP黑名单" + echo "7. 清除指定IP" echo "------------------------" - echo "11. ping 12を許可します。Pingを無効にします" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" - echo "17.指定国でのIP制限をリリースします" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "オープンポート番号を入力してください:" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "指定されたポートを開きます" + send_stats "开放指定端口" ;; 2) - read -e -p "閉じたポート番号を入力してください:" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "指定されたポートを閉じます" + send_stats "关闭指定端口" ;; 3) - # すべてのポートを開きます + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1164,10 @@ iptables_panel() { 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 "すべてのポートを開きます" + send_stats "开放所有端口" ;; 4) - # すべてのポートを閉じます + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1180,40 @@ iptables_panel() { 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 "すべてのポートを閉じます" + send_stats "关闭所有端口" ;; 5) - # IPホワイトリスト - read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IPブラックリスト - read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) - # 指定されたIPをクリアします - read -e -p "クリアされたIPを入力してください:" d_ip + # 清除指定 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をクリアします" + send_stats "清除指定IP" ;; 11) - # pingを許可します + # 允许 PING 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 "pingを許可します" + send_stats "允许PING" ;; 12) - # pingを無効にします + # 禁用 PING 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 "pingを無効にします" + send_stats "禁用PING" ;; 13) enable_ddos_defense @@ -1223,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "許可された国$country_codeIP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "国をブロックします$country_codeIP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "国をきれいにします$country_codeIP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 現在のシステムですべてのスワップパーティションを取得します + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 反復して、すべてのスワップパーティションを削除します + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # /swapfileが使用されなくなったことを確認してください + # 确保 /swapfile 不再被使用 swapoff /swapfile - # 古い /swapfileを削除します + # 删除旧的 /swapfile rm -f /swapfile - # 新しいスワップパーティションを作成します + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 仮想メモリを作成する必要があるかどうかを判断します +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginxバージョンを取得します + # 获取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バージョンを取得します + # 获取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バージョンを取得します + # 获取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バージョンを取得します + # 获取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}" @@ -1341,7 +1341,7 @@ ldnmp_v() { 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 @@ -1350,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.ymlファイルをダウンロードして置き換えます + # 下载 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ファイルに置き換えます + # 在 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 @@ -1399,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP環境がインストールされています" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1416,7 @@ install_certbot() { 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 "更新タスクが更新されました" + echo "续签任务已更新" } @@ -1453,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming公開鍵情報${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}証明書ストレージパス${gl_bai}" - echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" - echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" - echo "サイト情報証明書の有効期限" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "ドメイン名証明書の成功したアプリケーション" + send_stats "域名证书申请成功" else - send_stats "ドメイン名証明書のアプリケーションは失敗しました" - echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" - echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" - echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" - echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" - echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" - echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" - echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "もう一度展開してみてください$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1549,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "ドメイン名の再利用" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1623,8 +1623,8 @@ nginx_upgrade() { 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}仕上げる" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" } @@ -1643,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "ログイン情報:" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "起動する$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1657,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 構成ファイルが存在するかどうかを確認します + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # ゾーン_idsを配列に変換します + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # キャッシュをクリーニングするかどうかをユーザーに促します - read -e -p "CloudFlareのキャッシュをきれいにする必要がありますか? (y/n):" answer + # 提示用户是否清理缓存 + 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 "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS + 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をループして、Clear Cacheコマンドを実行します + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "ゾーン_idのキャッシュのクリア:$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1687,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "キャッシュクリアリクエストが送信されました。" + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "サイトキャッシュをクリーンアップします" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1703,28 @@ web_cache() { web_del() { - send_stats "サイトデータを削除します" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "ドメイン名の削除:$yuming" + 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" + # 删除数据库前检查是否存在,避免报错 + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることを決定します + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # WAFをオンにしてください:コメントを削除します + # 开启 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を閉じる:コメントを追加します + # 关闭 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 "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotliをオンにする:コメントを削除します + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる:コメントを追加します + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTDをオンにしてください:コメントを削除します + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # ZSTDを閉じる:コメントを追加します + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1945,11 @@ nginx_zstd() { else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1990,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 安装防御程序" echo "------------------------" - echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" - echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21。CloudFlareモード22。5秒シールドの高負荷" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31。WAF32をオンにしてください。WAFをオフにします" - echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 卸载防御程序" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2097,11 +2097,11 @@ web_security() { ;; 21) - send_stats "CloudFlareモード" - echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" + send_stats "cloudflare模式" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください。" cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2116,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "CFパラメーターを取得します:" - echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" - echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください。" cftoken - read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2147,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高負荷自動シールドオープニングスクリプトが追加されました" + echo "高负载自动开盾脚本已添加" else - echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "サイトWAFが有効になっています" - send_stats "サイトWAFが有効になっています" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "サイトWAFは閉鎖されています" - send_stats "サイトWAFは閉鎖されています" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2189,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 現在のworker_processesの設定値を取得します +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 値に応じてモード情報を設定します +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotliが有効であり、コメントされていないかどうかを確認してください + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # GZIPが有効になっており、コメントされていないかどうかを確認してください + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP環境を最適化します" - echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1。標準モード2。高性能モード(推奨2H4g以上)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" - echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" - echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "サイト標準モード" + send_stats "站点标准模式" - # nginxチューニング + # 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チューニング + # 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チューニング + # 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 @@ -2276,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2288,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP環境は標準モードに設定されています" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "サイトの高性能モード" + send_stats "站点高性能模式" - # nginxチューニング + # 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チューニング + # 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チューニング + # 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 @@ -2316,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2326,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境は、高性能モードに設定されています" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2386,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker = "$ {gl_lv} $ {gl_bai}インストール" +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2396,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "アクセスアドレス:" +echo "访问地址:" ip_address @@ -2434,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # デフォルトのラベルは最新です + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 公式画像のサポートを追加します + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIから画像公開時間を取得します + # 从 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 @@ -2477,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2487,34 @@ block_container_port() { install iptables - # 他のすべてのIPSを確認してブロックします + # 检查并封禁其他所有 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を確認してリリースします + # 检查并放行指定 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 + # 检查并放行本地网络 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 - # 他のすべてのIPSを確認してブロックします + # 检查并封禁其他所有 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を確認してリリースします + # 检查并放行指定 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 + # 检查并放行本地网络 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 @@ -2524,7 +2524,7 @@ block_container_port() { fi - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2535,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2545,17 @@ clear_container_rules() { install iptables - # 他のすべてのIPをブロックするルールを明確にします + # 清除封禁其他所有 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をリリースするためのルールをクリアします + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2564,17 +2564,17 @@ clear_container_rules() { - # 他のすべてのIPをブロックするルールを明確にします + # 清除封禁其他所有 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をリリースするためのルールをクリアします + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2585,7 +2585,7 @@ clear_container_rules() { fi - echo "IP+ポートはサービスにアクセスすることが許可されています" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2599,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:block_host_port <ポート番号> <承認IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # 他のすべてのIPアクセスを拒否しました + # 拒绝其他所有 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アクセスを許可します + # 允许指定 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 @@ -2626,27 +2626,27 @@ block_host_port() { - # 他のすべてのIPアクセスを拒否しました + # 拒绝其他所有 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アクセスを許可します + # 允许指定 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+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2658,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # 他のすべてのIPアクセスをブロックするルールをクリアします + # 清除封禁所有其他 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アクセスを許可するルールを明確にします + # 清除允许指定 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アクセスをブロックするルールをクリアします + # 清除封禁所有其他 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アクセスを許可するルールを明確にします + # 清除允许指定 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+ポートはサービスにアクセスすることが許可されています" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2747,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_nameインストール" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "インストール$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_nameインストール" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新します$docker_name" + send_stats "更新$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" - send_stats "アンインストール$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2995,17 @@ 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 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "再起動" + echo "已重启" reboot ;; *) - echo "キャンセル" + echo "已取消" ;; esac @@ -3127,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP環境を再度インストールできません" - echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3138,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP環境をインストールします" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx環境をインストールします" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3169,8 @@ 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 "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "LDNMP環境を最初にインストールしてください" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3191,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "最初にNGINX環境をインストールしてください" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3202,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "あなたの$webname建てられた!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webnameインストール情報は次のとおりです。" + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "あなたの$webname建てられた!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3223,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "発生防止ポートを入力してください。" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3297,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "スペースで区切られた複数の生成防止IP+ポートを入力してください(たとえば、127.0.0.1:3000 127.0.1:3002):" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3357,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMPサイト管理" - echo "LDNMP環境" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - echo -e "サイト:${output}証明書の有効期限" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "データベース:${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" - echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" - echo "5.アクセスログを表示6。エラーログを表示します" - echo "7.グローバル構成の編集8。サイト構成の編集" - echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" + echo "5. 查看访问日志 6. 查看错误日志" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20.指定されたサイトデータを削除します" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "ドメイン名証明書を申請します" - read -e -p "ドメイン名を入力してください:" yuming + 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 @@ -3412,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "サイトドメイン名を変更します" - echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" - read -e -p "古いドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # MySQLの交換 + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "関連するサイトを作成します" - echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" - read -e -p "既存のドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3476,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "アクセスログを表示します" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "エラーログを表示します" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "グローバル構成を編集します" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "サイト構成を編集します" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "サイトデータを表示します" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3540,16 +3540,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" - echo "公式ウェブサイトの紹介:$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1。インストール2。管理3。アンインストール" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}コントロール" + send_stats "${panelname}控制" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}アンインストール" + send_stats "${panelname}卸载" ;; *) break @@ -3615,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "FRPサーバーをインストールします" - # ランダムポートと資格情報を生成します + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3637,17 @@ EOF donlond_frp frps - # 出力生成情報 + # 输出生成的信息 ip_address echo "------------------------" - echo "クライアントの展開に必要なパラメーター" - echo "サービスIP:$ipv4_address" + 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 "FRP面板信息" + echo "FRP面板地址: http://$ipv4_address:$dashboard_port" + echo "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3657,9 @@ EOF configure_frpc() { - send_stats "FRPクライアントをインストールします" - read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr - read -e -p "外部ネットワークドッキングトークンを入力してください:" token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3679,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "FRPイントラネットサービスを追加します" - # ユーザーにサービス名と転送情報を入力するように促します - read -e -p "サービス名を入力してください:" service_name - read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "イントラネットIPを入力してください[デフォルト127.0.0.1を入力]:" local_ip + read -e -p "请输入内网IP [回车默认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 + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # 構成ファイルにユーザー入力を書き込みます + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 出力生成情報 - echo "仕える$service_nameFRPC.TOMLに正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3711,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "FRPイントラネットサービスを削除します" - # ユーザーに削除する必要があるサービス名を入力するように促します - read -e -p "削除する必要があるサービス名を入力してください:" service_name - # SEDを使用して、サービスとその関連構成を削除します + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "仕える$service_nameFRPC.TOMLから削除されました" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3726,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3756,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前の値をクリアします + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3789,7 +3789,7 @@ list_forwarding_services() { } END { - # 最後のサービスの情報を印刷します + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3802,17 @@ list_forwarding_services() { -# FRPサーバーポートを取得します +# 获取 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以外のポートがあるかどうかを確認してください + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3821,18 @@ generate_access_urls() { fi done - # 有効なポートがある場合にのみタイトルとコンテンツを表示します + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRPサービス外部アクセスアドレス:" + echo "FRP服务对外访问地址:" - # IPv4アドレスを処理します + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # IPv6アドレスを処理する(存在する場合) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3841,7 @@ generate_access_urls() { done fi - # HTTPS構成の処理 + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRPサーバー$check_frp $update_status" - echo "FRPイントラネット浸透サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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 "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00。サービスのステータスを更新します0。前のメニューに戻ります" + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3902,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPサーバーがインストールされています" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPサーバーが更新されました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; 5) - echo "ドメイン名アクセスへの逆イントラネット侵入サービス" - send_stats "FRP外部ドメイン名へのアクセス" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します" - read -e -p "リリースするポートを入力してください:" frps_port + 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 + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "FRPサービスステータスを更新します" - echo "FRPサービスステータスは更新されました" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3966,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRPクライアント$check_frp $update_status" - echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3999,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPクライアントが更新されました" + echo "FRP客户端已经更新完成" ;; 3) @@ -4020,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; 4) @@ -4066,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "YT-DLPダウンロードツール" + 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 -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 "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" - echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "オプション番号を入力してください:" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "YT-DLPのインストール..." - echo "YT-DLPのインストール..." + send_stats "正在安装 yt-dlp..." + echo "正在安装 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "インストールが完了しました。任意のキーを押して続行します..." + echo "安装完成。按任意键继续..." read ;; 2) - send_stats "yt-dlpを更新..." - echo "yt-dlpを更新..." + send_stats "正在更新 yt-dlp..." + echo "正在更新 yt-dlp..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新が完了しました。任意のキーを押して続行します..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "yt-dlpのアンインストール..." - echo "yt-dlpのアンインストール..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アンインストールが完了しました。任意のキーを押して続行します..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "単一のビデオダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "ダウンロードが完了したら、任意のキーを押して続行します..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "バッチビデオのダウンロード" + 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.0&from_spmid=666.25.Episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "バッチダウンロードを開始します..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "カスタムビデオのダウンロード" - read -e -p "完全なYT-DLPパラメーター(YT-DLPを除く)を入力してください。" custom + 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 "実行が完了したら、キーを押して続行します..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3ダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "ビデオを削除します" - read -e -p "削除ビデオの名前を入力してください:" rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4195,7 @@ set_timedate() { -# DPKG割り込みの問題を修正します +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}システムの更新...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi } @@ -4231,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "清理包管理器缓存..." apk cache clean - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "APKキャッシュを削除してください..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "未使用の依存関係をクリーンアップ..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "清理包管理器缓存..." pkg clean -y - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi return @@ -4340,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "DNSを最適化します" +send_stats "优化DNS" while true; do clear - echo "DNSアドレスを最適化します" + echo "优化DNS地址" echo "------------------------" - echo "現在のDNSアドレス" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1。外国DNS最適化:" + 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 "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3。DNS構成を手動で編集します" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "外国のDNS最適化" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内のDNS最適化" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "DNS構成を手動で編集します" + send_stats "手动编辑DNS配置" ;; *) break @@ -4403,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthenticationが見つかった場合は、はいに設定します + # 如果找到 PasswordAuthentication 设置为 yes 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はyesに設定されています + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4417,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthenticationもPubKeyAuthenticationが一致しない場合は、デフォルト値を設定します + # 如果 PasswordAuthentication 和 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" @@ -4428,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # バックアップSSH構成ファイル + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSHポートは次のように変更されています。$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4459,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4499,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4508,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "ルートパスワードを設定します" +echo "设置你的ROOT密码" 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}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能では、ルートユーザーを実行する必要があります!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "システムを再インストールします" + 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 @@ -4538,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}最初のパスワード:${gl_huang}LeitboGi0ro${gl_bai}初期ポート:${gl_huang}22${gl_bai}" - echo -e "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "再インストールするシステムを選択してください:" sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "Debian 13を再インストールします" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "Debian 12を再インストールします" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Debian 11を再インストールします" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Debian 10を再インストールします" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "Ubuntu 24.04を再インストールします" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "Ubuntu 22.04を再インストールします" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Ubuntu 20.04を再インストールします" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "Ubuntu 18.04を再インストールします" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4661,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10を再インストールします" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9を再インストールします" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールします" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "alma9を再インストールします" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10を再インストールします" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9を再インストールします" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42を再インストールします" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41を再インストールします" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "CENTOS10を再インストールします" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "CENTOS9を再インストールします" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールします" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールします" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "Kaliを再インストールします" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "Openeulerを再インストールします" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "OpenSuseを再インストールします" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "飛ぶ牛をリロードします" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4790,7 @@ dd_xitong() { 41) - send_stats "Windows11を再インストールします" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "Windows 10を再インストールします" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Windows 7を再インストールします" + send_stats "重装windows7" 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 @@ -4812,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "Windows Server 19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "Windows Server 16を再インストールします" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11アームを再インストールします" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3管理" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "XanmodのBBRV3カーネルをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "カーネル管理" + echo "内核管理" echo "------------------------" - echo "1。BBRV3カーネルを更新します2。BBRV3カーネルをアンインストールします" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4884,7 +4884,7 @@ bbrv3() { # 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:リポジトリを追加します + # 步骤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+') @@ -4893,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmodカーネルが更新されました。再起動後に有効になります" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4916,13 +4916,13 @@ bbrv3() { else clear - echo "BBR3加速度をセットアップします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "Debian/Ubuntuのみをサポートします" - echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4930,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "オペレーティングシステムの種類を決定できません" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4946,7 +4946,7 @@ bbrv3() { # 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:リポジトリを追加します + # 步骤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+') @@ -4957,17 +4957,17 @@ bbrv3() { bbr_on - echo "Xanmodカーネルがインストールされ、BBR3が正常に有効になります。再起動後に有効になります" + 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 "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4976,40 +4976,40 @@ bbrv3() { elrepo_install() { - # Elrepo GPG公開キーをインポートします - echo "Elrepo GPG公開キーをインポートしてください..." + # 导入 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" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # 検出されたオペレーティングシステム情報を印刷します - echo "検出されたオペレーティングシステム:$os_name $os_version" - # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "Elrepoリポジトリ構成(バージョン8)をインストールしてください..." + 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)をインストールしてください..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "サポートされていないシステムバージョン:$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします - echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5017,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "レッドハットカーネル管理" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "Elrepo Kernelをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "カーネル管理" + echo "内核管理" echo "------------------------" - echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + 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カーネルを更新します" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" - send_stats "レッドハットカーネルをアンインストールします" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5060,26 +5060,26 @@ elrepo() { else clear - echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" - echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hatカーネルをアップグレードします" + send_stats "升级红帽内核" server_reboot ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5090,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "スキャンするディレクトリを指定してください。" + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}スキャンディレクトリ$@...${gl_bai}" + 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コマンドパラメーターを作成します + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Dockerコマンドを実行します + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5130,8 @@ clamav_scan() { 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}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" + 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}" } @@ -5143,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "ウイルススキャン管理" + send_stats "病毒扫描管理" while true; do clear - echo "クラマブウイルススキャンツール" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" - echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアを含む。" + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3。カスタムディレクトリスキャン${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "フルディスクスキャン" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "カスタムディレクトリスキャン" - read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5194,21 @@ clamav() { -# 高性能モード最適化関数 +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5220,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # レイテンシを減らすために、大きな透明なページを無効にします + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# イコライゼーションモード最適化関数 +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5261,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # 透明なページを復元します + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# デフォルト設定関数を復元します +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}仮想メモリを復元します...${gl_bai}" + 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}" + 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 @@ -5302,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" - # 透明なページを復元します + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# ウェブサイトの構築最適化機能 +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}ウェブサイトの構築最適化モードに切り替えます...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5344,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # レイテンシを減らすために、大きな透明なページを無効にします + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linuxカーネルチューニング管理" - echo "Linuxシステムにおけるカーネルパラメーターの最適化" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" - echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" - echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" - echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" - echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" - echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" - echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能モードの最適化" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "バランスモードの最適化" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "ウェブサイトの最適化モデル" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "ライブストリーミング最適化" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "ゲームサーバーの最適化" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "デフォルト設定を復元します" + send_stats "还原默认设置" ;; *) break @@ -5446,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5455,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "サポートされていないシステム:$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "サポートされていないシステム、システムタイプは認識できません。" + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5475,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "システム言語を切り替えます" +send_stats "切换系统语言" while true; do clear - echo "現在のシステム言語:$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1。英語2。簡素化された中国語3。伝統的な中国語" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えます" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "簡素化された中国人に切り替えます" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "伝統的な中国人に切り替えます" + send_stats "切换到繁体中文" ;; *) break @@ -5519,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5530,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "コマンドラインの美化ツール" + send_stats "命令行美化工具" while true; do clear - echo "コマンドラインの美化ツール" + 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}#" @@ -5543,9 +5543,9 @@ shell_bianse() { 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5590,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "システムリサイクルステーション" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5605,17 @@ linux_trash() { fi clear - echo -e "現在のリサイクルビン${trash_status}" - echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" - echo "3。コンテンツを復元4。リサイクルビンをクリアします" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5623,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5631,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "復元するにはファイル名を入力してください。" file_to_restore + 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ホームディレクトリに復元されました。" + echo "$file_to_restore 已还原到主目录。" else - echo "ファイルは存在しません。" + echo "文件不存在。" fi ;; 4) - read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "リサイクルビンがクリアされました。" + echo "回收站已清空。" fi ;; *) @@ -5658,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "コマンドのお気に入り" +send_stats "命令收藏夹" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップを作成します +# 创建备份 create_backup() { - send_stats "バックアップを作成します" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # ユーザーにバックアップディレクトリを入力するように求めます - echo "バックアップ例を作成します:" - echo "- 単一のディレクトリをバックアップします: /var /www" - echo "- バックアップ複数のディレクトリ: /etc /home /var /log" - echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" - read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5682,119 @@ create_backup() { "/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 "選択したバックアップディレクトリは次のとおりです。" + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # バックアップを作成します - echo "バックアップを作成します$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # コマンドが成功しているかどうかを確認してください + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "バックアップの作成に失敗しました!" + echo "备份创建失败!" exit 1 fi } -# バックアップを復元します +# 恢复备份 restore_backup() { - send_stats "バックアップを復元します" - # 復元するバックアップを選択します - read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "备份文件不存在!" exit 1 fi - echo "バックアップの回復$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "バックアップと復元を正常に!" + echo "备份恢复成功!" else - echo "バックアップリカバリに失敗しました!" + echo "备份恢复失败!" exit 1 fi } -# バックアップをリストします +# 列出备份 list_backups() { - echo "利用可能なバックアップ:" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# バックアップを削除します +# 删除备份 delete_backup() { - send_stats "バックアップを削除します" + send_stats "删除备份" - read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "备份文件不存在!" exit 1 fi - # バックアップを削除します + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "バックアップは正常に削除されました!" + echo "备份删除成功!" else - echo "バックアップの削除が失敗しました!" + echo "备份删除失败!" exit 1 fi } -# バックアップメインメニュー +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "システムバックアップ機能" - echo "システムバックアップ機能" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } @@ -5806,56 +5806,56 @@ linux_backup() { -# 接続リストを表示します +# 显示连接列表 list_connections() { - echo "接続の保存:" + 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 "- ユーザー名:root" - echo "- ポート:22" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "接続名を入力してください:" name - read -e -p "IPアドレスを入力してください:" ip - read -e -p "ユーザー名(デフォルト:root)を入力してください:" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "ポート番号を入力してください(デフォルト:22):" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "認証方法を選択してください:" - echo "1。パスワード" - echo "2。キー" - read -e -p "選択(1/2)を入力してください:" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + 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" @@ -5864,89 +5864,89 @@ add_connection() { fi ;; *) - echo "無効な選択!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "接続が保存されます!" + echo "连接已保存!" } -# 接続を削除します +# 删除连接 delete_connection() { - send_stats "接続を削除します" - read -e -p "削除するには、接続番号を入力してください。" num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続は見つかりませんでした。" + 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 "接続が削除されました!" + echo "连接已删除!" } -# 接続を使用します +# 使用连接 use_connection() { - send_stats "接続を使用します" - read -e -p "使用するには、接続番号を入力してください。" num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続は見つかりませんでした。" + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "接続$name ($ip)..." + 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.ターゲットサーバーがキーを使用してログインできるかどうか。" + 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 "错误:未安装 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サービスが正常に実行されているかどうか。" + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "SSHリモート接続ツール" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSHリモート接続ツール" - echo "SSHを介して他のLinuxシステムに接続できます" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5988,156 +5988,156 @@ ssh_manager() { -# 利用可能なハードディスクパーティションをリストします +# 列出可用的硬盘分区 list_partitions() { - echo "利用可能なハードディスクパーティション:" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントします +# 挂载分区 mount_partition() { - send_stats "パーティションをマウントします" - read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "パーティションはすでに取り付けられています!" + echo "分区已经挂载!" return fi - # マウントポイントを作成します + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントします + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "パーティションマウントに正常に:$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "パーティションマウントは失敗しました!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# パーティションをアンインストールします +# 卸载分区 unmount_partition() { - send_stats "パーティションをアンインストールします" - read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "パーティションはマウントされていません!" + echo "分区未挂载!" return fi - # パーティションをアンインストールします + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティションのアンインストールに正常に:$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "パーティションのアンインストールに失敗しました!" + echo "分区卸载失败!" fi } -# マウントされたパーティションをリストします +# 列出已挂载的分区 list_mounted_partitions() { - echo "マウントされたパーティション:" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# フォーマットパーティション +# 格式化分区 format_partition() { - send_stats "フォーマットパーティション" - read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "パーティションがマウントされました。最初にアンインストールしてください!" + echo "分区已经挂载,请先卸载!" return fi - # ファイルシステムタイプを選択します - echo "ファイルシステムタイプを選択してください:" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "選択を入力してください:" FS_CHOICE + 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 ;; + *) echo "无效的选择!"; return ;; esac - # フォーマットを確認します - read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作はキャンセルされました。" + echo "操作已取消。" return fi - # フォーマットパーティション - echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティション形式は成功しました!" + echo "分区格式化成功!" else - echo "パーティションのフォーマットが失敗しました!" + echo "分区格式化失败!" fi } -# パーティションステータスを確認します +# 检查分区状态 check_partition() { - send_stats "パーティションステータスを確認します" - read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションステータスを確認します - echo "パーティション /dev /$PARTITION状態:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# メインメニュー +# 主菜单 disk_manager() { - send_stats "ハードディスク管理機能" + send_stats "硬盘管理功能" while true; do clear - echo "ハードディスクパーティション管理" - echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" - echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } -# タスクリストを表示します +# 显示任务列表 list_tasks() { - echo "保存された同期タスク:" + 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)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/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 + 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 + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + 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" @@ -6211,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "無効なキーコンテンツ!" + echo "无效的密钥内容!" return fi ;; *) - echo "無効な選択!" + echo "无效的选择!" return ;; esac - echo "同期モードを選択してください:" - echo "1。標準モード(-AVZ)" - echo "2。ターゲットファイル(-avz - delete)を削除します" - read -e -p "(1/2)を選択してください:" mode + 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" ;; + *) 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 "タスクが節約されました!" + echo "任务已保存!" } -# タスクを削除します +# 删除任务 delete_task() { - send_stats "同期タスクを削除します" - read -e -p "削除するには、タスク番号を入力してください。" num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:対応するタスクは見つかりませんでした。" + 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 "削除されたタスク!" + echo "任务已删除!" } run_task() { - send_stats "同期タスクを実行します" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # パラメーターを分析します + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6278,51 @@ run_task() { num="$1" fi - # 着信タスク番号がない場合は、ユーザーに入力するように促します + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "実行するタスク番号を入力してください:" num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:タスクは見つかりませんでした!" + 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" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # SSH接続の共通パラメーターを追加します + # 添加 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 "错误:未安装 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" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6330,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同期は完了です!" + echo "同步完成!" else - echo "同期は失敗しました!以下を確認してください。" - echo "1。ネットワーク接続は正常ですか?" - echo "2。リモートホストにアクセスできますか?" - echo "3。認証情報は正しいですか?" - echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# 時限タスクを作成します +# 创建定时任务 schedule_task() { - send_stats "同期タイミングタスクを追加します" + send_stats "添加同步定时任务" - read -e -p "定期的に同期するには、タスク番号を入力してください。" num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "错误: 请输入有效的任务编号!" return fi - echo "時限実行間隔を選択してください:" - echo "1)1時間に1回実行します" - echo "2)1日1回実行します" - echo "3)週に1回実行します" - read -e -p "オプションを入力してください(1/2/3):" interval + 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="" @@ -6363,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "エラー:有効なオプションを入力してください!" ; return ;; + *) 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 "エラー:このタスクのタイミング同期はすでに存在しています!" + echo "错误: 该任务的定时同步已存在!" return fi - # ユーザーにクロンタブを作成します + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "タイミングタスクが作成されました。$cron_job" + echo "定时任务已创建: $cron_job" } -# スケジュールされたタスクを表示します +# 查看定时任务 view_tasks() { - echo "現在のタイミングタスク:" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# タイミングタスクを削除します +# 删除定时任务 delete_task_schedule() { - send_stats "同期タイミングタスクを削除します" - read -e -p "削除するには、タスク番号を入力してください。" num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "削除されたタスク番号$numタイミングタスク" + echo "已删除任务编号 $num 的定时任务" } -# タスク管理メインメニュー +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "RSYNCリモート同期ツール" - echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1.新しいタスクを作成します2。タスクを削除します" - echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6。タイミングタスクを削除します" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } @@ -6448,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "システム情報クエリ" + send_stats "系统信息查询" ip_address @@ -6498,41 +6498,41 @@ linux_ps() { echo "" - echo -e "システム情報クエリ" + 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}Linuxバージョン:${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}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}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}オペレーター:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6アドレス:${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6545,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats「基本ツール」 - echo -e "基本的なツール" + # 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}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" - echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" - echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" - echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" + echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${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}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}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}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" curl --help - send_stats "カールをインストールします" + send_stats "安装curl" ;; 2) clear install wget clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" wget --help - send_stats "WGETをインストールします" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" sudo --help - send_stats "sudoをインストールします" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" socat -h - send_stats "SOCATをインストールします" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "HTOPをインストールします" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "IFTOPをインストールします" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" unzip - send_stats "unzipをインストールします" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" tar --help - send_stats "タールをインストールします" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" tmux --help - send_stats "tmuxをインストールします" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "FFMPEGをインストールします" + send_stats "安装ffmpeg" ;; 11) @@ -6657,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "BTOPをインストールします" + send_stats "安装btop" ;; 12) clear @@ -6666,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールします" + send_stats "安装ranger" ;; 13) clear @@ -6675,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDUをインストールします" + send_stats "安装ncdu" ;; 14) clear @@ -6684,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZFをインストールします" + send_stats "安装fzf" ;; 15) clear @@ -6693,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIMをインストールします" + send_stats "安装vim" ;; 16) clear @@ -6702,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールします" + send_stats "安装nano" ;; @@ -6713,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールします" + send_stats "安装git" ;; 21) @@ -6721,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrixをインストールします" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "SLをインストールします" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "バステットをインストールします" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "nsnakeをインストールします" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "Ninvadersをインストールします" + send_stats "安装ninvaders" ;; 31) clear - send_stats "すべてをインストールします" + 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 "すべてをインストールします(ゲームやスクリーンセーバーを除く)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "すべてをアンインストールします" + 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 + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "指定されたソフトウェアをインストールします" + send_stats "安装指定软件" ;; 42) clear - read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "指定されたソフトウェアをアンインストールします" + send_stats "卸载指定软件" ;; 0) @@ -6789,7 +6789,7 @@ linux_tools() { ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -6803,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "BBR管理" + 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 "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "AlpineはBBR3を有効にします" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6854,37 +6854,37 @@ linux_docker() { while true; do clear - # send_stats「Docker Management」 + # send_stats "docker管理" echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" - echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" + echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清潔な役に立たないドッカーコンテナとミラーネットワークデータボリューム" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" 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}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}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}Docker環境をアンインストールします" + echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "Docker環境をインストールします" + send_stats "安装docker环境" install_add_docker ;; @@ -6895,22 +6895,22 @@ linux_docker() { 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 "Dockerグローバルステータス" - echo "Dockerバージョン" + send_stats "docker全局状态" + echo "Docker版本" docker -v docker compose version echo "" - echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -6925,8 +6925,8 @@ linux_docker() { 5) while true; do clear - send_stats "Dockerネットワーク管理" - echo "Dockerネットワークリスト" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -6950,36 +6950,36 @@ linux_docker() { done echo "" - echo "ネットワーク操作" + echo "网络操作" echo "------------------------" - echo "1.ネットワークを作成します" - echo "2。インターネットに参加してください" - echo "3。ネットワークを終了します" - echo "4.ネットワークを削除します" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "ネットワークを作成します" - read -e -p "新しいネットワーク名を設定します:" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "インターネットに参加してください" - read -e -p "ネットワーク名に参加してください:" dockernetwork - read -e -p "これらのコンテナはネットワークに追加されます(複数のコンテナ名はスペースで区切られています):" dockernames + 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 + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -6988,8 +6988,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除します" - read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7003,29 +7003,29 @@ linux_docker() { 6) while true; do clear - send_stats "Dockerボリューム管理" - echo "Dockerボリュームリスト" + send_stats "Docker卷管理" + echo "Docker卷列表" docker volume ls echo "" - echo "ボリューム操作" + echo "卷操作" echo "------------------------" - echo "1.新しいボリュームを作成します" - echo "2。指定されたボリュームを削除します" - echo "3.すべてのボリュームを削除します" + echo "1. 创建新卷" + echo "2. 删除指定卷" + echo "3. 删除所有卷" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "新しいボリュームを作成します" - read -e -p "新しいボリューム名を設定します:" dockerjuan + send_stats "新建卷" + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7034,7 +7034,7 @@ linux_docker() { ;; 3) - send_stats "すべてのボリュームを削除します" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7043,7 +7043,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7056,7 +7056,7 @@ linux_docker() { ;; 7) clear - send_stats "Dockerクリーニング" + send_stats "Docker清理" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7065,13 +7065,13 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear - send_stats "Dockerソース" + send_stats "Docker源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7084,19 +7084,19 @@ linux_docker() { 11) clear - send_stats "Docker V6が開いています" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker V6レベル" + send_stats "Docker v6 关" docker_ipv6_off ;; 20) clear - send_stats "Dockerアンインストール" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7108,7 +7108,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7117,7 +7117,7 @@ linux_docker() { kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7134,151 +7134,151 @@ linux_test() { while true; do clear - # send_stats「テストスクリプトコレクション」 - echo -e "テストスクリプトコレクション" + # 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ストリーミングメディアのロック解除検出" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}ネットワーク速度測定" - echo -e "${gl_kjlan}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" - echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" - echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" - echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}网络线路测速" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}IICU/GB5 CPUパフォーマンステストスクリプト" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}包括的なテスト" - echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" - echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}综合性测试" + echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" + 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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "CHATGPTステータス検出のロックを解除します" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "リージョンストリーミングメディアのロック解除テスト" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "YeahWUストリーミングメディアのロック解除検出" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "XYKT_IP品質の身体検査スクリプト" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "MTR_TRACE 3ネットワークリターンラインテスト" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "SuperSpeed Three-Net速度測定" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace高速バックホールテストスクリプト" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "Nxtraceは、IPバックホールテストスクリプトを指定します" - echo "参照できるIPのリスト" + send_stats "nxtrace指定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 "広州通信:58.60.188.222" - echo "広州ユニコム:210.21.196.6" - echo "広州モバイル:120.196.165.24" - echo "成都通信:61.139.2.69" - echo "成都ユニコム:119.6.6.6" - echo "成都モバイル: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 "北京电信: 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "指定されたIPを入力してください:" testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "Ludashi2020 3ネットワークラインテスト" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "I-ABC多機能速度テストスクリプト" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "ネットワーク品質のテストスクリプト" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "YABSパフォーマンステスト" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "ベンチパフォーマンステスト" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX Fusion Monster Review" + 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 ;; @@ -7288,7 +7288,7 @@ linux_test() { ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7304,51 +7304,51 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud Scriptコレクション" - echo -e "Oracle Cloud Scriptコレクション" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}アイドルマシンアクティブスクリプトをインストールします" - echo -e "${gl_kjlan}2. ${gl_bai}アイドルマシンアクティブスクリプトをアンインストールします" + 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}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "アクティブスクリプト:CPUが10-20%を占めるメモリは20%を占めています" - read -e -p "必ずインストールしますか? (y/n):" choice + 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 + # 提示用户输入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 + 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 + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # Dockerコンテナを実行します + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7356,14 +7356,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloudインストールアクティブスクリプト" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7371,20 +7371,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "システムを再インストールします" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - read -e -p "必ず続行しますか? (y/n):" choice + 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 + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7396,28 +7396,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "選択の無効な、再入力してください。" + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "再インストールされたパスワードを入力してください:" vpspasswd + 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再インストールシステムスクリプト" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "この機能は開発段階にあるので、お楽しみに!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7427,15 +7427,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7456,7 +7456,7 @@ docker_tato() { 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}" + 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 } @@ -7477,7 +7477,7 @@ 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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7505,31 +7505,31 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp webサイトビルディング" - echo -e "${gl_huang}LDNMP Webサイトビルディング" + # 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}WordPressをインストールします${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" - echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" - echo -e "${gl_huang}9. ${gl_bai}LinkStack共有リンクプラットフォームをインストールします${gl_huang}20. ${gl_bai}動的サイトをカスタマイズします" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" - echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" - echo -e "${gl_huang}27. ${gl_bai}AIペイントプロンプトワードジェネレーターをインストールします${gl_huang}28. ${gl_bai}サイトの逆プロキシロードバランス" - echo -e "${gl_huang}30. ${gl_bai}静的サイトをカスタマイズします" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7543,10 +7543,10 @@ linux_ldnmp() { 3) clear - # ディスクフォーラム + # Discuz论坛 webname="Discuz论坛" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7569,21 +7569,21 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; 4) clear - # Kedao Cloudデスクトップ + # 可道云桌面 webname="可道云桌面" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7605,20 +7605,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" - echo "Redisホスト:Redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # Apple CMS + # 苹果CMS webname="苹果CMS" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7644,24 +7644,24 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベースプレフィックス:mac_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "インストールが成功した後、バックグラウンドアドレスにログインします" + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 一本足のカウントカード + # 独脚数卡 webname="独脚数卡" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7682,34 +7682,34 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" - echo "Redisアドレス:Redis" - echo "Redisパスワード:デフォルトで記入されていません" - echo "Redisポート:6379" + echo "redis地址: redis" + echo "redis密码: 默认不填写" + echo "redis端口: 6379" echo "" - echo "ウェブサイトURL:https://$yuming" - echo "バックエンドログインパス: /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "ユーザー名:admin" - echo "パスワード:管理者" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" - echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # フララムフォーラム + # flarum论坛 webname="flarum论坛" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7746,12 +7746,12 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:flarum_" - echo "管理者情報は自分で設定されます" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -7759,8 +7759,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7784,11 +7784,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースプレフィックス:typecho_" - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -7797,8 +7797,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7823,18 +7823,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7851,10 +7851,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -7864,20 +7864,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.phpが配置されているパス" + 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 "(/home/web/html/に似たindex.phpのパスを入力してください$yuming/wordpress/): " index_lujing + 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 -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1。PHPの最新バージョン| 2。Php7.4:" pho_v + 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 @@ -7888,15 +7888,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "選択の無効な、再入力してください。" + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "インストールされた拡張機能" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -7906,25 +7906,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -7934,10 +7934,10 @@ linux_ldnmp() { 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 "データベースインポートテーブルデータ" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "データベースのインポートが完了しました" + echo "数据库导入完成" ;; *) echo @@ -7949,12 +7949,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:$prefix" - echo "管理者ログイン情報は自分で設定されます" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -7967,10 +7967,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "ジャンプドメイン名を入力してください:" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -7992,7 +7992,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8003,11 +8003,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" - read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8027,8 +8027,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8050,8 +8050,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8068,8 +8068,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8102,8 +8102,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8120,10 +8120,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8133,12 +8133,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.htmlが配置されているパス" + 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 "(/home/web/html/に似たindex.htmlへのパスを入力してください$yuming/index/): " index_lujing + 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 @@ -8163,21 +8163,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP環境バックアップ" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "バックアップファイルが作成されました: /home /$backup_filename" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8185,9 +8185,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" + echo "文件已传送至远程服务器home目录。" else - echo "転送されるファイルは見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; @@ -8195,7 +8195,7 @@ linux_ldnmp() { break ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8203,9 +8203,9 @@ linux_ldnmp() { 33) clear - send_stats "タイミングのリモートバックアップ" - read -e -p "リモートサーバーIPを入力してください:" useip - read -e -p "リモートサーバーのパスワードを入力してください:" usepasswd + 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 @@ -8215,18 +8215,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1。毎週のバックアップ2。毎日のバックアップ" - read -e -p "選択を入力してください:" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "毎週のバックアップ(0-6、0は日曜日を表す)の曜日を選択します。" weekday + 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 + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8240,19 +8240,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP環境修復" - echo "利用可能なサイトバックアップ" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + 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 @@ -8262,7 +8262,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8271,7 +8271,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "圧縮パッケージは見つかりませんでした。" + echo "没有找到压缩包。" fi ;; @@ -8289,11 +8289,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP環境を更新します" - echo "LDNMP環境を更新します" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "コンポーネントの新しいバージョンを発見します" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8313,13 +8313,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1.更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" + echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5。完全な環境を更新します" + echo "5. 更新完整环境" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8328,7 +8328,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8339,13 +8339,13 @@ linux_ldnmp() { 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}仕上げる" + 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 + 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 @@ -8378,8 +8378,8 @@ linux_ldnmp() { 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}仕上げる" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 4) @@ -8390,15 +8390,15 @@ linux_ldnmp() { 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}仕上げる" + 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環境を完全に更新します" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8424,7 +8424,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP環境をアンインストールします" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8438,7 +8438,7 @@ linux_ldnmp() { ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8448,7 +8448,7 @@ linux_ldnmp() { ;; *) - echo "無効な入力!" + echo "无效的输入!" esac break_end @@ -8468,12 +8468,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "アプリケーション市場" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # ループで色を設定します + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8482,62 +8482,62 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" - echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" - echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" - echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" - echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" - echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" - echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" - echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" - echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" - echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" - echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" - echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHub加速ステーション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" - echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" - echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" - echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" - echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" - echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" - echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" - echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" - echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" - echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" - echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice fi case $sub_choice in @@ -8720,7 +8720,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを作る" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -8729,20 +8729,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezhaの監視$check_docker $update_status" - echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" - echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1。使用します" + echo "1. 使用" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -8799,7 +8799,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建設します" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -8809,43 +8809,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "郵便局サービス$check_docker $update_status" - echo "Poste.ioはオープンソースメールサーバーソリューションです。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "アクセスアドレス:" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "これらのDNSレコードを最初に解析します" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -8855,7 +8855,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "任意のキーを押して続行します..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -8874,9 +8874,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.ioがインストールされています" + echo "poste.io已经安装完成" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -8899,9 +8899,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.ioがインストールされています" + echo "poste.io已经安装完成" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -8912,7 +8912,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; *) @@ -8946,7 +8946,7 @@ while true; do clear ip_address - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -8956,7 +8956,7 @@ while true; do 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がインストールされています" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -8966,7 +8966,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9050,7 +9050,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -9064,7 +9064,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9209,7 +9209,7 @@ while true; do ;; 19|safeline) - send_stats "サンダープールを構築します" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9217,20 +9217,20 @@ while true; do while true; do check_docker_app clear - echo -e "サンダープールサービス$check_docker" - echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9240,7 +9240,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "サンダープールWAFパネルがインストールされています" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9253,7 +9253,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "サンダープールWAFパネルが更新されました" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9264,7 +9264,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9672,7 +9672,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="公式ウェブサイトの紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -9725,7 +9725,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoyaファミリーバケット" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -9927,9 +9927,9 @@ while true; do prometheus_install clear ip_address - echo "インストール" + echo "已经安装完成" check_docker_app_ip - echo "最初のユーザー名とパスワードは次のとおりです" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -9947,7 +9947,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10034,7 +10034,7 @@ while true; do 51|pve) clear - send_stats "PVEチキン" + send_stats "PVE开小鸡" 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 ;; @@ -10154,7 +10154,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10169,7 +10169,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10197,7 +10197,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10212,7 +10212,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10220,7 +10220,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10241,17 +10241,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip - echo "初期ユーザー名:admin" - echo "最初のパスワード:changeme" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "アプリが更新されました" + echo "应用已更新" } @@ -10261,7 +10261,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10308,7 +10308,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10324,7 +10324,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10586,7 +10586,7 @@ while true; do docker_rum() { - read -e -p "libretvログインパスワードを設定します。" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10616,7 +10616,7 @@ while true; do docker_rum() { - read -e -p "MOONTVログインパスワードを設定します。" app_passwd + read -e -p "设置MoonTV的登录密码: " app_passwd docker run -d \ --name moontv \ @@ -10702,8 +10702,8 @@ while true; do docker_rum() { - read -e -p "設定${docker_name}ログインユーザー名:" app_use - read -e -p "設定${docker_name}ログインパスワード:" app_passwd + read -e -p "设置${docker_name}的登录用户名: " app_use + read -e -p "设置${docker_name}的登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -10800,11 +10800,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 公式のDocker-ComposeおよびEnvファイルをダウンロードします + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # ランダムキーとパスワードを生成します + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10813,17 +10813,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 管理者アカウント情報を追加します + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # コンテナを起動します + # 启动容器 docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10833,7 +10833,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 元の変数を保持します + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10850,7 +10850,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10900,7 +10900,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11020,7 +11020,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -11033,7 +11033,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11153,35 +11153,35 @@ linux_work() { while true; do clear - send_stats "バックエンドワークスペース" - echo -e "バックエンドワークスペース" - echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" - echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "現在既存のワークスペースのリスト" + 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}ワークスペースNo. 2" - echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" - echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" - echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" - echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" - echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" - echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" - echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" - echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 10" + 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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11189,7 +11189,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11197,63 +11197,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11265,21 +11265,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常駐モード" - echo -e "SSH常駐モード${tmux_sshd_status}" - echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1。2をオンにします。オフにします" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" gongzuoqu_del + 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 + 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 ;; @@ -11295,29 +11295,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "カスタムワークスペース" + send_stats "自定义工作区" ;; 23) - read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "バックグラウンドワークスペースにコマンドを注入します" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "ワークスペースを削除します" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -11342,54 +11342,54 @@ linux_Settings() { while true; do clear - # send_stats「システムツール」 - echo -e "システムツール" + # 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}指定されたバージョンのPythonをインストールします" - 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}ルートアカウントを無効にして新しいアカウントを作成します${gl_kjlan}10. ${gl_bai}優先順位IPv4/IPv6を切り替えます" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHハイリスクの脆弱性を修正します" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}ウイルススキャンツール${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}ファイルマネージャー" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "ショートカットキーを入力してください(0を入力して終了してください):" kuaijiejian + 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 "スクリプトのショートカットキーが設定されています" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11397,34 +11397,34 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定します" - echo "ログインパスワードを設定します" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "ルートパスワードモード" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "Pyバージョン管理" - echo "Pythonバージョン管理" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 3.12 3.11 3.10 3.9 3.8 2.7" + echo "查询更多版本: https://www.python.org/downloads/" echo "------------" - read -e -p "インストールするPythonバージョン番号を入力します(Enter 0からExit):" py_new_v + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "スクリプトPy管理" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -11457,7 +11457,7 @@ linux_Settings() { 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 "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi @@ -11486,55 +11486,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "スイッチスクリプトPyバージョン" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "オープンポート" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "すべてのポートが開いています" + echo "端口已全部开放" ;; 6) root_use - send_stats "SSHポートを変更します" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 現在のSSHポート番号をお読みください + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # ユーザーに新しいSSHポート番号を入力するように促します - read -e -p "新しいSSHポート番号を入力してください:" new_port + # 提示用户输入新的 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ポートが変更されました" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSHポート変更を終了します" + send_stats "退出SSH端口修改" break else - echo "ポート番号は無効です。1〜65535の数字を入力してください。" - send_stats "無効なSSHポート入力" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "入力が無効です。番号を入力してください。" - send_stats "無効なSSHポート入力" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -11553,8 +11553,8 @@ EOF ;; 9) root_use - send_stats "新しいユーザーはルートを無効にします" - read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11569,49 +11569,49 @@ EOF passwd -l root - echo "操作が完了しました。" + echo "操作已完成。" ;; 10) root_use - send_stats "V4/V6の優先度を設定します" + send_stats "设置v4/v6优先级" while true; do clear - echo "V4/V6の優先度を設定します" + 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}優先度" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "優先ネットワークを選択します。" choice + 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の優先度に切り替えました" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "IPv6の優先度に切り替えました" - send_stats "IPv6の優先度に切り替えました" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -11629,43 +11629,43 @@ EOF 12) root_use - send_stats "仮想メモリを設定します" + send_stats "设置虚拟内存" while true; do clear - echo "仮想メモリを設定します" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G仮想メモリが設定されています" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G仮想メモリが設定されています" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G仮想メモリが設定されています" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "カスタム仮想メモリが設定されています" + send_stats "已设置自定义虚拟内存" ;; *) @@ -11678,8 +11678,8 @@ EOF 13) while true; do root_use - send_stats "ユーザー管理" - echo "ユーザーリスト" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11690,62 +11690,62 @@ EOF echo "" - echo "アカウント操作" + echo "账户操作" echo "------------------------" - echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3.最高の権限を与える4。最高の権限をキャンセルします" + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5.アカウントを削除します" + echo "5. 删除账号" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 新しいユーザーを作成し、パスワードを設定します + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作が完了しました。" + echo "操作已完成。" ;; 2) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 新しいユーザーを作成し、パスワードを設定します + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 新規ユーザーのsudo許可を付与します + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作が完了しました。" + echo "操作已完成。" ;; 3) - read -e -p "ユーザー名を入力してください:" username - # 新規ユーザーのsudo許可を付与します + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudo許可を削除します + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "削除するにはユーザー名を入力してください:" username - # ユーザーとそのホームディレクトリを削除します + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -11758,50 +11758,50 @@ EOF 14) clear - send_stats "ユーザー情報ジェネレーター" - echo "ランダムユーザー名" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "ランダムユーザー名$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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つのランダムユーザー名を生成します + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "ランダムuuid" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "ランダムuuid$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16ビットランダムパスワード" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32ビットランダムパスワード" + 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" + echo "随机密码 $i: $password" done echo "" @@ -11809,46 +11809,46 @@ EOF 15) root_use - send_stats "タイムゾーンを変更します" + send_stats "换时区" while true; do clear - echo "システム時間情報" + echo "系统时间信息" - # 現在のシステムタイムゾーンを取得します + # 获取当前系统时区 local timezone=$(current_timezone) - # 現在のシステム時間を取得します + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # タイムゾーンと時間を表示します - echo "現在のシステムタイムゾーン:$timezone" - echo "現在のシステム時間:$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "タイムゾーンの切り替え" + echo "时区切换" echo "------------------------" - echo "アジア" - echo "1。中国の上海時間2。中国の香港時間" - echo "3。日本の東京時間4。韓国のソウル時間" - echo "5。シンガポール時間6。インドのコルカタ時間" - echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" - echo "9。タイのバンコクでの時間" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "アメリカ" - echo "21。WesternTime22。東部時間" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" echo "23. 加拿大时间 24. 墨西哥时间" - echo "25。ブラジル時間26。アルゼンチン時間" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31。UTCグローバル標準時間" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11891,21 +11891,21 @@ EOF 18) root_use - send_stats "ホスト名を変更します" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "新しいホスト名を入力してください(出口に0を入力してください):" new_hostname + 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などの他のシステム。 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11923,11 +11923,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "ホスト名は次のように変更されています。$new_hostname" - send_stats "ホスト名が変更されました" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "終了すると、ホスト名は変更されていません。" + echo "已退出,未更改主机名。" break fi done @@ -11935,32 +11935,32 @@ EOF 19) root_use - send_stats "システムの更新ソースを変更します" + send_stats "换系统更新源" clear - echo "更新ソース領域を選択します" - echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "中国本土のデフォルトソース" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国本土の教育源" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外起源" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "キャンセル" + echo "已取消" ;; esac @@ -11968,62 +11968,62 @@ EOF ;; 20) - send_stats "タイミングタスク管理" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "タイミングされたタスクリスト" + echo "定时任务列表" crontab -l echo "" - echo "動作します" + echo "操作" echo "------------------------" - echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1。毎月のタスク2。毎週のタスク" - echo "3。毎日のタスク4。時間ごとのタスク" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "選択を入力してください:" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "毎月何日を選択してタスクを実行しますか? (1-30):" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "タイムされたタスクを追加します" + send_stats "添加定时任务" ;; 2) - read -e -p "削除する必要があるキーワードを入力してください。" kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "タイミングタスクを削除します" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "タイミングタスクを編集します" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -12035,32 +12035,32 @@ EOF 21) root_use - send_stats "ローカルホストの解析" + send_stats "本地host解析" while true; do clear - echo "ネイティブホストのペルシングリスト" - echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "動作します" + echo "操作" echo "------------------------" - echo "1.新しい解析2を追加します。解析アドレスを削除します" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "ローカルホストの解析が追加されました" + send_stats "本地host解析新增" ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "ローカルホストの解析と削除" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -12071,7 +12071,7 @@ EOF 22) root_use - send_stats "SSH防御" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12083,20 +12083,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防衛プログラム$check_docker" - echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" - echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 安装防御程序" echo "------------------------" - echo "2。SSH傍受記録を表示します" - echo "3。リアルタイムログ監視" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 卸载防御程序" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -12119,7 +12119,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -12132,47 +12132,47 @@ EOF 23) root_use - send_stats "電流制限シャットダウン機能" + send_stats "限流关机功能" while true; do clear - echo "電流制限シャットダウン機能" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # limiting_shut_down.shファイルが存在するかどうかを確認してください + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gbの値を取得します + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 新しい仮想メモリサイズを入力します - echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源を停止して、トラフィックエラーやオーバーフローを避けることができます。" - read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -12185,15 +12185,15 @@ EOF (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 "現在の制限シャットダウンが設定されています" + 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 "電流制限シャットダウン機能はオフになっています" + echo "已关闭限流关机功能" ;; *) break @@ -12206,40 +12206,40 @@ EOF 24) root_use - send_stats "秘密キーログイン" + send_stats "私钥登录" while true; do clear - echo "ルート秘密キーログインモード" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "キーペアが生成され、SSHログインのより安全な方法" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "新しいキーを生成します" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "既存の公開キーをインポートします" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "地元の秘密の鍵を表示します" + send_stats "查看本机密钥" echo "------------------------" - echo "公開鍵情報" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "秘密のキー情報" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12255,18 +12255,18 @@ EOF 25) root_use - send_stats "電報警告" - echo "TG-BOTモニタリングと早期警告機能" - echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" - echo "しきい値に達した後、ユーザーはユーザーに送信されます" - echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" - read -e -p "必ず続行しますか? (y/n):" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "電報警告が有効になっています" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -12288,7 +12288,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 〜/.Profileファイルに追加します + # 添加到 ~/.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 @@ -12299,21 +12299,21 @@ EOF source ~/.profile clear - echo "TG-BOT早期警告システムが開始されました" - echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "SSHの高リスクの脆弱性を修正します" + 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 @@ -12357,7 +12357,7 @@ EOF ;; 37) clear - send_stats "コマンドラインの履歴" + 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; } @@ -12380,61 +12380,61 @@ EOF 41) clear - send_stats "メッセージボード" - echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "ワンストップチューニング" - echo "ワンストップシステムの最適化" + 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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10。システムジャンクファイルをクリーンアップします" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12451,25 +12451,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10。 DNSアドレスを自動的に最適化します${gl_huang}${gl_bai}" + 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 -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。 Linuxシステムのカーネルパラメーターの最適化" - echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -12477,7 +12477,7 @@ EOF 99) clear - send_stats "システムを再起動します" + send_stats "重启系统" server_reboot ;; 100) @@ -12493,32 +12493,32 @@ EOF local status_message="无法确定的状态" fi - echo "プライバシーとセキュリティ" - echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。" + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "現在のステータス:$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1。コレクションをオンにします" - echo "2。コレクションを閉じます" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + 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 "プライバシーとセキュリティコレクションが有効になっています" + 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 "プライバシーとセキュリティは収集のために閉鎖されています" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -12534,11 +12534,11 @@ EOF 102) clear - send_stats "テックライオンスクリプトをアンインストールします" - echo "テックライオンスクリプトをアンインストールします" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" - read -e -p "必ず続行しますか? (y/n):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -12546,16 +12546,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "スクリプトはアンインストールされています、さようなら!" + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -12565,7 +12565,7 @@ EOF ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -12583,187 +12583,187 @@ EOF linux_file() { root_use - send_stats "ファイルマネージャー" + send_stats "文件管理器" while true; do clear - echo "ファイルマネージャー" + echo "文件管理器" echo "------------------------" - echo "現在のパス" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" - echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" - echo "15.ファイルを削除します" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" - echo "25。ファイルを別のサーバーに渡します" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "ディレクトリ名を入力してください:" dirname - cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" - send_stats "ディレクトリに移動します" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "作成するにはディレクトリ名を入力してください。" dirname - mkdir -p "$dirname" && echo "作成されたディレクトリ" || echo "作成に失敗しました" - send_stats "ディレクトリを作成します" + 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 "ディレクトリ権限を変更します" + 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 "ディレクトリの名前を変更します" + 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 "ディレクトリを削除します" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "前のメニューディレクトリに戻ります" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "作成するにはファイル名を入力してください。" filename - touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" - send_stats "ファイルを作成します" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "編集するにはファイル名を入力してください:" filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "ファイルを編集します" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "ファイル名を入力してください:" filename - read -e -p "許可(755など)を入力してください。" perm - chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました" - send_stats "ファイル権限を変更します" + 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 "ファイルの名前を変更します" + 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 "ファイルを削除します" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" - send_stats "圧縮ファイル/ディレクトリ" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "ファイル名(.tar.gz)を入力してください:" filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" - send_stats "ファイル/ディレクトリを解凍します" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリが存在しません" + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" - send_stats "ファイルまたはディレクトリを移動します" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # -Rオプションを使用して、ディレクトリを再帰的にコピーします - cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" - send_stats "ファイルまたはディレクトリをコピーします" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "転送されるファイルパスを入力してください。" file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "エラー:ファイルは存在しません。" - send_stats "ファイルの転送に失敗しました:ファイルは存在しません" + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" - send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "エラー:リモートサーバーのパスワードを入力してください。" - send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "ログインポートを入力してください(デフォルト22):" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "スクリプトは最新です$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13061,15 +13061,15 @@ while true; do (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 "自動スクリプトの更新をオンにします" + 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 "スクリプト自動更新を閉じます" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -13091,41 +13091,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "テクノロジーライオンスクリプトツールボックスv$sh_v" -echo -e "コマンドライン入力${gl_huang}k${gl_kjlan}スクリプトをすばやく開始します${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}ワープ管理" -echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" -echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" -echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" -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}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu Serverオープニングスクリプト" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "選択を入力してください:" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "システムの更新" ; linux_update ;; - 3) clear ; send_stats "システムのクリーンアップ" ; linux_clean ;; + 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 + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -13136,13 +13136,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "無効な入力!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -13150,68 +13150,68 @@ done k_info() { -send_stats "Kコマンド参照ユースケース" +send_stats "k命令参考用例" echo "-------------------" -echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "以下は、Kコマンドリファレンスユースケースです。" -echo "スクリプトkを開始します" -echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" -echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" -echo "システムKアップデートを更新| Kアップデート" -echo "クリーンシステムガベージkクリーン| kきれい" -echo "システムパネルk dd |を再インストールしますk再インストール" -echo "BBR3コントロールパネルK BBR3 | K BBRV3" -echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" -echo "仮想メモリkスワップ2048を設定します" -echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" -echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" -echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" -echo "SSHリモート接続ツールK SSH | Kリモート接続" -echo "rsyncリモート同期ツールk rsync | Kリモート同期" -echo "ハードディスク管理ツールKディスク| Kハードディスク管理" -echo "イントラネット浸透(サーバー側)K FRP" -echo "イントラネット浸透(クライアント)K FRPC" -echo "ソフトウェアStart K Start SSHD | k sshdを開始します" -echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" -echo "ソフトウェア再起動k再起動sshd | k再起動sshd" -echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" -echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" -echo "ドメイン名証明書アプリケーションK SSL" -echo "ドメイン名証明書の有効期限クエリK SSL PS" -echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" -echo "Docker Container Management K Docker PS | K Dockerコンテナ" -echo "Docker Image Management K Docker IMG | K Docker画像" -echo "LDNMPサイト管理K Web" -echo "LDNMPキャッシュクリーンアップK Webキャッシュ" -echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" -echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" -echo "ロードバランシングkロードバランス| kロードバランシングをインストールします" -echo "ファイアウォールパネルk fhq | kファイアウォール" -echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" -echo "コマンドお気に入りk fav | Kコマンドのお気に入り" -echo "アプリ市場管理Kアプリ" -echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # パラメーターがない場合は、インタラクティブロジックを実行します + # 如果没有参数,运行交互式逻辑 kejilion_sh else - # パラメーターがある場合は、対応する関数を実行します + # 如果有参数,执行相应函数 case $1 in install|add|安装) shift - send_stats "ソフトウェアをインストールします" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "ソフトウェアをアンインストールします" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -13245,7 +13245,7 @@ else rsync_run) shift - send_stats "タイミング付きRSYNC同期" + send_stats "定时rsync同步" run_task "$@" ;; @@ -13264,7 +13264,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13277,13 +13277,13 @@ else swap) shift - send_stats "仮想メモリをすばやく設定します" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンをすばやく設定します" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -13331,42 +13331,42 @@ else status|状态) shift - send_stats "ソフトウェアステータスビュー" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "ソフトウェアスタートアップ" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "ソフトウェアの一時停止" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "ソフトウェアの再起動" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "ソフトウェアが起動します" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "証明書のステータスを確認してください" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "すぐに証明書を申請してください" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "すぐに証明書を申請してください" + send_stats "快速申请证书" else k_info fi @@ -13376,15 +13376,15 @@ else shift case $1 in install|安装) - send_stats "Dockerをすばやくインストールします" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "クイックコンテナ管理" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "クイックミラー管理" + send_stats "快捷镜像管理" docker_image ;; *) @@ -13411,7 +13411,7 @@ else app) shift - send_stats "$@を適用します" + send_stats "应用$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 3be3371ea..1bebba7ec 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 명령을 실행하는 함수를 정의합니다 +# 명령을 실행할 함수를 정의합니다 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -334,8 +334,8 @@ enable() { break_end() { - echo -e "${gl_lv}操作完成${gl_bai}" - echo "계속하려면 키를 누르십시오 ..." + echo -e "${gl_lv}작업이 완료되었습니다${gl_bai}" + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -425,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker 환경 설치 ...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -500,55 +500,55 @@ install_docker() { docker_ps() { while true; do clear - send_stats "도커 컨테이너 관리" - echo "도커 컨테이너 목록" + send_stats "Docker容器管理" + echo "Docker容器列表" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "컨테이너 작동" + echo "容器操作" echo "------------------------" - echo "1. 새 컨테이너를 만듭니다" + echo "1. 创建新的容器" echo "------------------------" - echo "2. 지정된 컨테이너를 시작하십시오. 6. 모든 컨테이너를 시작하십시오" - echo "3. 지정된 컨테이너를 중지하십시오. 7. 모든 컨테이너를 중지하십시오" - echo "4. 지정된 컨테이너를 삭제합니다. 8. 모든 컨테이너를 삭제하십시오" - echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" + echo "2. 启动指定容器 6. 启动所有容器" + echo "3. 停止指定容器 7. 停止所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" - echo "13. 컨테이너 네트워크보기 14. 컨테이너 점유보기" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "새 컨테이너를 만듭니다" - read -e -p "창조 명령을 입력하십시오 :" dockername + send_stats "新建容器" + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "지정된 컨테이너를 시작하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) send_stats "지정된 컨테이너를 중지하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "지정된 컨테이너를 삭제하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "지정된 컨테이너를 다시 시작하십시오" + send_stats "重启指定容器" read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker restart $dockername ;; 6) - send_stats "모든 컨테이너를 시작하십시오" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) @@ -556,7 +556,7 @@ while true; do docker stop $(docker ps -q) ;; 8) - send_stats "모든 컨테이너를 삭제하십시오" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "모든 컨테이너를 다시 시작하십시오" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "컨테이너를 입력하십시오" - read -e -p "컨테이너 이름을 입력하십시오 :" dockername + send_stats "进入容器" + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "컨테이너 로그를 봅니다" - read -e -p "컨테이너 이름을 입력하십시오 :" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "컨테이너 네트워크를 봅니다" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "컨테이너 점유를 봅니다" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "컨테이너 포트 액세스를 허용합니다" - read -e -p "컨테이너 이름을 입력하십시오 :" docker_name + send_stats "允许容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +620,8 @@ while true; do ;; 16) - send_stats "컨테이너 포트 액세스 차단" - read -e -p "컨테이너 이름을 입력하십시오 :" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "도커 이미지 관리" - echo "도커 이미지 목록" + send_stats "Docker镜像管理" + echo "Docker镜像列表" docker image ls echo "" - echo "거울 작동" + echo "镜像操作" echo "------------------------" - echo "1. 지정된 이미지 가져 오기 3. 지정된 이미지 삭제" - echo "2. 지정된 이미지 업데이트 4. 모든 이미지 삭제" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "거울을 당기십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}이미지 얻기 :$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "이미지를 업데이트하십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}업데이트 된 이미지 :$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "거울을 삭제하십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "모든 이미지를 삭제합니다" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "지원되지 않는 분포 :$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "운영 체제를 결정할 수 없습니다." + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}Crontab이 설치되고 Cron 서비스가 실행 중입니다.${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +775,27 @@ docker_ipv6_on() { 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를 사용하여 구성 파일 업데이트를 처리하십시오 + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 현재 구성에 이미 IPv6 설정이 있는지 확인하십시오 + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 구성 업데이트 및 IPv6을 활성화하십시오 + # 更新配置,开启 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}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 구성 파일이 있는지 확인하십시오 + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}구성 파일이 존재하지 않습니다${gl_bai}" + echo -e "${gl_hong}配置文件不存在${gl_bai}" return fi - # 현재 구성을 읽으십시오 + # 读取当前配置 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 현재 IPv6 상태를 확인하십시오 + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 원래 구성과 새로운 구성을 비교합니다 + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6 액세스는 현재 닫힙니다${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6 액세스가 성공적으로 닫혔습니다${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "하나 이상의 포트 번호를 제공하십시오" + 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" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "포트가 열렸습니다" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "하나 이상의 포트 번호를 제공하십시오" + 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" + echo "已关闭端口 $port" fi done - # 기존 규칙 삭제 (있는 경우) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 새로운 규칙을 먼저 삽입하십시오 + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "포트 폐쇄" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "하나 이상의 IP 주소 또는 IP 세그먼트를 제공하십시오." + 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" + echo "已放行IP $ip" fi done save_iptables_rules - send_stats "IP 출시" + send_stats "已放行IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "하나 이상의 IP 주소 또는 IP 세그먼트를 제공하십시오." + 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" + echo "已阻止IP $ip" fi done save_iptables_rules - send_stats "IP 차단" + send_stats "已阻止IP" } @@ -990,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 방어 DDO를 켜십시오 + # 开启防御 DDoS 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 @@ -1000,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS 방어를 켜십시오" + send_stats "开启DDoS防御" } -# DDOS 방어를 끕니다 +# 关闭DDoS防御 disable_ddos_defense() { - # 방어 DDO를 끄십시오 + # 关闭防御 DDoS 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 @@ -1015,14 +1015,14 @@ disable_ddos_defense() { 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 방어를 끕니다" + send_stats "关闭DDoS防御" } -# 국가 IP 규칙을 관리하는 기능 +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # IPSET가 존재하지 않는 경우 작성하십시오 + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IP 영역 파일을 다운로드하십시오 + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # IPSET에 IP를 추가하십시오 + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # iptables와 함께 IP를 차단하십시오 + # 使用 iptables 阻止 IP 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_codeIP 주소" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 허용 국가에 대한 IPSET 만들기 (존재하지 않는 경우) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IP 영역 파일을 다운로드하십시오 + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + 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" - # IPSET에 IP를 추가하십시오 + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 지정된 국가의 IP 만 허용됩니다 + # 仅允许指定国家的 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_codeIP 주소" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 국가의 iptables 규칙을 삭제하십시오 + # 删除国家的 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을 파괴하십시오 + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "성공적으로 해제했습니다$country_codeIP 주소 제한" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "고급 방화벽 관리" - send_stats "고급 방화벽 관리" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "방화벽 관리" + echo "防火墙管理" echo "------------------------" - echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." - echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 지우십시오" + echo "5. IP白名单 6. IP黑名单" + echo "7. 清除指定IP" echo "------------------------" - echo "11. 핑 허용 12. 핑을 비활성화하십시오" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13. DDOS 방어 시작 14. DDOS 방어를 끄십시오" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15. 지정된 국가 IP 16. 지정된 국가 IP 만 허용됩니다." - echo "17. 지정된 국가에서 IP 제한을 해제합니다" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "열린 포트 번호를 입력하십시오 :" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "지정된 포트를 엽니 다" + send_stats "开放指定端口" ;; 2) - read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "지정된 포트를 닫습니다" + send_stats "关闭指定端口" ;; 3) - # 모든 포트를 엽니 다 + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1164,10 @@ iptables_panel() { 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 "모든 포트를 엽니 다" + send_stats "开放所有端口" ;; 4) - # 모든 포트를 닫습니다 + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1180,40 @@ iptables_panel() { 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 "모든 포트를 닫습니다" + send_stats "关闭所有端口" ;; 5) - # IP 화이트리스트 - read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IP 블랙리스트 - read -e -p "차단 된 IP 또는 IP 세그먼트를 입력하십시오." c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) - # 지정된 IP를 지우십시오 - read -e -p "청산 된 IP를 입력하십시오 :" d_ip + # 清除指定 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를 지우십시오" + send_stats "清除指定IP" ;; 11) - # 핑을 허용하십시오 + # 允许 PING 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 "핑을 허용하십시오" + send_stats "允许PING" ;; 12) - # 핑을 비활성화합니다 + # 禁用 PING 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 "핑을 비활성화합니다" + send_stats "禁用PING" ;; 13) enable_ddos_defense @@ -1223,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "차단 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "허용 국가$country_codeIP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "허용 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "나라를 차단하십시오$country_codeIP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오 :" country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "나라를 정리하십시오$country_codeIP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 현재 시스템에서 모든 스왑 파티션을 얻으십시오 + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 모든 스왑 파티션을 반복하고 삭제하십시오 + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # /swapfile이 더 이상 사용되지 않도록하십시오 + # 确保 /swapfile 不再被使用 swapoff /swapfile - # 이전 /스왑 파일을 삭제하십시오 + # 删除旧的 /swapfile rm -f /swapfile - # 새 스왑 파티션을 만듭니다 + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "가상 메모리 크기가 크기가 커졌습니다${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야하는지 확인하십시오 +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginx 버전을 얻으십시오 + # 获取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 버전을 얻으십시오 + # 获取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 버전을 얻으십시오 + # 获取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 버전을 얻으십시오 + # 获取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}" @@ -1341,7 +1341,7 @@ ldnmp_v() { 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 @@ -1350,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.yml 파일을 다운로드하여 교체하십시오 + # 下载 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 파일로 교체하십시오 + # 在 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 @@ -1399,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP 환경이 설치되었습니다" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1416,7 @@ install_certbot() { 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 "갱신 작업이 업데이트되었습니다" + echo "续签任务已更新" } @@ -1453,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming공개 키 정보${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming개인 키 정보${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}인증서 저장 경로${gl_bai}" - echo "공개 키 :/etc/letsencrypt/live/$yuming/fullchain.pem" - echo "개인 키 :/etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL 인증서를 신속하게 신청하고 만료 전에 서명을 자동으로 갱신하십시오.${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}응용 인증서 만료${gl_bai}" - echo "사이트 정보 인증서 만료 시간" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "도메인 이름 인증서에 대한 성공적인 응용 프로그램" + 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 배/도메인 이름/주)을 갖습니다." - echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "다시 배포를 시도하십시오$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1549,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "도메인 이름 재사용" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1623,8 +1623,8 @@ nginx_upgrade() { 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}마치다" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" } @@ -1643,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "로그인 정보 :" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "시작$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1657,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 구성 파일이 있는지 확인하십시오 + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 구성 파일에서 API_TOKE 및 ZONE_ID를 읽으십시오 + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # Zone_ids를 배열로 변환합니다 + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트합니다 - read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer + # 提示用户是否清理缓存 + 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 + 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를 루프하고 CLEAR CACHE 명령을 실행하십시오. + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "Zone_ID의 캐시 지우기 :$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1687,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "캐시 클리어 요청이 전송되었습니다." + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "사이트 캐시를 정리하십시오" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1703,28 @@ web_cache() { web_del() { - send_stats "사이트 데이터 삭제" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "사이트 데이터를 삭제하려면 도메인 이름을 입력하십시오 (여러 도메인 이름이 공간별로 분리됩니다)." yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "도메인 이름 삭제 :$yuming" + 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" + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 모드 매개 변수에 따라 WAF를 켜거나 끄기로 결정 + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # WAF 켜기 : 주석을 제거하십시오 + # 开启 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 닫기 : 댓글을 추가하십시오 + # 关闭 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'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 오래된 정의를 삭제하십시오 + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 오래된 정의를 삭제하십시오 + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotli를 켜십시오 : 주석을 제거하십시오 + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotli를 닫습니다 : 주석을 추가하십시오 + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTD를 켜십시오 : 주석을 제거하십시오 + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # Zstd를 닫습니다 : 주석을 추가하십시오 + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1945,11 @@ nginx_zstd() { else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1990,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP 환경 방어" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "서버 웹 사이트 방어 프로그램${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 安装防御程序" echo "------------------------" - echo "5. SSH 차단 레코드보기 6. 웹 사이트 차단 레코드보기" - echo "7. 방어 규칙 목록보기 8. 로그의 실시간 모니터링보기" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. 인터셉트 매개 변수 구성 12. 차단 된 모든 IP를 지우십시오" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. CloudFlare 모드 22. 5 초 방패의 높은 하중" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31. WAF 32를 켜십시오. WAF를 끄십시오" - echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2097,11 +2097,11 @@ web_security() { ;; 21) - send_stats "CloudFlare 모드" - echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." + send_stats "cloudflare模式" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "CF 계정 번호를 입력하십시오." cfuser - read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2116,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlare 모드는 CF 배경, Site-Security-Events에서 인터셉트 레코드를 보도록 구성됩니다." + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "CF 매개 변수 가져 오기 :" - echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" - echo -e "CF 배경 도메인 이름 요약 페이지의 오른쪽 하단으로 이동하려면${gl_huang}지역 ID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CF 계정 번호를 입력하십시오." cfuser - read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken - read -e -p "CF에 도메인 이름의 영역 ID를 입력하십시오." cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2147,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "고 부하 자동 방패 오프닝 스크립트가 추가되었습니다" + echo "高负载自动开盾脚本已添加" else - echo "자동 방패 스크립트가 이미 존재합니다. 추가 할 필요가 없습니다." + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "사이트 waf가 활성화되어 있습니다" - send_stats "사이트 waf가 활성화되어 있습니다" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "사이트 waf가 닫혔습니다" - send_stats "사이트 waf가 닫혔습니다" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2189,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 현재 Worker_Processes 설정 값을 얻으십시오 +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 값에 따라 모드 정보를 설정합니다 +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTD가 활성화되어 있고 주석이 없는지 확인하십시오 (전체 라인은 ZSTD 켜기로 시작합니다.) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotli가 활성화되어 있고 댓글이 없는지 확인하십시오 + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP 환경을 최적화하십시오" - echo -e "LDNMP 환경을 최적화하십시오${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 표준 모드 2. 고성능 모드 (2H4G 이상 권장)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3. GZIP 압축 켜기 4. GZIP 압축 끄기" - echo "5. BR 압축 켜기 6. BR 압축 끄기" - echo "7. ZSTD 압축 켜기 8. ZSTD 압축 끄기" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "사이트 표준 모드" + send_stats "站点标准模式" - # nginx 튜닝 + # 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 튜닝 + # 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 튜닝 + # 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 @@ -2276,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # MySQL 튜닝 + # 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 @@ -2288,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP 환경은 표준 모드로 설정되었습니다" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "사이트 고성능 모드" + send_stats "站点高性能模式" - # nginx 튜닝 + # 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 튜닝 + # 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 튜닝 + # 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 @@ -2316,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # MySQL 튜닝 + # 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 @@ -2326,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 환경은 고성능 모드로 설정되었습니다" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2386,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker = "$ {gl_lv} $ {gl_bai} 설치" +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2396,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "액세스 주소 :" +echo "访问地址:" ip_address @@ -2434,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 기본 레이블이 최신입니다 + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 공식 이미지에 대한 지원을 추가하십시오 + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub API에서 이미지 게시 시간을 얻으십시오 + # 从 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 @@ -2477,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 컨테이너의 IP 주소를 가져옵니다 + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2487,34 @@ block_container_port() { install iptables - # 다른 모든 IP를 점검하고 차단하십시오 + # 检查并封禁其他所有 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를 확인하고 해제하십시오 + # 检查并放行指定 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을 확인하고 해제하십시오 + # 检查并放行本地网络 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를 점검하고 차단하십시오 + # 检查并封禁其他所有 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를 확인하고 해제하십시오 + # 检查并放行指定 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을 확인하고 해제하십시오 + # 检查并放行本地网络 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 @@ -2524,7 +2524,7 @@ block_container_port() { fi - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2535,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 컨테이너의 IP 주소를 가져옵니다 + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2545,17 @@ clear_container_rules() { install iptables - # 다른 모든 IP를 차단하는 명확한 규칙 + # 清除封禁其他所有 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를 공개하기위한 규칙을 지우십시오 + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2564,17 +2564,17 @@ clear_container_rules() { - # 다른 모든 IP를 차단하는 명확한 규칙 + # 清除封禁其他所有 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를 공개하기위한 규칙을 지우십시오 + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2585,7 +2585,7 @@ clear_container_rules() { fi - echo "IP+포트는 서비스에 액세스 할 수있었습니다" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2599,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." - echo "사용법 : block_host_port <포트 번호> <승인 된 ip>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # 다른 모든 IP 액세스를 거부했습니다 + # 拒绝其他所有 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 액세스를 허용합니다 + # 允许指定 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 @@ -2626,27 +2626,27 @@ block_host_port() { - # 다른 모든 IP 액세스를 거부했습니다 + # 拒绝其他所有 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 액세스를 허용합니다 + # 允许指定 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+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2658,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." - echo "사용법 : CLEAR_HOST_PORT_RULES <포트 번호> <승인 IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # 다른 모든 IP 액세스를 차단하는 명확한 규칙 + # 清除封禁所有其他 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 액세스를 허용하는 명확한 규칙 + # 清除允许指定 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 액세스를 차단하는 명확한 규칙 + # 清除封禁所有其他 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 액세스를 허용하는 명확한 규칙 + # 清除允许指定 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+포트는 서비스에 액세스 할 수있었습니다" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2727,7 +2727,7 @@ grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker docker_app() { -send_stats "${docker_name}관리하다" +send_stats "${docker_name}管理" while true; do clear @@ -2747,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name설치" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "설치하다$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name설치" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "고쳐 쓰다$docker_name" + send_stats "更新$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" - send_stats "제거하십시오$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}도메인 액세스 설정" - send_stats "${docker_name}도메인 액세스 설정" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IP 액세스 허용${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IP 액세스를 차단하십시오${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}도메인 액세스 설정" - send_stats "${docker_name}도메인 액세스 설정" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IP 액세스 허용${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IP 액세스를 차단하십시오${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2995,17 @@ 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 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "다시 시작" + echo "已重启" reboot ;; *) - echo "취소" + echo "已取消" ;; esac @@ -3127,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP 환경을 다시 설치할 수 없습니다" - echo -e "${gl_huang}힌트:${gl_bai}웹 사이트 구성 환경이 설치되었습니다. 다시 설치할 필요가 없습니다!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3138,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP 환경을 설치하십시오" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}LDNMP 환경이 설치되지 않았으며 LDNMP 환경 설치를 시작하십시오 ...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx 환경을 설치하십시오" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3169,8 @@ 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 "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "먼저 LDNMP 환경을 설치하십시오" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3191,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "Nginx 환경을 먼저 설치하십시오" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3202,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신 것$webname세워짐!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webname설치 정보는 다음과 같습니다." + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "당신 것$webname세워짐!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3223,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "반세대 IP를 입력하십시오 :" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "반세대 포트를 입력하십시오 :" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3297,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "공간으로 분리 된 여러 반세대 IP+ 포트를 입력하십시오 (예 : 127.0.0.1:3000 127.0.1:3002) :" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3357,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP 사이트 관리" - echo "LDNMP 환경" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - echo -e "대지:${output}인증서 만료 시간" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "데이터 베이스:${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 도메인 이름 인증서 신청/업데이트 2. 사이트 도메인 이름 변경" - echo "3. 사이트 캐시 정리 4. 관련 사이트 만들기" - echo "5. 액세스 로그보기 6. 오류 로그보기" - echo "7. 글로벌 구성 편집 8. 사이트 구성 편집" - echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서보기" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" + echo "5. 查看访问日志 6. 查看错误日志" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20. 지정된 사이트 데이터를 삭제합니다" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "도메인 이름 인증서를 신청하십시오" - read -e -p "도메인 이름을 입력하십시오 :" yuming + 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 @@ -3412,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "사이트 도메인 이름을 변경하십시오" - echo -e "${gl_hong}적극 권장 :${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" - read -e -p "이전 도메인 이름을 입력하십시오 :" oddyuming - read -e -p "새 도메인 이름을 입력하십시오 :" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # MySQL 교체 + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "관련 사이트를 만듭니다" - echo -e "액세스 용 기존 사이트의 새 도메인 이름을 연결하십시오." - read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming - read -e -p "새 도메인 이름을 입력하십시오 :" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3476,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "액세스 로그를 봅니다" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "오류 로그를 봅니다" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "글로벌 구성 편집" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "사이트 구성 편집" - read -e -p "사이트 구성을 편집하려면 편집 할 도메인 이름을 입력하십시오." yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "사이트 데이터를 봅니다" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3535,21 +3535,21 @@ fi install_panel() { -send_stats "${panelname}관리하다" +send_stats "${panelname}管理" while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}요즘 인기 있고 강력한 운영 및 유지 관리 패널입니다." - echo "공식 웹 사이트 소개 :$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1. 설치 2. 관리 3. 제거" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}설치하다" + send_stats "${panelname}安装" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}제어" + send_stats "${panelname}控制" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}제거하십시오" + send_stats "${panelname}卸载" ;; *) break @@ -3615,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "FRP 서버를 설치하십시오" - # 임의의 포트 및 자격 증명을 생성합니다 + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3637,17 @@ EOF donlond_frp frps - # 출력 생성 정보 + # 输出生成的信息 ip_address echo "------------------------" - echo "클라이언트 배포에 필요한 매개 변수" - echo "서비스 IP :$ipv4_address" + 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 "FRP面板信息" + echo "FRP面板地址: http://$ipv4_address:$dashboard_port" + echo "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3657,9 @@ EOF configure_frpc() { - send_stats "FRP 클라이언트를 설치하십시오" - read -e -p "외부 네트워크 도킹 IP를 입력하십시오." server_addr - read -e -p "외부 네트워크 도킹 토큰을 입력하십시오." token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3679,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "FRP 인트라넷 서비스를 추가하십시오" - # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 - read -e -p "서비스 이름을 입력하십시오 :" service_name - read -e -p "전달 유형 (TCP/UDP)을 입력하십시오 [기본 TCP 입력] :" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "인트라넷 IP를 입력하십시오 [기본값 127.0.0.1 입력] : :" local_ip + read -e -p "请输入内网IP [回车默认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 + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # 구성 파일에 사용자 입력을 쓰십시오 + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 출력 생성 정보 - echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3711,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "FRP 인트라넷 서비스를 삭제하십시오" - # 삭제 해야하는 서비스 이름을 입력하라는 메시지 - read -e -p "삭제 해야하는 서비스 이름을 입력하십시오." service_name - # SED를 사용하여 서비스 및 관련 구성을 삭제하십시오. + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "제공하다$service_namefrpc.toml에서 성공적으로 삭제되었습니다" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3726,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 헤더를 인쇄하십시오 + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 서비스 정보가있는 경우 새 서비스를 처리하기 전에 현재 서비스를 인쇄하십시오. + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3756,11 @@ list_forwarding_services() { type } - # 현재 서비스 이름을 업데이트하십시오 + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 이전 값을 지우십시오 + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3789,7 +3789,7 @@ list_forwarding_services() { } END { - # 마지막 서비스에 대한 정보를 인쇄하십시오 + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3802,17 @@ list_forwarding_services() { -# FRP 서버 포트를 가져옵니다 +# 获取 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 이외의 포트가 있는지 확인하십시오 + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3821,18 @@ generate_access_urls() { fi done - # 유효한 포트가있을 때만 제목과 콘텐츠 표시 + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRP 서비스 외부 액세스 주소 :" + echo "FRP服务对外访问地址:" - # 프로세스 IPv4 주소 + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # Process IPv6 주소 (현재 경우) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3841,7 @@ generate_access_urls() { done fi - # HTTPS 구성 처리 + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP 서버" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP 서버$check_frp $update_status" - echo "FRP 인트라넷 침투 서비스 환경을 구축하여 인터넷에 공개 IP없이 장치를 노출시킵니다." - echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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 "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 인트라넷 서비스에 대한 도메인 이름 액세스 6. 도메인 이름 액세스 삭제" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00. 서비스 상태 새로 고침 0. 이전 메뉴로 돌아갑니다." + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3902,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 서버가 설치되었습니다" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 서버가 업데이트되었습니다" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "应用已卸载" ;; 5) - echo "반전 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" - send_stats "외부 도메인 이름에 대한 FRP 액세스" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "인트라넷 침투 서비스 포트를 입력하십시오 :" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IP 액세스 허용" - read -e -p "해제 할 포트를 입력하십시오." frps_port + 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 + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "FRP 서비스 상태를 새로 고치십시오" - echo "FRP 서비스 상태가 새로 고쳐졌습니다" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3966,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP 클라이언트" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP 클라이언트$check_frp $update_status" - echo "서버로 도킹, 도킹 후 인터넷 액세스에 인트라넷 침투 서비스를 만들 수 있습니다." - echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4. 외부 서비스 추가 5. 외부 서비스 삭제 6. 서비스 구성 수동으로 서비스 구성" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3999,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 클라이언트가 설치되었습니다" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 클라이언트가 업데이트되었습니다" + echo "FRP客户端已经更新完成" ;; 3) @@ -4020,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "应用已卸载" ;; 4) @@ -4066,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "YT-DLP 다운로드 도구" + 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 -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 "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5. 단일 비디오 다운로드 6. 배치 비디오 다운로드 7. 사용자 정의 매개 변수 다운로드" - echo "8. MP3 오디오 9. 비디오 디렉토리 삭제 10. 쿠키 관리 (개발 중)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "옵션 번호를 입력하십시오 :" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "yt-dlp 설치 ..." - echo "yt-dlp 설치 ..." + send_stats "正在安装 yt-dlp..." + echo "正在安装 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "安装完成。按任意键继续..." read ;; 2) - send_stats "yt-dlp 업데이트 ..." - echo "yt-dlp 업데이트 ..." + send_stats "正在更新 yt-dlp..." + echo "正在更新 yt-dlp..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "yt-dlp 제거 ..." - echo "yt-dlp 제거 ..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "단일 비디오 다운로드" - read -e -p "비디오 링크를 입력하십시오 :" url + 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 "다운로드가 완료되면 키를 눌러 계속하십시오 ..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "배치 비디오 다운로드" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "이제 배치 다운로드를 시작하십시오 ..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "배치 다운로드가 완료되었고, 키를 눌러 계속하십시오 ..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "맞춤형 비디오 다운로드" - read -e -p "전체 YT-DLP 매개 변수를 입력하십시오 (YT-DLP 제외) :" custom + 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 "실행이 완료되면 키를 눌러 계속하십시오 ..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3 다운로드" - read -e -p "비디오 링크를 입력하십시오 :" url + 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 "오디오 다운로드가 완료되었습니다. 키를 누르면 계속하십시오 ..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "비디오 삭제" - read -e -p "삭제 비디오의 이름을 입력하십시오." rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4195,7 @@ set_timedate() { -# DPKG 인터럽트 문제를 수정하십시오 +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi } @@ -4231,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}시스템 정리 ...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "패키지 관리자 캐시 청소 ..." + echo "清理包管理器缓存..." apk cache clean - echo "시스템 로그 삭제 ..." + echo "删除系统日志..." rm -rf /var/log/* - echo "APK 캐시 삭제 ..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "임시 파일 삭제 ..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "시스템 로그 삭제 ..." + echo "删除系统日志..." rm -rf /var/log/* - echo "임시 파일 삭제 ..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "사용하지 않는 의존성 정리 ..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "패키지 관리자 캐시 청소 ..." + echo "清理包管理器缓存..." pkg clean -y - echo "시스템 로그 삭제 ..." + echo "删除系统日志..." rm -rf /var/log/* - echo "임시 파일 삭제 ..." + echo "删除临时文件..." rm -rf /tmp/* else - echo "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi return @@ -4340,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "DNS 최적화" +send_stats "优化DNS" while true; do clear - echo "DNS 주소를 최적화합니다" + echo "优化DNS地址" echo "------------------------" - echo "현재 DNS 주소" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 외국 DNS 최적화 :" + 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 "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. DNS 구성을 수동으로 편집합니다" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "외국 DNS 최적화" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "국내 DNS 최적화" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "DNS 구성을 수동으로 편집합니다" + send_stats "手动编辑DNS配置" ;; *) break @@ -4403,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthentication이 발견되면 예로 설정하십시오 + # 如果找到 PasswordAuthentication 设置为 yes 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이 예로 설정됩니다 + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4417,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthentication 또는 PubKeyAuthentication이 일치하지 않는 경우 기본값을 설정하십시오. + # 如果 PasswordAuthentication 和 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" @@ -4428,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 백업 SSH 구성 파일 + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 포트는 다음으로 수정되었습니다.$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4459,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "개인 키 정보가 생성되었습니다. 복사하고 저장하십시오.${gl_huang}${ipv4_address}_ssh.key${gl_bai}향후 SSH 로그인 파일" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}루트 프라이빗 키 로그인이 활성화되고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "SSH 공개 키 내용을 입력하십시오 (일반적으로 'SSH-RSA'또는 'SSH-ED25519'로 시작) :" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}오류 : 공개 키 컨텐츠가 입력되지 않았습니다.${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4499,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}공개 키가 성공적으로 가져 왔고 루트 개인 키 로그인이 활성화되었고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4508,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "루트 비밀번호를 설정하십시오" +echo "设置你的ROOT密码" 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}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}힌트:${gl_bai}이 기능은 루트 사용자가 실행해야합니다!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "시스템을 다시 설치하십시오" + 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 @@ -4538,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}root${gl_bai}초기 비밀번호 :${gl_huang}LeitboGi0ro${gl_bai}초기 포트 :${gl_huang}22${gl_bai}" - echo -e "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "--------------------------------" - echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - echo -e "${gl_hui}Leitbogioro 및 Bin456789의 스크립트 지원 덕분에!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. OpenSuse Tumbleweed 36. FNOS FEINIU 공개 베타 버전" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "데비안 13을 다시 설치하십시오" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "데비안 12를 다시 설치하십시오" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "데비안 11을 다시 설치하십시오" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "데비안 10을 다시 설치하십시오" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "우분투 24.04를 다시 설치하십시오" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "우분투 22.04를 다시 설치하십시오" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Ubuntu 20.04를 다시 설치하십시오" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "우분투 18.04를 다시 설치하십시오" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4661,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10을 다시 설치하십시오" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9를 다시 설치하십시오" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "Alma10을 다시 설치하십시오" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "Alma9를 다시 설치하십시오" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10을 다시 설치하십시오" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9를 다시 설치하십시오" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42를 다시 설치하십시오" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41을 다시 설치하십시오" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "CentOS10을 다시 설치하십시오" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "CentOS9를 다시 설치하십시오" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "알파인을 다시 설치하십시오" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "아치를 다시 설치하십시오" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "칼리를 다시 설치하십시오" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "Openeuler를 다시 설치하십시오" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "재설치 OpenSuse" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "비행 소부소" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4790,7 @@ dd_xitong() { 41) - send_stats "Windows 11을 다시 설치하십시오" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "Windows 10을 다시 설치하십시오" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Windows 7을 다시 설치하십시오" + send_stats "重装windows7" 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 @@ -4812,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22를 다시 설치하십시오" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "Windows Server 19를 다시 설치하십시오" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "Windows Server 16을 다시 설치하십시오" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11 Arm을 다시 설치하십시오" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3 관리" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "Xanmod의 BBRV3 커널을 설치했습니다" - echo "현재 커널 버전 :$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "커널 관리" + echo "内核管理" echo "------------------------" - echo "1. BBRV3 커널 업데이트 2. BBRV3 커널 제거" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4884,7 +4884,7 @@ bbrv3() { # 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 단계 : 저장소를 추가합니다 + # 步骤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+') @@ -4893,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmod 커널이 업데이트되었습니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmod 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4916,13 +4916,13 @@ bbrv3() { else clear - echo "BBR3 가속도를 설정하십시오" - echo "비디오 소개 : https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "데비안/우분투 만 지원합니다" - echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4930,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "현재 환경은이를 지원하지 않으며 데비안 및 우분투 시스템 만 지원합니다." + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "운영 체제 유형을 결정할 수 없습니다" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4946,7 +4946,7 @@ bbrv3() { # 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 단계 : 저장소를 추가합니다 + # 步骤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+') @@ -4957,17 +4957,17 @@ bbrv3() { bbr_on - echo "Xanmod 커널이 설치되고 BBR3이 성공적으로 활성화됩니다. 다시 시작한 후에도 적용됩니다" + 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 "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4976,40 +4976,40 @@ bbrv3() { elrepo_install() { - # Elrepo GPG 공개 키를 가져 오십시오 - echo "Elrepo GPG 공개 키를 가져 오십시오 ..." + # 导入 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" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # 감지 된 운영 체제 정보를 인쇄합니다 - echo "감지 된 운영 체제 :$os_name $os_version" - # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." + 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)을 설치하십시오 ..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Elrepo 저장소 구성 (버전 10)을 설치하십시오 ..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "지원되지 않는 시스템 버전 :$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오. - echo "Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오 ..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepo 저장소 구성이 설치되어 최신 메인 라인 커널로 업데이트됩니다." + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5017,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "레드 모자 커널 관리" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "Elrepo 커널을 설치했습니다" - echo "현재 커널 버전 :$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "커널 관리" + echo "内核管理" echo "------------------------" - echo "1. Elrepo 커널 업데이트 2. Elrepo 커널 제거" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 커널을 업데이트하십시오" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "Elrepo 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" - send_stats "빨간 모자 커널을 제거하십시오" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5060,26 +5060,26 @@ elrepo() { else clear - echo "데이터를 백업하고 Linux 커널을 업그레이드합니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "Red Hat 시리즈 배포 Centos/Redhat/Alma/Rocky/Oracle 만 지원합니다" - echo "Linux 커널을 업그레이드하면 시스템 성능 및 보안이 향상 될 수 있습니다. 조건이 허용되고 생산 환경을 조심스럽게 업그레이드하는 경우 시도하는 것이 좋습니다!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hat 커널을 업그레이드하십시오" + send_stats "升级红帽内核" server_reboot ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5090,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}바이러스 데이터베이스 업데이트 ...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔 할 디렉토리를 지정하십시오." + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}스캔 디렉토리 $@...${gl_bai}" + 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 명령 매개 변수를 작성하십시오 + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Docker 명령을 실행하십시오 + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5130,8 @@ clamav_scan() { clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS - echo -e "${gl_lv}$@ scan이 완료되고 바이러스 보고서가 저장됩니다${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" - echo -e "${gl_lv}바이러스가 있다면 제발${gl_huang}scan.log${gl_lv}파일에서 찾은 키워드를 검색하여 바이러스의 위치를 확인하십시오.${gl_bai}" + 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}" } @@ -5143,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "바이러스 스캔 관리" + send_stats "病毒扫描管理" while true; do clear - echo "Clamav 바이러스 스캐닝 도구" - echo "비디오 소개 : https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "오픈 소스 바이러스 백신 소프트웨어 도구로 주로 다양한 유형의 맬웨어를 감지하고 제거하는 데 사용됩니다." - echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어를 포함합니다." + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리를 스캔하십시오${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "전체 디스크 스캔" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5168,7 @@ clamav() { ;; 2) - send_stats "중요한 디렉토리 스캔" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "사용자 정의 디렉토리 스캔" - read -e -p "스캔 할 디렉토리를 입력하십시오." directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5194,21 @@ clamav() { -# 고성능 모드 최적화 기능 +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}전환하십시오${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5220,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 비활성화합니다 + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 이퀄라이제이션 모드 최적화 기능 +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5261,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 투명 페이지를 복원하십시오 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 복원하십시오 + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 기본 설정 기능을 복원하십시오 +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}기본 설정으로 복원하십시오 ...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}파일 디스크립터 복원 ...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}가상 메모리 복원 ...${gl_bai}" + 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}" + 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 @@ -5302,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}CPU 설정 복원 ...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}다른 최적화를 복원 ...${gl_bai}" - # 투명 페이지를 복원하십시오 + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 복원하십시오 + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 웹 사이트 구축 최적화 기능 +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}웹 사이트 구축 최적화 모드로 전환하십시오 ...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5344,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 비활성화합니다 + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux 커널 튜닝 관리" - echo "Linux 시스템에서 커널 매개 변수의 최적화" - echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." - echo -e "${gl_huang}힌트:${gl_bai}생산 환경에서주의해서 사용하십시오!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1. 고성능 최적화 모드 : 시스템 성능을 극대화하고 파일 설명기, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." - echo "2. 균형 최적화 모드 : 매일 사용하기에 적합한 성능과 자원 소비 사이의 균형." - echo "3. 웹 사이트 최적화 모드 : 웹 사이트 서버에 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." - echo "4. 라이브 브로드 캐스트 최적화 모드 : 라이브 방송 스트리밍의 특별한 요구를 최적화하여 대기 시간을 줄이고 전송 성능을 향상시킵니다." - echo "5. 게임 서버 최적화 모드 : 게임 서버를 위해 동시 처리 기능 및 응답 속도를 향상시킬 최적화." - echo "6. 기본 설정을 복원하십시오. 시스템 설정을 기본 구성으로 복원하십시오." + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "고성능 모드 최적화" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "균형 모드 최적화" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "웹 사이트 최적화 모델" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "라이브 스트리밍 최적화" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "게임 서버 최적화" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "기본 설정을 복원하십시오" + send_stats "还原默认设置" ;; *) break @@ -5446,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5455,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "지원되지 않는 시스템 :$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "지원되지 않는 시스템, 시스템 유형을 인식 할 수 없습니다." + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5475,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "스위치 시스템 언어" +send_stats "切换系统语言" while true; do clear - echo "현재 시스템 언어 :$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1. 영어 2. 중국어 3. 전통 중국어" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "영어로 전환하십시오" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "단순화 된 중국어로 전환하십시오" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "전통적인 중국어로 전환하십시오" + send_stats "切换到繁体中文" ;; *) break @@ -5519,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}변경이 완료되었습니다. 변경 사항을 볼 수 있도록 SSH를 다시 연결하십시오!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5530,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "명령 라인 미화 도구" + send_stats "命令行美化工具" while true; do clear - echo "명령 라인 미화 도구" + 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}#" @@ -5543,9 +5543,9 @@ shell_bianse() { 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5590,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "시스템 재활용 스테이션" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5605,17 @@ linux_trash() { fi clear - echo -e "현재 재활용 쓰레기통${trash_status}" - echo -e "활성화 후 RM이 삭제 한 파일은 먼저 재활용 빈에 입력하여 중요한 파일의 잘못된 삭제를 방지합니다!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "재활용 쓰레기통은 비어 있습니다" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1. 재활용 빈을 활성화합니다. 2. 재활용 쓰레기통을 닫습니다." - echo "3. 컨텐츠를 복원 4. 재활용 쓰레기통을 지 웁니다" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5623,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "Recycle Bin이 활성화되고 삭제 된 파일이 Recycle Bin으로 이동됩니다." + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5631,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "재활용 빈이 닫히고 파일이 직접 삭제됩니다." + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "복원 할 파일 이름을 입력하십시오." file_to_restore + 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홈 디렉토리로 복원되었습니다." + echo "$file_to_restore 已还原到主目录。" else - echo "파일이 존재하지 않습니다." + echo "文件不存在。" fi ;; 4) - read -e -p "재활용 쓰레기통을 지우셨습니까? [Y/N] :" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "재활용 쓰레기통이 지워졌습니다." + echo "回收站已清空。" fi ;; *) @@ -5658,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "명령 즐겨 찾기" +send_stats "命令收藏夹" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 백업을 만듭니다 +# 创建备份 create_backup() { - send_stats "백업을 만듭니다" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 사용자에게 백업 디렉토리를 입력하라는 메시지를 표시하십시오 - echo "백업 예제 :" - echo "- 단일 디렉토리를 백업 : /var /www" - echo "- 여러 디렉토리 백업 : /etc /home /var /log" - echo "- Direct Enter는 기본 디렉토리 ( /etc /usr /home)를 사용합니다." - read -r -p "백업 디렉토리를 입력하십시오 (여러 디렉토리가 공간별로 구분되며 직접 입력하면 기본 디렉토리를 사용하십시오)." input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # 사용자가 디렉토리를 입력하지 않으면 기본 디렉토리를 사용하십시오. + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5682,119 @@ create_backup() { "/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 "선택한 백업 디렉토리는 다음과 같습니다." + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 백업을 만듭니다 - echo "백업 생성$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 명령이 성공했는지 확인하십시오 + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "백업은 성공적으로 생성되었습니다.$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "백업 생성이 실패했습니다!" + echo "备份创建失败!" exit 1 fi } -# 백업을 복원하십시오 +# 恢复备份 restore_backup() { - send_stats "백업을 복원하십시오" - # 복원하려는 백업을 선택하십시오 - read -e -p "복원하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # 백업 파일이 있는지 확인하십시오 + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "백업 파일이 존재하지 않습니다!" + echo "备份文件不存在!" exit 1 fi - echo "백업 복구$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "백업 및 복원을 성공적으로 복원하십시오!" + echo "备份恢复成功!" else - echo "백업 복구 실패!" + echo "备份恢复失败!" exit 1 fi } -# 백업을 나열합니다 +# 列出备份 list_backups() { - echo "사용 가능한 백업 :" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# 백업을 삭제하십시오 +# 删除备份 delete_backup() { - send_stats "백업을 삭제하십시오" + send_stats "删除备份" - read -e -p "삭제하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # 백업 파일이 있는지 확인하십시오 + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "백업 파일이 존재하지 않습니다!" + echo "备份文件不存在!" exit 1 fi - # 백업을 삭제하십시오 + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "백업이 성공적으로 삭제되었습니다!" + echo "备份删除成功!" else - echo "백업 삭제가 실패했습니다!" + echo "备份删除失败!" exit 1 fi } -# 백업 메인 메뉴 +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "시스템 백업 기능" - echo "시스템 백업 기능" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1. 백업 만들기 2. 백업 복원 3. 백업 삭제" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "按回车键继续..." done } @@ -5806,56 +5806,56 @@ linux_backup() { -# 연결 목록 표시 +# 显示连接列表 list_connections() { - echo "저장된 연결 :" + 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" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "연결 이름을 입력하십시오 :" name - read -e -p "IP 주소를 입력하십시오 :" ip - read -e -p "사용자 이름 (기본값 : 루트)을 입력하십시오 :" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "인증 방법을 선택하십시오 :" - echo "1. 비밀번호" - echo "2. 키" - read -e -p "선택 (1/2)을 입력하십시오 :" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" + 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" @@ -5864,89 +5864,89 @@ add_connection() { fi ;; *) - echo "잘못된 선택!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "연결이 저장됩니다!" + echo "连接已保存!" } -# 연결을 삭제하십시오 +# 删除连接 delete_connection() { - send_stats "연결을 삭제하십시오" - read -e -p "삭제하려면 연결 번호를 입력하십시오." num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "오류 : 해당 연결을 찾을 수 없었습니다." + 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 "연결이 삭제되었습니다!" + echo "连接已删除!" } -# 연결을 사용하십시오 +# 使用连接 use_connection() { - send_stats "연결을 사용하십시오" - read -e -p "사용할 연결 번호를 입력하십시오." num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "오류 : 해당 연결을 찾을 수 없었습니다." + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "연결$name ($ip)..." + 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. 대상 서버가 키를 사용하여 로그인 할 수 있는지 여부." + 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 "错误:未安装 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 서비스가 정상적으로 실행되는지 여부." + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "SSH 원격 연결 도구" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 구성 파일과 키 디렉토리가 존재하는지 확인하고 존재하지 않으면 작성하십시오. + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 원격 연결 도구" - echo "SSH를 통해 다른 Linux 시스템에 연결할 수 있습니다" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1. 새 연결 만들기 2. 연결 사용 3. 연결 삭제" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5988,156 +5988,156 @@ ssh_manager() { -# 사용 가능한 하드 디스크 파티션을 나열하십시오 +# 列出可用的硬盘分区 list_partitions() { - echo "사용 가능한 하드 디스크 파티션 :" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 파티션을 장착하십시오 +# 挂载分区 mount_partition() { - send_stats "파티션을 장착하십시오" - read -e -p "장착 할 파티션 이름을 입력하십시오 (예 : SDA1) :" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # 파티션이 있는지 확인하십시오 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 존재하지 않습니다!" + echo "分区不存在!" return fi - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "파티션은 이미 장착되어 있습니다!" + echo "分区已经挂载!" return fi - # 마운트 포인트를 만듭니다 + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 파티션을 장착하십시오 + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "파티션 마운트 성공적으로 :$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "파티션 마운트 실패!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# 파티션을 제거하십시오 +# 卸载分区 unmount_partition() { - send_stats "파티션을 제거하십시오" - read -e -p "파티션 이름 (예 : SDA1)을 입력하십시오." PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "파티션이 장착되지 않았습니다!" + echo "分区未挂载!" return fi - # 파티션을 제거하십시오 + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 분할 해제 성공 :$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "파티션 제거 실패!" + echo "分区卸载失败!" fi } -# 목록 장착 파티션 +# 列出已挂载的分区 list_mounted_partitions() { - echo "마운트 파티션 :" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 형식 파티션 +# 格式化分区 format_partition() { - send_stats "형식 파티션" - read -e -p "파티션 이름을 형식 (예 : SDA1)에 입력하십시오." PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # 파티션이 있는지 확인하십시오 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 존재하지 않습니다!" + echo "分区不存在!" return fi - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 장착되었습니다. 먼저 제거하십시오!" + echo "分区已经挂载,请先卸载!" return fi - # 파일 시스템 유형을 선택하십시오 - echo "파일 시스템 유형을 선택하십시오 :" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "선택을 입력하십시오 :" FS_CHOICE + 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 ;; + *) echo "无效的选择!"; return ;; esac - # 형식을 확인하십시오 - read -e -p "파티션 형식 확인 /dev /$PARTITION~을 위한$FS_TYPE그게? (Y/N) :" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "작업이 취소되었습니다." + echo "操作已取消。" return fi - # 형식 파티션 - echo "파티션 형식 /dev /$PARTITION~을 위한$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 형식이 성공했습니다!" + echo "分区格式化成功!" else - echo "파티션 형식이 실패했습니다!" + echo "分区格式化失败!" fi } -# 파티션 상태를 확인하십시오 +# 检查分区状态 check_partition() { - send_stats "파티션 상태를 확인하십시오" - read -e -p "파티션 이름을 입력하여 확인하십시오 (예 : SDA1) :" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # 파티션이 있는지 확인하십시오 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 존재하지 않습니다!" + echo "分区不存在!" return fi - # 파티션 상태를 확인하십시오 - echo "파티션 /개발자 /$PARTITION상태:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# 메인 메뉴 +# 主菜单 disk_manager() { - send_stats "하드 디스크 관리 기능" + send_stats "硬盘管理功能" while true; do clear - echo "하드 디스크 파티션 관리" - echo -e "${gl_huang}이 기능은 테스트 기간 동안 내부적으로 테스트되므로 생산 환경에서 사용하지 마십시오.${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 파티션 마운트 2. 파티션 3. 마운트 파티션보기" - echo "4. 파티션 형식 5. 파티션 상태를 확인하십시오" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "按回车键继续..." done } -# 작업 목록 표시 +# 显示任务列表 list_tasks() { - echo "저장된 동기화 작업 :" + 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)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/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 + 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 + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" + 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" @@ -6211,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "잘못된 키 컨텐츠!" + echo "无效的密钥内容!" return fi ;; *) - echo "잘못된 선택!" + echo "无效的选择!" return ;; esac - echo "동기화 모드를 선택하십시오 :" - echo "1. 표준 모드 (-avz)" - echo "2. 대상 파일 삭제 (-avz-delete)" - read -e -p "선택하십시오 (1/2) :" mode + 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" ;; + *) 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 "작업을 저장했습니다!" + echo "任务已保存!" } -# 작업을 삭제하십시오 +# 删除任务 delete_task() { - send_stats "동기화 작업을 삭제합니다" - read -e -p "삭제하려면 작업 번호를 입력하십시오." num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "오류 : 해당 작업을 찾을 수 없었습니다." + 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 "작업이 삭제되었습니다!" + echo "任务已删除!" } run_task() { - send_stats "동기화 작업을 수행하십시오" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 매개 변수를 분석하십시오 + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6278,51 @@ run_task() { num="$1" fi - # 들어오는 작업 번호가없는 경우 사용자에게 입력하라는 메시지를 표시하십시오. + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "실행할 작업 번호를 입력하십시오." num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "오류 : 작업이 찾을 수 없었습니다!" + 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" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "동기화를 원격 끝으로 푸시합니다.$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # SSH 연결 공통 매개 변수를 추가하십시오 + # 添加 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 "错误:未安装 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" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "경고 : 키 파일 권한이 잘못되었고 수리 중입니다 ..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6330,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "동기화가 완료되었습니다!" + echo "同步完成!" else - echo "동기화 실패! 다음을 확인하십시오." - echo "1. 네트워크 연결이 정상입니까?" - echo "2. 원격 호스트가 액세스 할 수 있습니까?" - echo "3. 인증 정보가 정확합니까?" - echo "4. 로컬 및 원격 디렉토리에 올바른 액세스 권한이 있습니까?" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# 시간이 정한 작업을 만듭니다 +# 创建定时任务 schedule_task() { - send_stats "동기화 타이밍 작업을 추가하십시오" + send_stats "添加同步定时任务" - read -e -p "정기적으로 동기화 할 작업 번호를 입력하십시오." num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "错误: 请输入有效的任务编号!" return fi - echo "시간이 정한 실행 간격을 선택하십시오." - echo "1) 한 시간에 한 번 실행하십시오" - echo "2) 하루에 한 번 수행하십시오" - echo "3) 일주일에 한 번 실행하십시오" - read -e -p "옵션을 입력하십시오 (1/2/3) :" interval + 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="" @@ -6363,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "오류 : 유효한 옵션을 입력하십시오!" ; return ;; + *) 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 "오류 :이 작업의 타이밍 동기화가 이미 존재합니다!" + echo "错误: 该任务的定时同步已存在!" return fi - # 사용자에게 크론AB를 만듭니다 + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "타이밍 작업이 만들어졌습니다.$cron_job" + echo "定时任务已创建: $cron_job" } -# 예정된 작업을 봅니다 +# 查看定时任务 view_tasks() { - echo "현재 타이밍 작업 :" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 타이밍 작업을 삭제하십시오 +# 删除定时任务 delete_task_schedule() { - send_stats "동기화 타이밍 작업을 삭제합니다" - read -e -p "삭제하려면 작업 번호를 입력하십시오." num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "삭제 된 작업 번호$num타이밍 작업" + echo "已删除任务编号 $num 的定时任务" } -# 작업 관리 메인 메뉴 +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "RSYNC 원격 동기화 도구" - echo "원격 디렉토리 간의 동기화는 증분 동기화, 효율적이고 안정적인 지원을 지원합니다." + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 새 작업 생성 2. 작업을 삭제하십시오" - echo "3. 원격 끝에 로컬 동기화 수행 4. 로컬 엔드에 대한 원격 동기화 수행" - echo "5. 타이밍 작업 만들기 6. 타이밍 작업 삭제" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "按回车键继续..." done } @@ -6448,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "시스템 정보 쿼리" + send_stats "系统信息查询" ip_address @@ -6498,41 +6498,41 @@ linux_ps() { echo "" - echo -e "시스템 정보 쿼리" + 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}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}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}총 수신 :${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}네트워크 알고리즘 :${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}연산자:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4 주소 :${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6 주소 :${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6545,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "기본 도구" - echo -e "기본 도구" + # 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}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}소사이어티 커뮤니케이션 연결 도구" - 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}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${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}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}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}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" curl --help - send_stats "컬을 설치하십시오" + send_stats "安装curl" ;; 2) clear install wget clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" wget --help - send_stats "wget을 설치하십시오" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" sudo --help - send_stats "Sudo를 설치하십시오" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" socat -h - send_stats "Socat을 설치하십시오" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "HTOP를 설치하십시오" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "iftop을 설치하십시오" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" unzip - send_stats "압축을 설치하십시오" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" tar --help - send_stats "타르를 설치하십시오" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" tmux --help - send_stats "tmux를 설치하십시오" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "FFMPEG를 설치하십시오" + send_stats "安装ffmpeg" ;; 11) @@ -6657,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "Btop을 설치하십시오" + send_stats "安装btop" ;; 12) clear @@ -6666,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저를 설치하십시오" + send_stats "安装ranger" ;; 13) clear @@ -6675,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDU를 설치하십시오" + send_stats "安装ncdu" ;; 14) clear @@ -6684,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZF를 설치하십시오" + send_stats "安装fzf" ;; 15) clear @@ -6693,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIM을 설치하십시오" + send_stats "安装vim" ;; 16) clear @@ -6702,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노를 설치하십시오" + send_stats "安装nano" ;; @@ -6713,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "git을 설치하십시오" + send_stats "安装git" ;; 21) @@ -6721,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrix를 설치하십시오" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "SL을 설치하십시오" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "Bastet을 설치하십시오" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "NSNAKE를 설치하십시오" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "Ninvaders를 설치하십시오" + send_stats "安装ninvaders" ;; 31) clear - send_stats "모두 설치하십시오" + 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 "모든 설치 (게임 및 화면 보호기 제외)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "모든 것을 제거하십시오" + 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 + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "지정된 소프트웨어를 설치하십시오" + send_stats "安装指定软件" ;; 42) clear - read -e -p "제거되지 않은 도구 이름 (HTOP UFW TMUX CMATRIX)을 입력하십시오." removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "지정된 소프트웨어를 제거하십시오" + send_stats "卸载指定软件" ;; 0) @@ -6789,7 +6789,7 @@ linux_tools() { ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -6803,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "BBR 관리" + 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 "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" - echo "BBR 관리" + echo "BBR管理" echo "------------------------" - echo "1. BBRV3 켜기 2. BBRV3 끄기 (재시작)" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "알파인 활성화 BBR3" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6854,37 +6854,37 @@ linux_docker() { while true; do clear - # Send_stats "Docker Management" - echo -e "도커 관리" + # send_stats "docker管理" + echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker 환경을 설치하고 업데이트하십시오${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Docker Global Status를 봅니다${gl_huang}★${gl_bai}" + 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}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}쓸모없는 도커 컨테이너 및 미러 네트워크 데이터 볼륨을 청소하십시오" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" 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}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}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}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "Docker 환경을 설치하십시오" + send_stats "安装docker环境" install_add_docker ;; @@ -6895,22 +6895,22 @@ linux_docker() { 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 "도커 버전" + send_stats "docker全局状态" + echo "Docker版本" docker -v docker compose version echo "" - echo -e "도커 이미지 :${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "도커 컨테이너 :${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "도커 네트워크 :${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -6925,8 +6925,8 @@ linux_docker() { 5) while true; do clear - send_stats "도커 네트워크 관리" - echo "도커 네트워크 목록" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -6950,36 +6950,36 @@ linux_docker() { done echo "" - echo "네트워크 작동" + echo "网络操作" echo "------------------------" - echo "1. 네트워크를 만듭니다" - echo "2. 인터넷에 가입하십시오" - echo "3. 네트워크를 종료하십시오" - echo "4. 네트워크를 삭제합니다" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "네트워크를 만듭니다" - read -e -p "새 네트워크 이름 설정 :" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "인터넷에 가입하십시오" - read -e -p "네트워크 이름에 가입 :" dockernetwork - read -e -p "해당 컨테이너는 네트워크에 추가됩니다 (여러 컨테이너 이름은 공간으로 분리됩니다)." dockernames + 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 + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -6988,8 +6988,8 @@ linux_docker() { ;; 4) - send_stats "네트워크를 삭제하십시오" - read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7003,29 +7003,29 @@ linux_docker() { 6) while true; do clear - send_stats "도커 볼륨 관리" - echo "도커 볼륨 목록" + send_stats "Docker卷管理" + echo "Docker卷列表" docker volume ls echo "" - echo "볼륨 작동" + echo "卷操作" echo "------------------------" - echo "1. 새 볼륨을 만듭니다" - echo "2. 지정된 볼륨을 삭제합니다" - echo "3. 모든 볼륨을 삭제하십시오" + echo "1. 创建新卷" + echo "2. 删除指定卷" + echo "3. 删除所有卷" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "새 볼륨을 만듭니다" - read -e -p "새 볼륨 이름 설정 :" dockerjuan + send_stats "新建卷" + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "볼륨 삭제 이름을 입력하십시오 (공백으로 여러 볼륨 이름을 분리하십시오)." dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7034,7 +7034,7 @@ linux_docker() { ;; 3) - send_stats "모든 볼륨을 삭제하십시오" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7043,7 +7043,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7056,7 +7056,7 @@ linux_docker() { ;; 7) clear - send_stats "도커 청소" + send_stats "Docker清理" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7065,13 +7065,13 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear - send_stats "도커 소스" + send_stats "Docker源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7084,19 +7084,19 @@ linux_docker() { 11) clear - send_stats "Docker V6 열기" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker V6 레벨" + send_stats "Docker v6 关" docker_ipv6_off ;; 20) clear - send_stats "Docker는 제거합니다" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7108,7 +7108,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7117,7 +7117,7 @@ linux_docker() { kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -7134,151 +7134,151 @@ linux_test() { while true; do clear - # Send_stats "테스트 스크립트 컬렉션" - echo -e "스크립트 수집 테스트" + # 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 스트리밍 미디어 잠금 해제 탐지" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}네트워크 속도 측정" - echo -e "${gl_kjlan}11. ${gl_bai}Besttrace Three Network Backhaul 지연 라우팅 테스트" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC 다기능 속도 테스트 스크립트" - echo -e "${gl_kjlan}18. ${gl_bai}Netquality Network 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}网络线路测速" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}IICU/GB5 CPU 성능 테스트 스크립트" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" 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}31. ${gl_bai}bench 性能测试" + 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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "ChatGpt는 상태 감지를 잠금 해제합니다" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "지역 스트리밍 미디어 잠금 해제 테스트" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "YEAHWU 스트리밍 미디어 잠금 해제 탐지" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_ip 품질 신체 검사 스크립트" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "MTR_TRACE 3 개의 네트워크 리턴 라인 테스트" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed 3 Net 속도 측정" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace 빠른 백홀 테스트 스크립트" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" - echo "참조 할 수있는 IP 목록" + send_stats "nxtrace指定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 "광저우 통신 : 58.60.188.222" - echo "광저우 유니폼 : 210.21.196.6" - echo "광저우 모바일 : 120.196.165.24" - echo "청두 통신 : 61.139.2.69" - echo "청두 유니폼 : 119.6.6.6" - echo "청두 모바일 : 211.137.96.205" - echo "Hunan Telecom : 36.111.200.100" - echo "후난 유니폼 : 42.48.16.100" - echo "후난 모바일 : 39.134.254.6" + 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "지정된 IP를 입력하십시오." testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "Ludashi2020 3 네트워크 라인 테스트" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "I-ABC 다기능 속도 테스트 스크립트" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "네트워크 품질 테스트 스크립트" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "YABS 성능 테스트" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "IICU/GB5 CPU 성능 테스트 스크립트" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "벤치 성능 테스트" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX 퓨전 몬스터 검토" + 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 ;; @@ -7288,7 +7288,7 @@ linux_test() { ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -7304,51 +7304,51 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud 스크립트 컬렉션" - echo -e "Oracle Cloud 스크립트 컬렉션" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}유휴 기계 활성 스크립트를 설치하십시오" - echo -e "${gl_kjlan}2. ${gl_bai}유휴 기계 활성 스크립트를 제거하십시오" + 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}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "활성 스크립트 : CPU는 10-20% 메모리를 점유합니다." - read -e -p "설치 하시겠습니까? (Y/N) :" choice + 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 + # 提示用户输入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 + 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 + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "스피드 테스트 간격 시간 (초)을 입력하십시오 [기본값 :$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 도커 컨테이너를 실행하십시오 + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7356,14 +7356,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloud 설치 활성 스크립트" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7371,20 +7371,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "시스템을 다시 설치하십시오" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - read -e -p "계속할거야? (Y/N) :" choice + 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 + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7396,28 +7396,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "유효하지 않은 선택, 다시 입력하십시오." + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "다시 설치 한 비밀번호를 입력하십시오." vpspasswd + 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 회복 시스템 스크립트" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "이 기능은 개발 단계에 있으므로 계속 지켜봐 주시기 바랍니다!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7427,15 +7427,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." - send_stats "IPv6 수정" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -7456,7 +7456,7 @@ docker_tato() { 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}" + 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 } @@ -7477,7 +7477,7 @@ 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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7505,31 +7505,31 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp 웹 사이트 빌딩" - echo -e "${gl_huang}LDNMP 웹 사이트 구축" + # 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}WordPress를 설치하십시오${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Discuz 포럼을 설치하십시오${gl_huang}4. ${gl_bai}Kadao 클라우드 데스크탑을 설치하십시오" - echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum 웹 사이트를 설치하십시오${gl_huang}8. ${gl_bai}Typecho Lightweight 블로그 웹 사이트를 설치하십시오" - echo -e "${gl_huang}9. ${gl_bai}LinkStack 공유 링크 플랫폼을 설치하십시오${gl_huang}20. ${gl_bai}동적 사이트를 사용자 정의합니다" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}사이트 리버스 프록시 -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}AI 페인팅 프롬프트 워드 생성기를 설치하십시오${gl_huang}28. ${gl_bai}사이트 리버스 프록시로드 밸런싱" - echo -e "${gl_huang}30. ${gl_bai}정적 사이트를 사용자 정의합니다" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7543,10 +7543,10 @@ linux_ldnmp() { 3) clear - # Discuz 포럼 + # Discuz论坛 webname="Discuz论坛" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7569,21 +7569,21 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; 4) clear - # Kedao 클라우드 데스크탑 + # 可道云桌面 webname="可道云桌面" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7605,20 +7605,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" - echo "Redis 호스트 : Redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # Apple CMS + # 苹果CMS webname="苹果CMS" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7644,24 +7644,24 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 접두사 : MAC_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "설치가 성공한 후 배경 주소에 로그인하십시오." + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 한 다리 카운팅 카드 + # 独脚数卡 webname="独脚数卡" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7682,34 +7682,34 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" - echo "Redis 주소 : Redis" - echo "Redis Password : 기본적으로 채워지지 않습니다" - echo "Redis Port : 6379" + echo "redis地址: redis" + echo "redis密码: 默认不填写" + echo "redis端口: 6379" echo "" - echo "웹 사이트 URL : https : //$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "사용자 이름 : 관리자" - echo "비밀번호 : 관리자" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "로그인 할 때 오른쪽 상단에 빨간색 Error0이 나타나면 다음 명령을 사용하십시오." - echo "나는 또한 유니콘 번호 카드가 너무 귀찮다는 것에 대해 매우 화가 났으며 그러한 문제가있을 것입니다!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # Flarum 포럼 + # flarum论坛 webname="flarum论坛" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7746,12 +7746,12 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : flarum_" - echo "관리자 정보는 직접 설정됩니다" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -7759,8 +7759,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7784,11 +7784,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 접두사 : typecho_" - echo "데이터베이스 주소 : MySQL" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -7797,8 +7797,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7823,18 +7823,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7851,10 +7851,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드합니다" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" - read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -7864,20 +7864,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php가있는 경로" + 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 "(/home/web/html/와 유사한 Index.php의 경로를 입력하십시오.$yuming/wordpress/): " index_lujing + 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 -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1. PHP의 최신 버전 | 2. PHP7.4 :" pho_v + 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 @@ -7888,15 +7888,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "유효하지 않은 선택, 다시 입력하십시오." + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 지정된 확장자를 설치하십시오" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "설치된 확장" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -7906,25 +7906,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 사이트 구성 편집" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 작성하고 데이터베이스 백업이 있습니다." use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -7934,10 +7934,10 @@ linux_ldnmp() { 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 "데이터베이스 가져 오기 테이블 데이터" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "데이터베이스 가져 오기가 완료되었습니다" + echo "数据库导入完成" ;; *) echo @@ -7949,12 +7949,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 :$prefix" - echo "관리자 로그인 정보는 직접 설정됩니다" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -7967,10 +7967,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "점프 도메인 이름을 입력하십시오 :" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -7992,7 +7992,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8003,11 +8003,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "도메인 이름 형식 :${gl_huang}google.com${gl_bai}" - read -e -p "반세기 도메인 이름을 입력하십시오 :" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8027,8 +8027,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8050,8 +8050,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8068,8 +8068,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8102,8 +8102,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8120,10 +8120,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드를 업로드하십시오" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" - read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8133,12 +8133,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html이있는 경로" + 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 "(/home/web/html/와 유사한 index.html로가는 경로를 입력하십시오.$yuming/index/): " index_lujing + 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 @@ -8163,21 +8163,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP 환경 백업" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "백업 파일이 작성되었습니다 : /home /$backup_filename" - read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8185,9 +8185,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." + echo "文件已传送至远程服务器home目录。" else - echo "전송할 파일은 찾을 수 없었습니다." + echo "未找到要传送的文件。" fi break ;; @@ -8195,7 +8195,7 @@ linux_ldnmp() { break ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8203,9 +8203,9 @@ linux_ldnmp() { 33) clear - send_stats "시간이 정한 원격 백업" - read -e -p "원격 서버 IP를 입력하십시오." useip - read -e -p "원격 서버 비밀번호를 입력하십시오." usepasswd + 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 @@ -8215,18 +8215,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 주간 백업 2. 매일 백업" - read -e -p "선택을 입력하십시오 :" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "주간 백업의 요일을 선택하십시오 (0-6, 0은 일요일을 나타냅니다) :" weekday + 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 + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8240,19 +8240,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP 환경 복원" - echo "사용 가능한 사이트 백업" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename + 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 @@ -8262,7 +8262,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8271,7 +8271,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "압축 패키지가 발견되지 않았습니다." + echo "没有找到压缩包。" fi ;; @@ -8289,11 +8289,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP 환경을 업데이트하십시오" - echo "LDNMP 환경을 업데이트하십시오" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "구성 요소의 새 버전을 발견하십시오" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8313,13 +8313,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. Nginx 업데이트 2. MySQL 업데이트 3. PHP 업데이트 4. Redis 업데이트" + echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5. 전체 환경을 업데이트하십시오" + echo "5. 更新完整环境" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8328,7 +8328,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "입력하십시오${ldnmp_pods}버전 번호 (예 : 8.0 8.3 8.4 9.0) (최신 버전을 얻으려면 입력) :" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8339,13 +8339,13 @@ linux_ldnmp() { 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}마치다" + 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 + 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 @@ -8378,8 +8378,8 @@ linux_ldnmp() { 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}마치다" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 4) @@ -8390,15 +8390,15 @@ linux_ldnmp() { 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}마치다" + 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 환경을 완전히 업데이트하십시오" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8424,7 +8424,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP 환경을 제거하십시오" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8438,7 +8438,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8448,7 +8448,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 입력!" + echo "无效的输入!" esac break_end @@ -8468,12 +8468,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "응용 프로그램 시장" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 루프로 색상을 설정하십시오 + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8482,62 +8482,62 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1 파넬 신세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}우분투 원격 데스크탑 웹 에디션" - echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" - echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}Rocketchat 멀티 플레이어 온라인 채팅 시스템" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" - echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" - echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" - echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" - echo -e "${gl_kjlan}19. ${color19}Thunder Pool Waf 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" - echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" - echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" - echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}Stirlingpdf 도구 컬렉션${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" - echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" - echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" - echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}Websh 웹 버전 SSH 연결 도구" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" - echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdesk 원격 책상 (릴레이)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" - echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹 사이트 빌딩 관리 패널" - echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}점프 서버 오픈 소스 요새 기계" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" - echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" - echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플로우 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" - echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" - echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" - echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" - echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" - echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" - echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" - echo -e "${gl_kjlan}85. ${color85}Immich 사진 비디오 관리자${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" - echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice fi case $sub_choice in @@ -8720,7 +8720,7 @@ while true; do ;; 7|nezha) clear - send_stats "Nezha를 구축하십시오" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -8729,20 +8729,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezha 모니터링$check_docker $update_status" - echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" - echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 사용" + echo "1. 使用" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -8799,7 +8799,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 건설하십시오" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -8809,43 +8809,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우체국 서비스$check_docker $update_status" - echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}포트$port현재 사용할 수 없습니다${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "액세스 주소 :" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "이메일 도메인 이름 (예 : Mail.yuming.com)을 설정하십시오." yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "이 DNS 레코드를 먼저 구문 분석하십시오" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -8855,7 +8855,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 키를 누르십시오 ..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -8874,9 +8874,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.io가 설치되었습니다" + echo "poste.io已经安装完成" echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -8899,9 +8899,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.io가 설치되었습니다" + echo "poste.io已经安装完成" echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -8912,7 +8912,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "应用已卸载" ;; *) @@ -8946,7 +8946,7 @@ while true; do clear ip_address - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -8956,7 +8956,7 @@ while true; do 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이 설치되었습니다" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -8966,7 +8966,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -9050,7 +9050,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -9064,7 +9064,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -9209,7 +9209,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 수영장을 건설하십시오" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9217,20 +9217,20 @@ while true; do while true; do check_docker_app clear - echo -e "썬더 풀 서비스$check_docker" - echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 비밀번호 재설정 4. 제거" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9240,7 +9240,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Thunder Pool WAF 패널이 설치되었습니다" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9253,7 +9253,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Thunder Pool WAF 패널이 업데이트되었습니다" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9264,7 +9264,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9672,7 +9672,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="공식 웹 사이트 소개 :${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -9725,7 +9725,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya 가족 버킷" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -9927,9 +9927,9 @@ while true; do prometheus_install clear ip_address - echo "설치" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -9947,7 +9947,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10034,7 +10034,7 @@ while true; do 51|pve) clear - send_stats "PVE 치킨" + send_stats "PVE开小鸡" 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 ;; @@ -10154,7 +10154,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10169,7 +10169,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10197,7 +10197,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10212,7 +10212,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10220,7 +10220,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10241,17 +10241,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "설치" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름 : 관리자" - echo "초기 비밀번호 : changeme" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "앱이 업데이트되었습니다" + echo "应用已更新" } @@ -10261,7 +10261,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10308,7 +10308,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10324,7 +10324,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10586,7 +10586,7 @@ while true; do docker_rum() { - read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10616,7 +10616,7 @@ while true; do docker_rum() { - read -e -p "MOONTV 로그인 비밀번호 설정 :" app_passwd + read -e -p "设置MoonTV的登录密码: " app_passwd docker run -d \ --name moontv \ @@ -10702,8 +10702,8 @@ while true; do docker_rum() { - read -e -p "설정${docker_name}로그인 사용자 이름 :" app_use - read -e -p "설정${docker_name}로그인 비밀번호 :" app_passwd + read -e -p "设置${docker_name}的登录用户名: " app_use + read -e -p "设置${docker_name}的登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -10800,11 +10800,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 임의의 키와 암호를 생성합니다 + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10813,17 +10813,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 관리자 계정 정보를 추가하십시오 + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 컨테이너를 시작하십시오 + # 启动容器 docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10833,7 +10833,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 원래 변수를 유지하십시오 + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10850,7 +10850,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10900,7 +10900,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11020,7 +11020,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -11033,7 +11033,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11153,35 +11153,35 @@ linux_work() { while true; do clear - send_stats "백엔드 작업 공간" - echo -e "백엔드 작업 공간" - echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." - echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." - echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "현재 기존 작업 공간 목록" + 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}작업 공간 No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" - echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" - echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" - echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" - echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}작업 공간 번호 10" + 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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11189,7 +11189,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11197,63 +11197,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11265,21 +11265,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH 거주 모드" - echo -e "SSH 거주 모드${tmux_sshd_status}" - echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1. 2를 켜십시오. 2를 끕니다" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" gongzuoqu_del + 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 + 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 ;; @@ -11295,29 +11295,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "맞춤형 작업 공간" + send_stats "自定义工作区" ;; 23) - read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "배경 작업 공간에 명령을 주입합니다" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "작업 공간을 삭제합니다" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -11342,54 +11342,54 @@ linux_Settings() { while true; do clear - # Send_stats "시스템 도구" - echo -e "시스템 도구" + # 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}지정된 버전의 Python을 설치하십시오" - 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${gl_kjlan}10. ${gl_bai}우선 순위 IPv4/IPv6을 전환하십시오" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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 고위험 취약점을 수정하십시오" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}바이러스 스캐닝 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "바로 가기 키를 입력하십시오 (종료하려면 0을 입력하십시오) :" kuaijiejian + 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 "스크립트 바로 가기 키가 설정되었습니다" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11397,34 +11397,34 @@ linux_Settings() { 2) clear - send_stats "로그인 비밀번호를 설정하십시오" - echo "로그인 비밀번호를 설정하십시오" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "루트 비밀번호 모드" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "PY 버전 관리" - echo "파이썬 버전 관리" - echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 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 + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "스크립트 PY 관리" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -11457,7 +11457,7 @@ linux_Settings() { 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 "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi @@ -11486,55 +11486,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" - send_stats "스크립트 Py 버전을 스위치하십시오" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "포트 열기" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "모든 포트가 열려 있습니다" + echo "端口已全部开放" ;; 6) root_use - send_stats "SSH 포트를 수정하십시오" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 현재 SSH 포트 번호를 읽으십시오 + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # 사용자에게 새 SSH 포트 번호를 입력하라는 메시지 - read -e -p "새로운 SSH 포트 번호를 입력하십시오 :" new_port + # 提示用户输入新的 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 포트가 수정되었습니다" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSH 포트 수정을 종료하십시오" + send_stats "退出SSH端口修改" break else - echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "입력이 유효하지 않으므로 번호를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -11553,8 +11553,8 @@ EOF ;; 9) root_use - send_stats "새로운 사용자가 루트를 비활성화합니다" - read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11569,49 +11569,49 @@ EOF passwd -l root - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 10) root_use - send_stats "V4/V6 우선 순위를 설정하십시오" + send_stats "设置v4/v6优先级" while true; do clear - echo "V4/V6 우선 순위를 설정하십시오" + 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}우선 사항" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1. IPv4 우선 순위 2. IPv6 우선 순위 3. IPv6 수리 도구" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선호하는 네트워크를 선택하십시오." choice + 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 우선 순위로 전환되었습니다" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "IPv6 우선 순위로 전환되었습니다" - send_stats "IPv6 우선 순위로 전환되었습니다" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." - send_stats "IPv6 수정" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -11629,43 +11629,43 @@ EOF 12) root_use - send_stats "가상 메모리를 설정합니다" + send_stats "设置虚拟内存" while true; do clear - echo "가상 메모리를 설정합니다" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G 가상 메모리가 설정되었습니다" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G 가상 메모리가 설정되었습니다" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "사용자 정의 가상 메모리가 설정되었습니다" + send_stats "已设置自定义虚拟内存" ;; *) @@ -11678,8 +11678,8 @@ EOF 13) while true; do root_use - send_stats "사용자 관리" - echo "사용자 목록" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11690,62 +11690,62 @@ EOF echo "" - echo "계정 운영" + echo "账户操作" echo "------------------------" - echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5. 계정을 삭제하십시오" + echo "5. 删除账号" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 2) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 새로운 사용자에게 허가를 부여하십시오 + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 3) - read -e -p "사용자 이름을 입력하십시오 :" username - # 새로운 사용자에게 허가를 부여하십시오 + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "사용자 이름을 입력하십시오 :" username - # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "삭제하려면 사용자 이름을 입력하십시오." username - # 사용자와 홈 디렉토리를 삭제하십시오 + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -11758,50 +11758,50 @@ EOF 14) clear - send_stats "사용자 정보 생성기" - echo "임의의 사용자 이름" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "임의의 사용자 이름$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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 개의 임의의 사용자 이름을 생성합니다 + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "무작위 uuid" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "무작위 uuid$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16 비트 랜덤 비밀번호" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32 비트 랜덤 비밀번호" + 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" + echo "随机密码 $i: $password" done echo "" @@ -11809,46 +11809,46 @@ EOF 15) root_use - send_stats "시간대를 변경하십시오" + send_stats "换时区" while true; do clear - echo "시스템 시간 정보" + echo "系统时间信息" - # 현재 시스템 시간대를 얻으십시오 + # 获取当前系统时区 local timezone=$(current_timezone) - # 현재 시스템 시간을 얻으십시오 + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 시간대와 시간을 보여줍니다 - echo "현재 시스템 시간대 :$timezone" - echo "현재 시스템 시간 :$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "시간대 전환" + echo "时区切换" echo "------------------------" - echo "아시아" - echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" - echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" - echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" - echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" - echo "9. 태국 방콕에서의 시간" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "미국" - echo "21. 서양 시간 22. 동부 시간" - echo "23. 캐나다 시간 24. 멕시코 시간" - echo "25. 브라질 시간 26. 아르헨티나 시간" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31. UTC 글로벌 표준 시간" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11891,21 +11891,21 @@ EOF 18) root_use - send_stats "호스트 이름을 수정하십시오" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "새 호스트 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_hostname + 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 등과 같은 다른 시스템 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11923,11 +11923,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" - send_stats "호스트 이름이 변경되었습니다" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "종료, 호스트 이름이 변경되지 않았습니다." + echo "已退出,未更改主机名。" break fi done @@ -11935,32 +11935,32 @@ EOF 19) root_use - send_stats "시스템 업데이트 소스를 변경하십시오" + send_stats "换系统更新源" clear - echo "업데이트 소스 영역을 선택하십시오" - echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "중국 본토의 기본 소스" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "중국 본토의 교육 원" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "해외 출신" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "취소" + echo "已取消" ;; esac @@ -11968,62 +11968,62 @@ EOF ;; 20) - send_stats "타이밍 작업 관리" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "시간이 정한 작업 목록" + echo "定时任务列表" crontab -l echo "" - echo "작동하다" + echo "操作" echo "------------------------" - echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1. 월간 작업 2. 주간 작업" - echo "3. 일일 작업 4. 시간당 작업" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "선택을 입력하십시오 :" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "작업을 수행하려면 매월 어느 날을 선택합니까? (1-30) :" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "시간이 정한 작업을 추가하십시오" + send_stats "添加定时任务" ;; 2) - read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "타이밍 작업을 삭제하십시오" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "타이밍 작업 편집" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -12035,32 +12035,32 @@ EOF 21) root_use - send_stats "지역 호스트 구문 분석" + send_stats "本地host解析" while true; do clear - echo "기본 호스트 구문 분석 목록" - echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "작동하다" + echo "操作" echo "------------------------" - echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "로컬 호스트 구문 분석이 추가되었습니다" + send_stats "本地host解析新增" ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "로컬 호스트 구문 분석 및 삭제" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -12071,7 +12071,7 @@ EOF 22) root_use - send_stats "SSH 방어" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12083,20 +12083,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH 방어 프로그램$check_docker" - echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" - echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 安装防御程序" echo "------------------------" - echo "2. SSH 차단 레코드보기" - echo "3. 실시간 로그 모니터링" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -12119,7 +12119,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -12132,47 +12132,47 @@ EOF 23) root_use - send_stats "현재 제한 종료 기능" + send_stats "限流关机功能" while true; do clear - echo "현재 제한 종료 기능" - echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # limiting_shut_down.sh 파일이 있는지 확인하십시오 + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gb의 값을 얻으십시오 + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 새 가상 메모리 크기를 입력하십시오 - echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." - read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -12185,15 +12185,15 @@ EOF (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 "전류 제한 종료가 설정되었습니다" + 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 "전류 제한 종료 기능이 꺼졌습니다" + echo "已关闭限流关机功能" ;; *) break @@ -12206,40 +12206,40 @@ EOF 24) root_use - send_stats "개인 키 로그인" + send_stats "私钥登录" while true; do clear - echo "루트 비공개 키 로그인 모드" - echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "새로운 키를 생성하십시오" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "기존 공개 키를 가져옵니다" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "로컬 비밀 키를보십시오" + send_stats "查看本机密钥" echo "------------------------" - echo "공개 키 정보" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "개인 키 정보" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12255,18 +12255,18 @@ EOF 25) root_use - send_stats "전보 경고" - echo "TG-BOT 모니터링 및 조기 경고 기능" - echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." - echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" - read -e -p "계속할거야? (Y/N) :" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "전보 경고가 활성화되었습니다" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -12288,7 +12288,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # ~/.profile 파일에 추가하십시오 + # 添加到 ~/.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 @@ -12299,21 +12299,21 @@ EOF source ~/.profile clear - echo "TG-BOT 조기 경고 시스템이 시작되었습니다" - echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "SSH에서 고위험 취약점을 수정하십시오" + 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 @@ -12357,7 +12357,7 @@ EOF ;; 37) clear - send_stats "명령 줄 기록" + 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; } @@ -12380,61 +12380,61 @@ EOF 41) clear - send_stats "게시판" - echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "원 스톱 튜닝" - echo "원 스톱 시스템 최적화" + 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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "원 스톱 튜닝 시작" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 시스템 정크 파일 정리" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12451,25 +12451,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소를 자동으로 최적화합니다${gl_huang}${gl_bai}" + 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 -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. Linux 시스템의 커널 매개 변수 최적화" - echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -12477,7 +12477,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하십시오" + send_stats "重启系统" server_reboot ;; 100) @@ -12493,32 +12493,32 @@ EOF local status_message="无法确定的状态" fi - echo "개인 정보 및 보안" - echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." - echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "현재 상태 :$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1. 수집을 켭니다" - echo "2. 컬렉션을 닫습니다" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 "개인 정보 보호 및 보안 컬렉션이 활성화되었습니다" + 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 "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -12534,11 +12534,11 @@ EOF 102) clear - send_stats "기술 라이온 스크립트를 제거하십시오" - echo "기술 라이온 스크립트를 제거하십시오" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." - read -e -p "계속할거야? (Y/N) :" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -12546,16 +12546,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "대본은 제거되었습니다." + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -12565,7 +12565,7 @@ EOF ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -12583,187 +12583,187 @@ EOF linux_file() { root_use - send_stats "파일 관리자" + send_stats "文件管理器" while true; do clear - echo "파일 관리자" + echo "文件管理器" echo "------------------------" - echo "현재 경로" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" - echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" - echo "15. 파일을 삭제하십시오" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" - echo "25. 파일을 다른 서버로 전달합니다" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "디렉토리 이름을 입력하십시오 :" dirname - cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" - send_stats "디렉토리로 이동하십시오" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "작성하려면 디렉토리 이름을 입력하십시오." dirname - mkdir -p "$dirname" && echo "디렉토리가 생성되었습니다" || echo "창조가 실패했습니다" - send_stats "디렉토리를 만듭니다" + 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 "디렉토리 권한을 수정하십시오" + 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 "디렉토리의 이름을 바꿉니다" + 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 "디렉토리 삭제" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "이전 메뉴 디렉토리로 돌아갑니다" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "작성하려면 파일 이름을 입력하십시오." filename - touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" - send_stats "파일을 만듭니다" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "편집 할 파일 이름을 입력하십시오." filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "파일 편집" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "파일 이름을 입력하십시오 :" filename - read -e -p "권한을 입력하십시오 (예 : 755) :" perm - chmod "$perm" "$filename" && echo "권한이 수정되었습니다" || echo "수정이 실패했습니다" - send_stats "파일 권한을 수정합니다" + 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 "파일의 이름을 바꿉니다" + 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 "파일 삭제" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" - send_stats "압축 파일/디렉토리" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" - send_stats "압축 파일/디렉토리 해제" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." - send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" - send_stats "파일 또는 디렉토리를 이동하십시오" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." - send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 - cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사하십시오" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "오류 : 파일이 존재하지 않습니다." - send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "오류 : 원격 서버 비밀번호를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "로그인 포트 (기본값 22)를 입력하십시오 :" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "스크립트는 최신입니다$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13061,15 +13061,15 @@ while true; do (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 "자동 스크립트 업데이트를 켜십시오" + 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 "스크립트 자동 업데이트를 닫습니다" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -13091,41 +13091,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "기술 라이온 스크립트 도구 상자 v$sh_v" -echo -e "명령 줄 입력${gl_huang}k${gl_kjlan}스크립트를 신속하게 시작하십시오${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" +echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu 서버 오프닝 스크립트" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "선택을 입력하십시오 :" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "시스템 업데이트" ; linux_update ;; - 3) clear ; send_stats "시스템 정리" ; linux_clean ;; + 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 + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -13136,13 +13136,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "잘못된 입력!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -13150,68 +13150,68 @@ done k_info() { -send_stats "K 명령 참조 사용 사례" +send_stats "k命令参考用例" echo "-------------------" -echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "다음은 K 명령 참조 유스 케이스입니다." -echo "스크립트 시작 k" -echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" -echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" -echo "업데이트 시스템 K 업데이트 | K 업데이트" -echo "깨끗한 시스템 쓰레기 K Clean | K 청소" -echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" -echo "BBR3 제어판 K BBR3 | K bbrv3" -echo "커널 튜닝 패널 K nhyh | K 커널 최적화" -echo "가상 메모리 K 스왑 2048을 설정하십시오" -echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" -echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" -echo "시스템 백업 기능 K 백업 | K bf | K 백업" -echo "SSH 원격 연결 도구 K SSH | K 원격 연결" -echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" -echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" -echo "인트라넷 침투 (서버 측) K frps" -echo "인트라넷 침투 (클라이언트) K frpc" -echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" -echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" -echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" -echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" -echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" -echo "도메인 이름 인증서 응용 프로그램 K SSL" -echo "도메인 이름 인증서 만료 쿼리 K SSL PS" -echo "도커 환경 설치 K 도커 설치 | K 도커 설치" -echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" -echo "Docker Image Management K Docker img | K Docker Image" -echo "LDNMP 사이트 관리 K 웹" -echo "LDNMP 캐시 정리 K 웹 캐시" -echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" -echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." -echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" -echo "방화벽 패널 K FHQ | K 방화벽" -echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" -echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" -echo "앱 시장 관리 K 앱" -echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # 매개 변수가없는 경우 대화식 로직을 실행하십시오 + # 如果没有参数,运行交互式逻辑 kejilion_sh else - # 매개 변수가있는 경우 해당 함수를 실행하십시오 + # 如果有参数,执行相应函数 case $1 in install|add|安装) shift - send_stats "소프트웨어를 설치하십시오" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "소프트웨어를 제거하십시오" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -13245,7 +13245,7 @@ else rsync_run) shift - send_stats "시간이 정한 RSYNC 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -13264,7 +13264,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13277,13 +13277,13 @@ else swap) shift - send_stats "가상 메모리를 신속하게 설정했습니다" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정하십시오" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -13331,42 +13331,42 @@ else status|状态) shift - send_stats "소프트웨어 상태보기" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "소프트웨어 스타트 업" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "소프트웨어 일시 정지" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "소프트웨어 재시작" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "소프트웨어 부츠" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "인증서 상태를 확인하십시오" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "인증서를 신속하게 신청하십시오" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "인증서를 신속하게 신청하십시오" + send_stats "快速申请证书" else k_info fi @@ -13376,15 +13376,15 @@ else shift case $1 in install|安装) - send_stats "Docker를 신속하게 설치하십시오" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 미러 관리" + send_stats "快捷镜像管理" docker_image ;; *) @@ -13411,7 +13411,7 @@ else app) shift - send_stats "$@ 적용" + send_stats "应用$@" linux_panel "$@" ;; From c8a3f37ace60f614d07812240e452c615ddfebe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 11:37:03 +0800 Subject: [PATCH 066/553] Update kejilion.sh --- cn/kejilion.sh | 71 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 37a29051d..698bd8d1d 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.8" +sh_v="4.0.9" gl_hui='\e[37m' @@ -8535,6 +8535,8 @@ while true; do echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${color88}还原全部应用数据" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice @@ -11135,6 +11137,73 @@ while true; do ;; + b) + clear + send_stats "全部应用备份" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "文件已传送至远程服务器/根目录。" + else + echo "未找到要传送的文件。" + fi + break + ;; + *) + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "全部应用还原" + echo "可用的应用备份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # 如果用户没有输入文件名,使用最新的压缩包 + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + else + echo "没有找到压缩包。" + fi + + ;; 0) kejilion From c1e9e879da00bbb0c189c5305cfa4fc2c6030281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 11:37:38 +0800 Subject: [PATCH 067/553] Update kejilion.sh --- kejilion.sh | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 6a4216cc9..024294583 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.8" +sh_v="4.0.9" gl_hui='\e[37m' @@ -8535,6 +8535,8 @@ while true; do echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${color88}还原全部应用数据" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice @@ -11135,6 +11137,73 @@ while true; do ;; + b) + clear + send_stats "全部应用备份" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "文件已传送至远程服务器/根目录。" + else + echo "未找到要传送的文件。" + fi + break + ;; + *) + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "全部应用还原" + echo "可用的应用备份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # 如果用户没有输入文件名,使用最新的压缩包 + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + else + echo "没有找到压缩包。" + fi + + ;; 0) kejilion From e6a5c8d91d6aa5135af742c4ddf564e6a35651ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 11:41:41 +0800 Subject: [PATCH 068/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ec42c8f37..7e025c3d9 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1262,8 +1262,12 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增Owncast自托管直播平台的安装及使用, ------------------------ 2025-08-14 v4.0.8 -应用市场增加快速启动方式 命令行输入 k app 即可启动应用市场 -应用市场增加应用编号快速启动 k app 13 就是13号应用启动,也可以输入应用名称启动 k app dpanel -支持远程命令安装和管理应用,bash <(curl -sL kejilion.sh) app moontv | bash <(curl -sL kejilion.sh) app 1panel +应用市场增加快速启动方式 命令行输入 k app 即可启动应用市场。 +应用市场增加应用编号快速启动 k app 13 就是13号应用启动,也可以输入应用名称启动 k app dpanel。 +支持远程命令安装和管理应用,bash <(curl -sL kejilion.sh) app moontv | bash <(curl -sL kejilion.sh) app 1panel。 +------------------------ +2025-08-18 v4.0.9 +应用市场增加全部应用数据备份和还原的功能。支持迁移到其他服务器的操作。 +-全部的应用备份还原不包含宝塔1panel等建站面板的数据。 ------------------------ From 73ad6520d60e3cabb7dabe5685528461d9f84640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 16:36:09 +0800 Subject: [PATCH 069/553] Update kejilion.sh --- cn/kejilion.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 698bd8d1d..9666c3c24 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10920,10 +10920,12 @@ while true; do docker_rum() { + read -e -p "设置${docker_name}的登录密钥(字母和数字组合): " app_passwd + mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ + -e AUTH_KEY=sk-${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest @@ -10931,7 +10933,7 @@ while true; do local docker_describe="高性能AI接口透明代理服务" local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_use="" local docker_passwd="" local app_size="1" docker_app From 756a441c6ec636eb33846e20c6dba53c6c4597b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 16:37:09 +0800 Subject: [PATCH 070/553] Update kejilion.sh --- kejilion.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 024294583..185c38657 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10920,10 +10920,12 @@ while true; do docker_rum() { + read -e -p "设置${docker_name}的登录密钥(字母和数字组合): " app_passwd + mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ + -e AUTH_KEY=sk-${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest @@ -10931,7 +10933,7 @@ while true; do local docker_describe="高性能AI接口透明代理服务" local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_use="" local docker_passwd="" local app_size="1" docker_app From 06c804d2e4028c0d210f0073069898601584f49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 16:40:06 +0800 Subject: [PATCH 071/553] Update kejilion.sh --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 185c38657..b2343aedb 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10920,12 +10920,12 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录密钥(字母和数字组合): " app_passwd + read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-${app_passwd} \ + -e AUTH_KEY=${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest From ecbee7dd45e3c76cf7dac185a87f5efa7f955969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 16:40:48 +0800 Subject: [PATCH 072/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9666c3c24..0afa72fff 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10920,12 +10920,12 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录密钥(字母和数字组合): " app_passwd + read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-${app_passwd} \ + -e AUTH_KEY=${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest From abce72cd8aa52ab79c092373d8ca4921ebedeea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 18 Aug 2025 16:43:42 +0800 Subject: [PATCH 073/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 7e025c3d9..c12724914 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1269,5 +1269,6 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 2025-08-18 v4.0.9 应用市场增加全部应用数据备份和还原的功能。支持迁移到其他服务器的操作。 -全部的应用备份还原不包含宝塔1panel等建站面板的数据。 +应用市场gpt-load安装时修改成自定义登录密钥。 ------------------------ From c75872209af20f601a8941c558c24c0c9524dc07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 19 Aug 2025 16:19:56 +0800 Subject: [PATCH 074/553] Update kejilion.sh --- cn/kejilion.sh | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0afa72fff..f3d69febb 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8534,6 +8534,7 @@ while true; do echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${color88}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11139,6 +11140,94 @@ while true; do ;; + + + 89|file-code-box) + + local app_id="89" + local docker_name="file-code-box" + local docker_img="lanol/filecodebox:latest" + local docker_port=8089 + + docker_rum() { + + docker run -d \ + --name file-code-box \ + -p ${docker_port}:12345 \ + -v /home/docker/file-code-box/data:/app/data \ + --restart unless-stopped \ + lanol/filecodebox:latest + + } + + local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" + local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + + 90|matrix) + + local app_id="90" + local docker_name="matrix" + local docker_img="matrixdotorg/synapse:latest" + local docker_port=8090 + + docker_rum() { + + add_yuming + + if [ ! -d /home/docker/matrix/data ]; then + docker run -it --rm \ + -v /home/docker/matrix/data:/data \ + -e SYNAPSE_SERVER_NAME=${yuming} \ + -e SYNAPSE_REPORT_STATS=yes \ + --name matrix \ + matrixdotorg/synapse:latest generate + fi + + docker run -d \ + --name matrix \ + -v /home/docker/matrix/data:/data \ + -p ${docker_port}:8008 \ + --restart unless-stopped \ + matrixdotorg/synapse:latest + + echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" + docker exec -it matrix register_new_matrix_user \ + http://localhost:8008 \ + -c /data/homeserver.yaml + + sed -i '/^enable_registration:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration: true' /home/docker/matrix/data/homeserver.yaml + sed -i '/^enable_registration_without_verification:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration_without_verification: true' /home/docker/matrix/data/homeserver.yaml + + docker restart matrix + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + local docker_describe="Matrix是一个去中心化的聊天协议" + local docker_url="官网介绍: https://matrix.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + b) clear send_stats "全部应用备份" From 056791d6f2eda45d54ccec71997b2c285652fc3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 19 Aug 2025 16:20:46 +0800 Subject: [PATCH 075/553] Update kejilion.sh --- kejilion.sh | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index b2343aedb..7a0d51a2a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8534,6 +8534,7 @@ while true; do echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${color88}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11139,6 +11140,94 @@ while true; do ;; + + + 89|file-code-box) + + local app_id="89" + local docker_name="file-code-box" + local docker_img="lanol/filecodebox:latest" + local docker_port=8089 + + docker_rum() { + + docker run -d \ + --name file-code-box \ + -p ${docker_port}:12345 \ + -v /home/docker/file-code-box/data:/app/data \ + --restart unless-stopped \ + lanol/filecodebox:latest + + } + + local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" + local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + + 90|matrix) + + local app_id="90" + local docker_name="matrix" + local docker_img="matrixdotorg/synapse:latest" + local docker_port=8090 + + docker_rum() { + + add_yuming + + if [ ! -d /home/docker/matrix/data ]; then + docker run -it --rm \ + -v /home/docker/matrix/data:/data \ + -e SYNAPSE_SERVER_NAME=${yuming} \ + -e SYNAPSE_REPORT_STATS=yes \ + --name matrix \ + matrixdotorg/synapse:latest generate + fi + + docker run -d \ + --name matrix \ + -v /home/docker/matrix/data:/data \ + -p ${docker_port}:8008 \ + --restart unless-stopped \ + matrixdotorg/synapse:latest + + echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" + docker exec -it matrix register_new_matrix_user \ + http://localhost:8008 \ + -c /data/homeserver.yaml + + sed -i '/^enable_registration:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration: true' /home/docker/matrix/data/homeserver.yaml + sed -i '/^enable_registration_without_verification:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration_without_verification: true' /home/docker/matrix/data/homeserver.yaml + + docker restart matrix + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + local docker_describe="Matrix是一个去中心化的聊天协议" + local docker_url="官网介绍: https://matrix.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + b) clear send_stats "全部应用备份" From a46cd2638506d95b5edf111a66170099c9806b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 19 Aug 2025 16:23:03 +0800 Subject: [PATCH 076/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index c12724914..771ee19e2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1270,5 +1270,7 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场增加全部应用数据备份和还原的功能。支持迁移到其他服务器的操作。 -全部的应用备份还原不包含宝塔1panel等建站面板的数据。 应用市场gpt-load安装时修改成自定义登录密钥。 +应用市场新增FileCodeBox文件快递的安装及使用, +应用市场新增matrix去中心化聊天协议安装及使用, ------------------------ From 94820a6e6ce6c3ab385175acb45e0c9ef5a99506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:53:21 +0800 Subject: [PATCH 077/553] Update kejilion.sh --- cn/kejilion.sh | 55 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f3d69febb..3f0050bdc 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10610,32 +10610,53 @@ while true; do ;; + 74|moontv) local app_id="74" - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - docker_rum() { + local app_name="moontv私有影视" + local app_text="免费在线视频搜索与观看平台" + local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local docker_name="moontv-core" + local docker_port="8074" + local app_size="2" - read -e -p "设置MoonTV的登录密码: " app_passwd + docker_app_install() { + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password + + mkdir -p /home/docker/moontv + mkdir -p /home/docker/moontv/config + mkdir -p /home/docker/moontv/data + cd /home/docker/moontv - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml + cd /home/docker/moontv/ + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + + docker_app_update() { + cd /home/docker/moontv/ && docker compose down --rmi all + cd /home/docker/moontv/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/moontv/ && docker compose down --rmi all + rm -rf /home/docker/moontv + echo "应用已卸载" + } + + docker_app_plus ;; From bd18ecbf7c774657aa0bdbca0ca6a6a0630b0bcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:54:54 +0800 Subject: [PATCH 078/553] Update kejilion.sh --- kejilion.sh | 55 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 7a0d51a2a..be3f594b3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10610,32 +10610,53 @@ while true; do ;; + 74|moontv) local app_id="74" - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - docker_rum() { + local app_name="moontv私有影视" + local app_text="免费在线视频搜索与观看平台" + local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local docker_name="moontv-core" + local docker_port="8074" + local app_size="2" - read -e -p "设置MoonTV的登录密码: " app_passwd + docker_app_install() { + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password + + mkdir -p /home/docker/moontv + mkdir -p /home/docker/moontv/config + mkdir -p /home/docker/moontv/data + cd /home/docker/moontv - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml + cd /home/docker/moontv/ + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + + docker_app_update() { + cd /home/docker/moontv/ && docker compose down --rmi all + cd /home/docker/moontv/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/moontv/ && docker compose down --rmi all + rm -rf /home/docker/moontv + echo "应用已卸载" + } + + docker_app_plus ;; From 6522d67af33d5a4d936226c33a6edf3a85d1d591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:56:53 +0800 Subject: [PATCH 079/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 771ee19e2..6d428e9ab 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1270,7 +1270,8 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场增加全部应用数据备份和还原的功能。支持迁移到其他服务器的操作。 -全部的应用备份还原不包含宝塔1panel等建站面板的数据。 应用市场gpt-load安装时修改成自定义登录密钥。 -应用市场新增FileCodeBox文件快递的安装及使用, -应用市场新增matrix去中心化聊天协议安装及使用, +应用市场新增FileCodeBox文件快递的安装及使用。 +应用市场新增matrix去中心化聊天协议安装及使用。 +应用市场修复moontv采用全新架构安装及使用。 ------------------------ From 5f4783833685fb0e6abd3037daed36fb092ade42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:59:28 +0800 Subject: [PATCH 080/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 6d428e9ab..0cff0050a 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1272,6 +1272,6 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场gpt-load安装时修改成自定义登录密钥。 应用市场新增FileCodeBox文件快递的安装及使用。 应用市场新增matrix去中心化聊天协议安装及使用。 -应用市场修复moontv采用全新架构安装及使用。 +应用市场重构moontv,采用全新架构安装及使用。 ------------------------ From f6c7e121f4d1acbd20237a95ed29933cc48af311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 14:02:38 +0800 Subject: [PATCH 081/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 3f0050bdc..339018c55 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="CN" +canshu="default" permission_granted="false" ENABLE_STATS="true" @@ -8536,7 +8536,7 @@ while true; do echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${color88}还原全部应用数据" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" From 80631d408da802975ff85b755d4ac23c9ea81c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 14:03:09 +0800 Subject: [PATCH 082/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 339018c55..e47269aa3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="default" +canshu="CN" permission_granted="false" ENABLE_STATS="true" From f54859730ed696ca727f721d81d26e57d29c232a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:09:02 +0800 Subject: [PATCH 083/553] Update kejilion.sh --- cn/kejilion.sh | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e47269aa3..bfe6ec681 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8690,7 +8690,8 @@ while true; do docker_rum() { - + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -8699,8 +8700,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ @@ -8714,8 +8715,8 @@ while true; do local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app @@ -9386,7 +9387,8 @@ while true; do docker_rum() { - + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -9395,8 +9397,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ @@ -9407,7 +9409,6 @@ while true; do --restart unless-stopped \ lscr.io/linuxserver/webtop:latest - } @@ -10726,8 +10727,8 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd docker run -d \ --name xunlei \ From e14a3edbc9a2f7454e5bf234f8eda397ca87e1ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:10:10 +0800 Subject: [PATCH 084/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index bfe6ec681..10b760959 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9414,8 +9414,8 @@ while true; do local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app ;; From 479804bc485e9efebb1a83505a29cd4e46d469e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:10:48 +0800 Subject: [PATCH 085/553] Update kejilion.sh --- kejilion.sh | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index be3f594b3..cd18cc7b9 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8536,7 +8536,7 @@ while true; do echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${color88}还原全部应用数据" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8690,7 +8690,8 @@ while true; do docker_rum() { - + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -8699,8 +8700,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ @@ -8714,8 +8715,8 @@ while true; do local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app @@ -9386,7 +9387,8 @@ while true; do docker_rum() { - + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -9395,8 +9397,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ @@ -9407,14 +9409,13 @@ while true; do --restart unless-stopped \ lscr.io/linuxserver/webtop:latest - } local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app ;; @@ -10726,8 +10727,8 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd docker run -d \ --name xunlei \ From 4c28aea09651ad0ff54112e2ccbb6f5ffa9f8b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:12:36 +0800 Subject: [PATCH 086/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 0cff0050a..95851a40c 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1273,5 +1273,6 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增FileCodeBox文件快递的安装及使用。 应用市场新增matrix去中心化聊天协议安装及使用。 应用市场重构moontv,采用全新架构安装及使用。 +应用市场Ubuntu等远程桌面程序允许自定义用户名和密码进行安装及使用。 ------------------------ From cdb73ad745b21196d20d314b225f1c80fdd88ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 21 Aug 2025 12:24:57 +0800 Subject: [PATCH 087/553] Update kejilion.sh --- cn/kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 10b760959..eb5f5db4c 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10626,6 +10626,8 @@ while true; do docker_app_install() { read -e -p "设置登录用户名: " admin read -e -p "设置登录用户密码: " admin_password + read -e -p "输入授权码: " shouquanma + mkdir -p /home/docker/moontv mkdir -p /home/docker/moontv/config @@ -10636,7 +10638,7 @@ while true; do sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - + sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear From b4a3c9a1607cd85fc2b18a6a55e69661abe29cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 21 Aug 2025 12:26:38 +0800 Subject: [PATCH 088/553] Update kejilion.sh --- kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index cd18cc7b9..e52a9539e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10626,6 +10626,8 @@ while true; do docker_app_install() { read -e -p "设置登录用户名: " admin read -e -p "设置登录用户密码: " admin_password + read -e -p "输入授权码: " shouquanma + mkdir -p /home/docker/moontv mkdir -p /home/docker/moontv/config @@ -10636,7 +10638,7 @@ while true; do sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - + sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear From ba842d73dd214426eaf623ead6c52099ef9ca7d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:31:52 +0800 Subject: [PATCH 089/553] Update kejilion.sh --- cn/kejilion.sh | 82 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index eb5f5db4c..4a8bb24c6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.9" +sh_v="4.0.10" gl_hui='\e[37m' @@ -8536,6 +8536,8 @@ while true; do echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -11251,6 +11253,84 @@ while true; do + 91|gitea) + + local app_id="91" + + local app_name="gitea私有代码仓库" + local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" + local app_url="视频介绍: https://github.com/go-gitea/gitea" + local docker_name="gitea" + local docker_port="8091" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/gitea + mkdir -p /home/docker/gitea/gitea + mkdir -p /home/docker/gitea/data + mkdir -p /home/docker/gitea/postgres + cd /home/docker/gitea + + curl -o /home/docker/gitea/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/gitea-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/gitea/docker-compose.yml + cd /home/docker/gitea/ + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/gitea/ && docker compose down --rmi all + cd /home/docker/gitea/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/gitea/ && docker compose down --rmi all + rm -rf /home/docker/gitea + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + 92|filebrowser) + + local app_id="92" + local docker_name="filebrowser" + local docker_img="hurlenko/filebrowser" + local docker_port=8092 + + docker_rum() { + + docker run -d \ + --name filebrowser \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v /home/docker/filebrowser/data:/data \ + -v /home/docker/filebrowser/config:/config \ + -e FB_BASEURL=/filebrowser \ + hurlenko/filebrowser + + } + + local docker_describe="是一个基于Web的文件管理器" + local docker_url="官网介绍: https://filebrowser.org/" + local docker_use="docker logs filebrowser" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear From a550ee3be7664767b4b0b490c230020fdb39fa64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:32:22 +0800 Subject: [PATCH 090/553] Update kejilion.sh --- kejilion.sh | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index e52a9539e..ff076970f 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.9" +sh_v="4.0.10" gl_hui='\e[37m' @@ -8536,6 +8536,8 @@ while true; do echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -11251,6 +11253,84 @@ while true; do + 91|gitea) + + local app_id="91" + + local app_name="gitea私有代码仓库" + local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" + local app_url="视频介绍: https://github.com/go-gitea/gitea" + local docker_name="gitea" + local docker_port="8091" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/gitea + mkdir -p /home/docker/gitea/gitea + mkdir -p /home/docker/gitea/data + mkdir -p /home/docker/gitea/postgres + cd /home/docker/gitea + + curl -o /home/docker/gitea/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/gitea-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/gitea/docker-compose.yml + cd /home/docker/gitea/ + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/gitea/ && docker compose down --rmi all + cd /home/docker/gitea/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/gitea/ && docker compose down --rmi all + rm -rf /home/docker/gitea + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + 92|filebrowser) + + local app_id="92" + local docker_name="filebrowser" + local docker_img="hurlenko/filebrowser" + local docker_port=8092 + + docker_rum() { + + docker run -d \ + --name filebrowser \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v /home/docker/filebrowser/data:/data \ + -v /home/docker/filebrowser/config:/config \ + -e FB_BASEURL=/filebrowser \ + hurlenko/filebrowser + + } + + local docker_describe="是一个基于Web的文件管理器" + local docker_url="官网介绍: https://filebrowser.org/" + local docker_use="docker logs filebrowser" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear From a472c0f133104572f44ce6ddea557c90a9a040a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:34:21 +0800 Subject: [PATCH 091/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 95851a40c..097b5ba1d 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1275,4 +1275,7 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场重构moontv,采用全新架构安装及使用。 应用市场Ubuntu等远程桌面程序允许自定义用户名和密码进行安装及使用。 ------------------------ - +2025-08-21 v4.0.10 +应用市场新增gitea私有代码仓库的安装及使用, +应用市场新增filebrowser文件管理器的安装及使用, +------------------------ From 5227c710788de247e218cd600d76e1f0e68a6136 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 21 Aug 2025 11:25:23 +0000 Subject: [PATCH 092/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-21=2011:25:23?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 342 +++- jp/kejilion.sh | 4746 +++++++++++++++++++++++++----------------------- kr/kejilion.sh | 4690 +++++++++++++++++++++++++---------------------- tw/kejilion.sh | 334 +++- 4 files changed, 5584 insertions(+), 4528 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index cd73886fb..fef2761c3 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.8" +sh_v="4.0.10" gl_hui='\e[37m' @@ -2121,7 +2121,7 @@ web_security() { 22) send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When it reaches the detection of a high load, the shield will be automatically turned on, and the low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" @@ -7924,7 +7924,7 @@ linux_ldnmp() { ;; 2) echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter to skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8497,7 +8497,7 @@ while true; do echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop Remote Desktop Web Edition${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed Speed Test Tool" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed ​​Speed ​​Test Tool" echo -e "${gl_kjlan}29. ${color29}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF tool collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" @@ -8534,6 +8534,11 @@ while true; do echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tools" echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" echo -e "${gl_kjlan}87. ${color87}SyncTV movie watching artifact${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser File Manager" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8687,7 +8692,8 @@ while true; do docker_rum() { - + read -e -p "Set login username:" admin + read -e -p "Set the login user password:" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -8696,8 +8702,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ @@ -8711,8 +8717,8 @@ while true; do local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app @@ -9383,7 +9389,8 @@ while true; do docker_rum() { - + read -e -p "Set login username:" admin + read -e -p "Set the login user password:" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -9392,8 +9399,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ @@ -9404,14 +9411,13 @@ while true; do --restart unless-stopped \ lscr.io/linuxserver/webtop:latest - } local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app ;; @@ -10607,32 +10613,55 @@ while true; do ;; + 74|moontv) local app_id="74" - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - docker_rum() { + local app_name="moontv私有影视" + local app_text="免费在线视频搜索与观看平台" + local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local docker_name="moontv-core" + local docker_port="8074" + local app_size="2" + + docker_app_install() { + read -e -p "Set login username:" admin + read -e -p "Set the login user password:" admin_password + read -e -p "Enter the authorization code:" shouquanma + + + mkdir -p /home/docker/moontv + mkdir -p /home/docker/moontv/config + mkdir -p /home/docker/moontv/data + cd /home/docker/moontv + + curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + cd /home/docker/moontv/ + docker compose up -d + clear + echo "Installed" + check_docker_app_ip + } - read -e -p "Set the MoonTV login password:" app_passwd - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + docker_app_update() { + cd /home/docker/moontv/ && docker compose down --rmi all + cd /home/docker/moontv/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/moontv/ && docker compose down --rmi all + rm -rf /home/docker/moontv + echo "The app has been uninstalled" } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker_app_plus ;; @@ -10702,8 +10731,8 @@ while true; do docker_rum() { - read -e -p "set up${docker_name}Login username:" app_use - read -e -p "set up${docker_name}Login password:" app_passwd + read -e -p "Set login username:" app_use + read -e -p "Set login password:" app_passwd docker run -d \ --name xunlei \ @@ -10918,10 +10947,12 @@ while true; do docker_rum() { + read -e -p "set up${docker_name}The login key (sk-staring letters and numbers combinations) such as: sk-159kejilionyyds163:" app_passwd + mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ + -e AUTH_KEY=${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest @@ -10929,7 +10960,7 @@ while true; do local docker_describe="高性能AI接口透明代理服务" local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_use="" local docker_passwd="" local app_size="1" docker_app @@ -11136,6 +11167,239 @@ while true; do ;; + + 89|file-code-box) + + local app_id="89" + local docker_name="file-code-box" + local docker_img="lanol/filecodebox:latest" + local docker_port=8089 + + docker_rum() { + + docker run -d \ + --name file-code-box \ + -p ${docker_port}:12345 \ + -v /home/docker/file-code-box/data:/app/data \ + --restart unless-stopped \ + lanol/filecodebox:latest + + } + + local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" + local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + + 90|matrix) + + local app_id="90" + local docker_name="matrix" + local docker_img="matrixdotorg/synapse:latest" + local docker_port=8090 + + docker_rum() { + + add_yuming + + if [ ! -d /home/docker/matrix/data ]; then + docker run -it --rm \ + -v /home/docker/matrix/data:/data \ + -e SYNAPSE_SERVER_NAME=${yuming} \ + -e SYNAPSE_REPORT_STATS=yes \ + --name matrix \ + matrixdotorg/synapse:latest generate + fi + + docker run -d \ + --name matrix \ + -v /home/docker/matrix/data:/data \ + -p ${docker_port}:8008 \ + --restart unless-stopped \ + matrixdotorg/synapse:latest + + echo "Create an initial user or administrator. Please set the following username and password and whether you are an administrator." + docker exec -it matrix register_new_matrix_user \ + http://localhost:8008 \ + -c /data/homeserver.yaml + + sed -i '/^enable_registration:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration: true' /home/docker/matrix/data/homeserver.yaml + sed -i '/^enable_registration_without_verification:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration_without_verification: true' /home/docker/matrix/data/homeserver.yaml + + docker restart matrix + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + local docker_describe="Matrix是一个去中心化的聊天协议" + local docker_url="官网介绍: https://matrix.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 91|gitea) + + local app_id="91" + + local app_name="gitea私有代码仓库" + local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" + local app_url="视频介绍: https://github.com/go-gitea/gitea" + local docker_name="gitea" + local docker_port="8091" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/gitea + mkdir -p /home/docker/gitea/gitea + mkdir -p /home/docker/gitea/data + mkdir -p /home/docker/gitea/postgres + cd /home/docker/gitea + + curl -o /home/docker/gitea/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/gitea-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/gitea/docker-compose.yml + cd /home/docker/gitea/ + docker compose up -d + clear + echo "Installed" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/gitea/ && docker compose down --rmi all + cd /home/docker/gitea/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/gitea/ && docker compose down --rmi all + rm -rf /home/docker/gitea + echo "The app has been uninstalled" + } + + docker_app_plus + + ;; + + + + + 92|filebrowser) + + local app_id="92" + local docker_name="filebrowser" + local docker_img="hurlenko/filebrowser" + local docker_port=8092 + + docker_rum() { + + docker run -d \ + --name filebrowser \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v /home/docker/filebrowser/data:/data \ + -v /home/docker/filebrowser/config:/config \ + -e FB_BASEURL=/filebrowser \ + hurlenko/filebrowser + + } + + local docker_describe="是一个基于Web的文件管理器" + local docker_url="官网介绍: https://filebrowser.org/" + local docker_use="docker logs filebrowser" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + b) + clear + send_stats "All applications backup" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}Backing up$backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + while true; do + clear + echo "The backup file has been created: /$backup_filename" + read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice + case "$choice" in + [Yy]) + read -e -p "Please enter the remote server IP:" remote_ip + if [ -z "$remote_ip" ]; then + echo "Error: Please enter the remote server IP." + continue + fi + local latest_tar=$(ls -t /app*.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:/" + echo "The file has been transferred to the remote server/root directory." + else + echo "The file to be transferred was not found." + fi + break + ;; + *) + echo "Note: Currently, the backup only includes docker projects, and does not include data backup of website building panels such as Pagoda and 1panel." + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "All applications restore" + echo "Available app backups" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # If the user does not enter the file name, use the latest compressed package + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "The application data has been restored. Please manually enter the specified application menu and update the application to restore the application." + else + echo "No compression package was found." + fi + + ;; + 0) kejilion ;; @@ -11832,7 +12096,7 @@ EOF echo "3. Tokyo time in Japan 4. Seoul time in South Korea" echo "5. Singapore time 6. Kolkata time in India" echo "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Time in Bangkok, Thailand" + echo "9. Bangkok Time, Thailand" echo "------------------------" echo "Europe" echo "11. London time in the UK 12. Paris time in France" @@ -12058,7 +12322,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -12495,7 +12759,7 @@ EOF echo "Privacy and Security" echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index b449d9342..acf73106d 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.8" +sh_v="4.0.10" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# 定义一个函数来执行命令 +# コマンドを実行する関数を定義します run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 -# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 +# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! +# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 +# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用户同意条款 +# ユーザーに条件に同意するように促します UserLicenseAgreement() { clear - echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" - echo "首次使用脚本,请先阅读并同意用户许可协议。" - echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" + echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" + echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上条款?(y/n): " user_input + read -r -p "上記の条件に同意しますか? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "许可同意" + 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 "许可拒绝" + send_stats "許可の拒否" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安装 $package...${gl_bai}" + echo -e "${gl_huang}インストール$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "当前可用空间: $((available_space_mb/1024))G" - echo "最小需求空间: ${required_gb}G" - echo "无法继续安装,请清理磁盘空间后重试。" - send_stats "磁盘空间不足" + echo -e "${gl_huang}ヒント:${gl_bai}ディスクスペースが不十分です!" + echo "現在利用可能なスペース:$((available_space_mb/1024))g" + echo "最小需要スペース:${required_gb}G" + echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" + send_stats "ディスクスペースが不十分です" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸载 $package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return 1 fi done } -# 通用 systemctl 函数,适用于各种发行版 +# さまざまな分布に適したUniversal SystemCTL関数 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重启服务 +# サービスを再起動します restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1 服务已重启。" + echo "$1サービスは再開されました。" else - echo "错误:重启 $1 服务失败。" + echo "エラー:再起動$1サービスに失敗しました。" fi } -# 启动服务 +# サービスを開始します start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1 服务已启动。" + echo "$1サービスが開始されました。" else - echo "错误:启动 $1 服务失败。" + echo "エラー:開始$1サービスに失敗しました。" fi } -# 停止服务 +# サービスを停止します stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1 服务已停止。" + echo "$1サービスは停止しました。" else - echo "错误:停止 $1 服务失败。" + echo "エラー:停止します$1サービスに失敗しました。" fi } -# 查看服务状态 +# サービスのステータスを確認します status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1 服务状态已显示。" + echo "$1サービスステータスが表示されます。" else - echo "错误:无法显示 $1 服务状态。" + echo "エラー:表示できません$1サービスステータス。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME 已设置为开机自启。" + echo "$SERVICE_NAME電源を入れるように設定します。" } break_end() { - echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意键继续..." + echo -e "${gl_lv}操作が完了しました${gl_bai}" + echo "任意のキーを押して続行します..." read -n 1 -s -r -p "" echo "" clear @@ -425,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}Docker環境のインストール...${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 @@ -500,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker容器管理" - echo "Docker容器列表" + send_stats "Dockerコンテナ管理" + echo "Dockerコンテナリスト" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "容器操作" + echo "コンテナ操作" echo "------------------------" - echo "1. 创建新的容器" + echo "1.新しいコンテナを作成します" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" - echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" + echo "3.指定された容器を停止します7。すべての容器を停止します" + echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" + echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11。指定されたコンテナを入力します12。コンテナログを表示します" + echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + send_stats "新しいコンテナを作成します" + read -e -p "作成コマンドを入力してください:" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を起動します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker start $dockername ;; 3) - send_stats "停止指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を停止します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定されたコンテナを削除します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を再起動します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "すべてのコンテナを起動します" docker start $(docker ps -a -q) ;; 7) - send_stats "停止所有容器" + send_stats "すべてのコンテナを停止します" docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "すべてのコンテナを削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "すべてのコンテナを再起動します" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "コンテナを入力します" + read -e -p "コンテナ名を入力してください:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "コンテナログを表示します" + read -e -p "コンテナ名を入力してください:" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "コンテナネットワークを表示します" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "コンテナの占有を表示します" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "コンテナポートアクセスを許可します" + read -e -p "コンテナ名を入力してください:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "コンテナポートアクセスをブロックします" + read -e -p "コンテナ名を入力してください:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "Docker画像管理" + echo "Docker画像リスト" docker image ls echo "" - echo "镜像操作" + echo "ミラー操作" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1.指定された画像を取得する3。指定された画像を削除します" + echo "2。指定された画像4を更新します。すべての画像を削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "鏡を引っ張ります" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}画像を取得する:$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "画像を更新します" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}更新された画像:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "ミラーを削除します" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "すべての画像を削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -754,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "サポートされていない分布:$ID" return ;; esac else - echo "无法确定操作系统。" + echo "オペレーティングシステムを決定することはできません。" return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" } @@ -775,27 +775,27 @@ docker_ipv6_on() { 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处理配置文件的更新 + # JQを使用して、構成ファイルの更新を処理します local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # 現在の構成には既にIPv6設定があるかどうかを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # 構成を更新し、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}" + echo -e "${gl_huang}現在、IPv6アクセスが有効になっています${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # 構成ファイルが存在するかどうかを確認します if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}配置文件不存在${gl_bai}" + echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" return fi - # 读取当前配置 + # 現在の構成を読み取ります local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 使用jq处理配置文件的更新 + # JQを使用して、構成ファイルの更新を処理します local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # 現在のIPv6ステータスを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # 元の構成と新しい構成を比較します if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" fi } @@ -870,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "少なくとも1つのポート番号を提供してください" 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" + echo "ポートが開かれました$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "ポートが開かれました" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "少なくとも1つのポート番号を提供してください" 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" + echo "ポートは閉じた$port" fi done - # 删除已存在的规则(如果有) + # 既存のルールを削除する(ある場合) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # 最初に新しいルールを挿入します iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "ポートは閉じた" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "少なくとも1つの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" + echo "IPをリリースしました$ip" fi done save_iptables_rules - send_stats "已放行IP" + send_stats "IPをリリースしました" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "少なくとも1つの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" + echo "IPブロック$ip" fi done save_iptables_rules - send_stats "已阻止IP" + send_stats "IPブロック" } @@ -990,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # 防御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 @@ -1000,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "DDOS防御をオンにします" } -# 关闭DDoS防御 +# DDOS防御をオフにします disable_ddos_defense() { - # 关闭防御 DDoS + # 防御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 @@ -1015,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "DDOS防御をオフにします" } -# 管理国家IP规则的函数 +# 国家IPルールを管理する機能 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # IPSETが存在しない場合は作成します if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IPエリアファイルをダウンロードします if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" exit 1 fi - # 将 IP 添加到 ipset + # IPSETにIPを追加します while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 使用 iptables 阻止 IP + # iptablesでIPをブロックします 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 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # 許可された国のIPSETを作成する(存在しない場合) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IPエリアファイルをダウンロードします if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" 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 + # IPSETにIPを追加します while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # 指定された国の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 地址" + echo "正常に許可されています$country_codeIPアドレス" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # 国の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 + # Ipsetを破壊します if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に持ち上げられました$country_codeIPアドレスの制限" ;; *) @@ -1116,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "高度なファイアウォール管理" + send_stats "高度なファイアウォール管理" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "ファイアウォール管理" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1.指定されたポート2を開きます。指定されたポートを閉じます" + echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" - echo "7. 清除指定IP" + echo "5。IPホワイトリスト6。IPブラックリスト" + echo "7.指定されたIPをクリアします" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. ping 12を許可します。Pingを無効にします" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" + echo "17.指定国でのIP制限をリリースします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "オープンポート番号を入力してください:" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "指定されたポートを開きます" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "閉じたポート番号を入力してください:" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "指定されたポートを閉じます" ;; 3) - # 开放所有端口 + # すべてのポートを開きます current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "すべてのポートを開きます" ;; 4) - # 关闭所有端口 + # すべてのポートを閉じます current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1180,40 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "すべてのポートを閉じます" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IPホワイトリスト + read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IPブラックリスト + read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip block_ip $c_ip ;; 7) - # 清除指定 IP - read -e -p "请输入清除的IP: " d_ip + # 指定された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" + send_stats "指定されたIPをクリアします" ;; 11) - # 允许 PING + # pingを許可します 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 "允许PING" + send_stats "pingを許可します" ;; 12) - # 禁用 PING + # pingを無効にします 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 "禁用PING" + send_stats "pingを無効にします" ;; 13) enable_ddos_defense @@ -1223,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "許可された国$country_codeIP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "国をブロックします$country_codeIP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "国をきれいにします$country_codeIP" ;; *) @@ -1257,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 現在のシステムですべてのスワップパーティションを取得します local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # 反復して、すべてのスワップパーティションを削除します for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # /swapfileが使用されなくなったことを確認してください swapoff /swapfile - # 删除旧的 /swapfile + # 古い /swapfileを削除します rm -f /swapfile - # 创建新的 swap 分区 + # 新しいスワップパーティションを作成します fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# 仮想メモリを作成する必要があるかどうかを判断します [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # 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版本 + # 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版本 + # 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版本 + # 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}" @@ -1341,7 +1341,7 @@ ldnmp_v() { 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 @@ -1350,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # 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 文件中进行替换 + # 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 @@ -1399,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP環境がインストールされています" echo "------------------------" ldnmp_v @@ -1416,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "更新タスクが更新されました" } @@ -1453,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yuming公開鍵情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}証明書ストレージパス${gl_bai}" + echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" + echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" + echo "サイト情報証明書の有効期限" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + send_stats "ドメイン名証明書のアプリケーションは失敗しました" + echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" + echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" + echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" + echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" + echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" + echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" + echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" break_end clear - echo "请再次尝试部署 $webname" + echo "もう一度展開してみてください$webname" add_yuming install_ssltls certs_status @@ -1549,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "ドメイン名の再利用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1623,8 +1623,8 @@ nginx_upgrade() { 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}完成" + send_stats "更新します$ldnmp_pods" + echo "更新します${ldnmp_pods}仕上げる" } @@ -1643,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "ログイン情報:" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "起動する$ldnmp_pods" } @@ -1657,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # 構成ファイルが存在するかどうかを確認します if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # ゾーン_idsを配列に変換します ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # キャッシュをクリーニングするかどうかをユーザーに促します + read -e -p "CloudFlareのキャッシュをきれいにする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF信息保存在$CONFIG_FILE,可以后期修改CF信息" + 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 + read -e -p "CFユーザ​​ー名を入力してください:" EMAIL + read -e -p "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" fi fi - # 循环遍历每个 zone_id 并执行清除缓存命令 + # 各ZONE_IDをループして、Clear Cacheコマンドを実行します for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + echo "ゾーン_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" \ @@ -1687,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "キャッシュクリアリクエストが送信されました。" } web_cache() { - send_stats "清理站点缓存" + send_stats "サイトキャッシュをクリーンアップします" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "サイトデータを削除します" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + 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" + # エラーを避けるために、データベースを削除する前にデータベースが存在するかどうかを確認します + echo "データベースの削除:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # モードパラメーターに従ってWAFをオンまたはオフにすることにしました if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # 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:加上注释 + # 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' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 古い定義を削除します sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 「Happy Publishing」で行の前に新しい定義を挿入する awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 古い定義を削除します sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 「Happy Publishing」で行の前に新しい定義を挿入する awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # Brotliをオンにする:コメントを削除します sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # Brotliを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # ZSTDをオンにしてください:コメントを削除します sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # ZSTDを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi @@ -1990,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" + echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21。CloudFlareモード22。5秒シールドの高負荷" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31。WAF32をオンにしてください。WAFをオフにします" + echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" echo "------------------------" - echo "9. 卸载防御程序" + echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防衛プログラムがアンインストールされています" ;; 11) @@ -2097,11 +2097,11 @@ web_security() { ;; 21) - send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "CloudFlareモード" + echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください:" 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 @@ -2116,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "5秒シールドでの高負荷" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷の検出に達すると、シールドが自動的にオンになり、低負荷が自動的に5秒間オフになります。${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "CFパラメーターを取得します:" + echo -e "CFの背景の右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" + echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID cd ~ install jq bc @@ -2147,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "高負荷自動シールドオープニングスクリプトが追加されました" else - echo "自动开盾脚本已存在,无需添加" + echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "サイトWAFが有効になっています" + send_stats "サイトWAFが有効になっています" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "サイトWAFは閉鎖されています" + send_stats "サイトWAFは閉鎖されています" ;; 33) @@ -2189,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# 現在のworker_processesの設定値を取得します current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# 値に応じてモード情報を設定します if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # Brotliが有効であり、コメントされていないかどうかを確認してください if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # GZIPが有効になっており、コメントされていないかどうかを確認してください if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "LDNMP環境を最適化します" + echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1。標準モード2。高性能モード(推奨2H4g以上)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" + echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" + echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "サイト標準モード" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2276,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2288,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP環境は標準モードに設定されています" ;; 2) - send_stats "站点高性能模式" + send_stats "サイトの高性能モード" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2316,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2326,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP環境は、高性能モードに設定されています" ;; 3) @@ -2386,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker = "$ {gl_lv} $ {gl_bai}インストール" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" # fi # } @@ -2396,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "アクセスアドレス:" ip_address @@ -2434,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 默认标签为 latest + # デフォルトのラベルは最新です [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # 公式画像のサポートを追加します [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # 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 @@ -2477,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # コンテナのIPアドレスを取得します local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # 他のすべてのIPSを確認してブロックします 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 + # 指定された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 + # ローカルネットワークを確認してリリースします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 + # 他のすべてのIPSを確認してブロックします 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 + # 指定された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 + # ローカルネットワークを確認してリリースします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 @@ -2524,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" save_iptables_rules } @@ -2535,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # コンテナのIPアドレスを取得します local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # 他のすべての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 的规则 + # 指定された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 的规则 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2564,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # 他のすべての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 的规则 + # 指定された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 的规则 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2585,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートはサービスにアクセスすることが許可されています" save_iptables_rules } @@ -2599,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法:block_host_port <ポート番号> <承認IP>" return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # 他のすべての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 访问 + # 指定された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 @@ -2626,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # 他のすべての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 访问 + # 指定された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+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" save_iptables_rules } @@ -2658,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # 他のすべての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 访问的规则 + # 指定された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 访问的规则 + # 他のすべての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 访问的规则 + # 指定された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+端口访问该服务" + echo "IP+ポートはサービスにアクセスすることが許可されています" save_iptables_rules } @@ -2747,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_nameインストール" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "インストール$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_nameインストール" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新$docker_name" + send_stats "更新します$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "アプリはアンインストールされています" + send_stats "アンインストール$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}ドメインアクセス設定" + send_stats "${docker_name}ドメインアクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IPアクセスを許可します${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}ドメインアクセス設定" + send_stats "${docker_name}ドメインアクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IPアクセスを許可します${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2995,17 @@ 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セッションを作成します tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "再起動" reboot ;; *) - echo "已取消" + echo "キャンセル" ;; esac @@ -3127,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "LDNMP環境を再度インストールできません" + echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" break_end linux_ldnmp fi @@ -3138,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "LDNMP環境をインストールします" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "Nginx環境をインストールします" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3169,8 @@ 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 "Nginxがインストールされています" +echo -e "現在のバージョン:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "LDNMP環境を最初にインストールしてください" ldnmp_install_all fi @@ -3191,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "最初にNGINX環境をインストールしてください" nginx_install_all fi @@ -3202,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "あなたの$webname建てられた!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webnameインストール情報は次のとおりです。" } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "あなたの$webname建てられた!" echo "https://$yuming" } @@ -3223,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "発生防止ポートを入力してください。" port fi nginx_install_status install_ssltls @@ -3297,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "スペースで区切られた複数の生成防止IP+ポートを入力してください(たとえば、127.0.0.1:3000 127.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3357,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMPサイト管理" + echo "LDNMP環境" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "サイト:${output}証明書の有効期限" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" - echo "3. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" + echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" + echo "5.アクセスログを表示6。エラーログを表示します" + echo "7.グローバル構成の編集8。サイト構成の編集" + echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20.指定されたサイトデータを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + 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 @@ -3412,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "サイトドメイン名を変更します" + echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" + read -e -p "古いドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status - # mysql替换 + # MySQLの交換 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "関連するサイトを作成します" + echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" + read -e -p "既存のドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status @@ -3476,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "アクセスログを表示します" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "エラーログを表示します" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "グローバル構成を編集します" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "サイト構成を編集します" + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "サイトデータを表示します" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3540,16 +3540,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" + echo "公式ウェブサイトの紹介:$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1。インストール2。管理3。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}控制" + send_stats "${panelname}コントロール" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}アンインストール" ;; *) break @@ -3615,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "FRPサーバーをインストールします" + # ランダムポートと資格情報を生成します local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3637,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # 出力生成情報 ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + 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 "FRPパネル情報" + echo "FRPパネルアドレス:http://$ipv4_address:$dashboard_port" + echo "FRPパネルのユーザー名:$dashboard_user" + echo "FRPパネルパスワード:$dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3657,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "FRPクライアントをインストールします" + read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr + read -e -p "外部ネットワークドッキングトークンを入力してください:" token echo mkdir -p /home/frp @@ -3679,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "FRPイントラネットサービスを追加します" + # ユーザーにサービス名と転送情報を入力するように促します + read -e -p "サービス名を入力してください:" service_name + read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "イントラネットIPを入力してください[デフォルト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 + read -e -p "イントラネットポートを入力してください:" local_port + read -e -p "外部ネットワークポートを入力してください:" remote_port - # 将用户输入写入配置文件 + # ユーザー入力を構成ファイルに書き込みます cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # 出力生成情報 + echo "仕える$service_nameFRPC.TOMLに正常に追加されました" docker restart frpc @@ -3711,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "FRPイントラネットサービスを削除します" + # ユーザーに削除する必要があるサービス名を入力するように促します + read -e -p "削除する必要があるサービス名を入力してください:" service_name + # SEDを使用して、サービスとその関連構成を削除します sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "仕える$service_nameFRPC.TOMLから削除されました" docker restart frpc @@ -3726,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3756,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前の値をクリアします local_ip="" local_port="" remote_port="" @@ -3789,7 +3789,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスの情報を印刷します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3802,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# 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 的端口 + # 8055/8056以外のポートがあるかどうかを確認してください local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3821,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # 有効なポートがある場合にのみタイトルとコンテンツを表示します if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRPサービス外部アクセスアドレス:" - # 处理 IPv4 地址 + # IPv4アドレスを処理します for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # IPv6アドレスを処理する(存在する場合) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3841,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # HTTPS構成の処理 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRPサーバー$check_frp $update_status" + echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" + 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 "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00。サービスのステータスを更新します0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) install jq grep ss @@ -3902,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经安装完成" + echo "FRPサーバーがインストールされています" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经更新完成" + echo "FRPサーバーが更新されました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "ドメイン名アクセスへの逆イントラネット侵入サービス" + send_stats "FRP外部ドメイン名へのアクセス" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + 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 + send_stats "IPアクセスをブロックします" + echo "アンチジェネレーションドメイン名にアクセスした場合、この関数を使用して、より安全なIP+ポートアクセスをブロックできます。" + read -e -p "ブロックする必要があるポートを入力してください。" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "FRPサービスステータスを更新します" + echo "FRPサービスステータスは更新されました" ;; *) @@ -3966,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRPクライアント$check_frp $update_status" + echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" + echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" + echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) install jq grep ss @@ -3999,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经更新完成" + echo "FRPクライアントが更新されました" ;; 3) @@ -4020,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; 4) @@ -4066,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + 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 -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 "ダウンロードされたビデオリスト:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(まだありません)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" + echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "オプション番号を入力してください:" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "YT-DLPのインストール..." + echo "YT-DLPのインストール..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安装完成。按任意键继续..." + echo "インストールが完了しました。任意のキーを押して続行します..." read ;; 2) - send_stats "正在更新 yt-dlp..." - echo "正在更新 yt-dlp..." + send_stats "yt-dlpを更新..." + echo "yt-dlpを更新..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意键继续..." + echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "yt-dlpのアンインストール..." + echo "yt-dlpのアンインストール..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "アンインストールが完了しました。任意のキーを押して続行します..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + 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 "下载完成,按任意键继续..." ;; + read -e -p "ダウンロードが完了したら、任意のキーを押して続行します..." ;; 6) - send_stats "批量视频下载" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "#複数のビデオリンクアドレスを入力\ n#https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.Episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "バッチダウンロードを開始します..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + 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 "执行完成,按任意键继续..." ;; + read -e -p "実行が完了したら、キーを押して続行します..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + 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 "音频下载完成,按任意键继续..." ;; + read -e -p "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "ビデオを削除します" + read -e -p "削除ビデオの名前を入力してください:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4195,7 @@ set_timedate() { -# 修复dpkg中断问题 +# DPKG割り込みの問題を修正します fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}システムの更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi } @@ -4231,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "パッケージマネージャーのキャッシュを掃除します..." apk cache clean - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "APKキャッシュを削除してください..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "未使用の依存関係をクリーンアップ..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "パッケージマネージャーのキャッシュを掃除します..." pkg clean -y - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi return @@ -4340,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "DNSを最適化します" while true; do clear - echo "优化DNS地址" + echo "DNSアドレスを最適化します" echo "------------------------" - echo "当前DNS地址" + echo "現在のDNSアドレス" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + 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 "2。国内のDNS最適化:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3。DNS構成を手動で編集します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "外国のDNS最適化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "国内のDNS最適化" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "DNS構成を手動で編集します" ;; *) break @@ -4403,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # PasswordAuthenticationが見つかった場合は、はいに設定します 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 设置为 yes + # 発見された場合、pubkeyauthenticationはyesに設定されています 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/' \ @@ -4417,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # PasswordAuthenticationも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" @@ -4428,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # バックアップSSH構成ファイル cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "SSHポートは次のように変更されています。$new_port" sleep 1 @@ -4459,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" return 1 fi @@ -4499,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" } @@ -4508,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}ルートログインがセットアップされます!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + 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 @@ -4538,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" + echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" 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 "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "Debian 13を再インストールします" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "Debian 12を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "Debian 11を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "Debian 10を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "Ubuntu 24.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "Ubuntu 22.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "Ubuntu 20.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "Ubuntu 18.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4661,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "Rockylinux10を再インストールします" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "Rockylinux9を再インストールします" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールします" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "alma9を再インストールします" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "Oracle10を再インストールします" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "Oracle9を再インストールします" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "Fedora42を再インストールします" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "Fedora41を再インストールします" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "CENTOS10を再インストールします" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "CENTOS9を再インストールします" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールします" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールします" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "Kaliを再インストールします" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "Openeulerを再インストールします" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "OpenSuseを再インストールします" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "飛ぶ牛をリロードします" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4790,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "Windows11を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "Windows 10を再インストールします" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "Windows 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 @@ -4812,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "Windows Server 22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "Windows Server 19を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "Windows Server 16を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "Windows11アームを再インストールします" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3管理" + send_stats "BBRV3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "XanmodのBBRV3カーネルをインストールしました" + echo "現在のカーネルバージョン:$kernel_version" echo "" - echo "内核管理" + echo "カーネル管理" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) @@ -4884,7 +4884,7 @@ bbrv3() { # 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:添加存储库 + # ステップ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+') @@ -4893,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "Xanmodカーネルが更新されました。再起動後に有効になります" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" server_reboot ;; @@ -4916,13 +4916,13 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "BBR3加速度をセットアップします" + echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "Debian/Ubuntuのみをサポートします" + echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) @@ -4930,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "オペレーティングシステムの種類を決定できません" break_end linux_Settings fi @@ -4946,7 +4946,7 @@ bbrv3() { # 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:添加存储库 + # ステップ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+') @@ -4957,17 +4957,17 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + 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 "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac fi @@ -4976,40 +4976,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # 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" + echo "サポートされていないオペレーティングシステム:$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # 検出されたオペレーティングシステム情報を印刷します + echo "検出されたオペレーティングシステム:$os_name $os_version" + # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + 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)..." + echo "Elrepoリポジトリ構成(バージョン9)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "サポートされていないシステムバージョン:$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします + echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" server_reboot } @@ -5017,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "レッドハットカーネル管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "Elrepo Kernelをインストールしました" + echo "現在のカーネルバージョン:$kernel_version" echo "" - echo "内核管理" + echo "カーネル管理" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "更新红帽内核" + 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 "卸载红帽内核" + echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" + send_stats "レッドハットカーネルをアンインストールします" server_reboot ;; @@ -5060,26 +5060,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" + echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "Red Hatカーネルをアップグレードします" server_reboot ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac fi @@ -5090,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "スキャンするディレクトリを指定してください。" return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + 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 命令参数 + # CLAMSCANコマンドパラメーターを作成します local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # Dockerコマンドを実行します docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5130,8 @@ clamav_scan() { 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}" + echo -e "${gl_lv}$@スキャンが完了し、ウイルスレポートが保存されます${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}ウイルスがある場合は、お願いします${gl_huang}scan.log${gl_lv}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" } @@ -5143,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "ウイルススキャン管理" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "クラマブウイルススキャンツール" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" + echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアを含む。" echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3。カスタムディレクトリスキャン${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "フルディスクスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "カスタムディレクトリスキャン" + read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5194,21 @@ clamav() { -# 高性能模式优化函数 +# 高性能モード最適化関数 optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5220,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 均衡模式优化函数 +# イコライゼーションモード最適化関数 optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5261,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # 透明なページを復元します echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # numaバランスを復元します sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# デフォルト設定関数を復元します restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + 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}" + 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 @@ -5302,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}キャッシュ管理を復元します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" + # 透明なページを復元します echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 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}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5344,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linuxカーネルチューニング管理" + echo "Linuxシステムにおけるカーネルパラメーターの最適化" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" + echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" + echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" + echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" + echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" + echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" + echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" echo "--------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "高性能モードの最適化" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "バランスモードの最適化" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "ウェブサイトの最適化モデル" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "ライブストリーミング最適化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "ゲームサーバーの最適化" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "デフォルト設定を復元します" ;; *) break @@ -5446,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end @@ -5455,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "サポートされていないシステム:$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "サポートされていないシステム、システムタイプは認識できません。" break_end fi } @@ -5475,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "システム言語を切り替えます" while true; do clear - echo "当前系统语言: $LANG" + echo "現在のシステム言語:$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1。英語2。簡素化された中国語3。伝統的な中国語" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "英語に切り替えます" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "簡素化された中国人に切り替えます" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "伝統的な中国人に切り替えます" ;; *) break @@ -5519,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" hash -r break_end @@ -5530,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "命令行美化工具" + send_stats "コマンドラインの美化ツール" while true; do clear - echo "命令行美化工具" + 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}#" @@ -5543,9 +5543,9 @@ shell_bianse() { 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 "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -5590,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "システムリサイクルステーション" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5605,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "現在のリサイクルビン${trash_status}" + echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" + echo "3。コンテンツを復元4。リサイクルビンをクリアします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -5623,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" sleep 2 ;; 2) @@ -5631,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + 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 已还原到主目录。" + echo "$file_to_restoreホームディレクトリに復元されました。" else - echo "文件不存在。" + echo "ファイルは存在しません。" fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "リサイクルビンがクリアされました。" fi ;; *) @@ -5658,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夹" +send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 创建备份 +# バックアップを作成します create_backup() { - send_stats "创建备份" + send_stats "バックアップを作成します" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # ユーザーにバックアップディレクトリを入力するように求めます + echo "バックアップ例を作成します:" + echo "- 単一のディレクトリをバックアップします: /var /www" + echo "- バックアップ複数のディレクトリ: /etc /home /var /log" + echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" + read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input - # 如果用户没有输入目录,则使用默认目录 + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5682,119 @@ create_backup() { "/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 "您选择的备份目录为:" + # ユーザーが選択したディレクトリを印刷します + echo "選択したバックアップディレクトリは次のとおりです。" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # バックアップを作成します + echo "バックアップを作成します$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # コマンドが成功しているかどうかを確認してください if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "バックアップの作成に失敗しました!" exit 1 fi } -# 恢复备份 +# バックアップを復元します restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "バックアップを復元します" + # 復元するバックアップを選択します + read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME - # 检查备份文件是否存在 + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "バックアップファイルは存在しません!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "バックアップの回復$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "バックアップと復元を正常に!" else - echo "备份恢复失败!" + echo "バックアップリカバリに失敗しました!" exit 1 fi } -# 列出备份 +# バックアップをリストします list_backups() { - echo "可用的备份:" + echo "利用可能なバックアップ:" ls -1 "$BACKUP_DIR" } -# 删除备份 +# バックアップを削除します delete_backup() { - send_stats "删除备份" + send_stats "バックアップを削除します" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME - # 检查备份文件是否存在 + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "バックアップファイルは存在しません!" exit 1 fi - # 删除备份 + # バックアップを削除します rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "バックアップは正常に削除されました!" else - echo "备份删除失败!" + echo "バックアップの削除が失敗しました!" exit 1 fi } -# 备份主菜单 +# バックアップメインメニュー linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "システムバックアップ機能" + echo "システムバックアップ機能" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } @@ -5806,56 +5806,56 @@ linux_backup() { -# 显示连接列表 +# 接続リストを表示します list_connections() { - echo "已保存的连接:" + 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 " - 用户名: root" - echo " - 端口: 22" + send_stats "新しい接続を追加します" + echo "新しい接続を作成する例:" + echo "- 接続名:my_server" + echo "- IPアドレス:192.168.1.100" + echo "- ユーザー名:root" + echo "- ポート:22" echo "------------------------" - read -e -p "请输入连接名称: " name - read -e -p "请输入IP地址: " ip - read -e -p "请输入用户名 (默认: root): " user + read -e -p "接続名を入力してください:" name + read -e -p "IPアドレスを入力してください:" ip + read -e -p "ユーザー名(デフォルト:root)を入力してください:" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "ポート番号を入力してください(デフォルト:22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "認証方法を選択してください:" + echo "1。パスワード" + echo "2。キー" + read -e -p "選択(1/2)を入力してください:" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" 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" @@ -5864,89 +5864,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "無効な選択!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "接続が保存されます!" } -# 删除连接 +# 接続を削除します delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "接続を削除します" + read -e -p "削除するには、接続番号を入力してください。" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + 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 "连接已删除!" + echo "接続が削除されました!" } -# 使用连接 +# 接続を使用します use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "接続を使用します" + read -e -p "使用するには、接続番号を入力してください。" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "エラー:対応する接続​​は見つかりませんでした。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + 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. 目标服务器是否允许使用密钥登录。" + 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 "エラー: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 服务是否正常运行。" + echo "接続に失敗しました!以下を確認してください。" + echo "1.ユーザー名とパスワードが正しいかどうか。" + echo "2。ターゲットサーバーがパスワードログインを許可するかどうか。" + echo "3.ターゲットサーバーのSSHサービスが正常に実行されているかどうか。" fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "SSHリモート接続ツール" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSHリモート接続ツール" + echo "SSHを介して他のLinuxシステムに接続できます" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無効な選択、もう一度やり直してください。" ;; esac done } @@ -5988,156 +5988,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 利用可能なハードディスクパーティションをリストします list_partitions() { - echo "可用的硬盘分区:" + echo "利用可能なハードディスクパーティション:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# パーティションをマウントします mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "パーティションをマウントします" + read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "パーティションはすでに取り付けられています!" return fi - # 创建挂载点 + # マウントポイントを作成します MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # パーティションをマウントします mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "パーティションマウントに正常に:$MOUNT_POINT" else - echo "分区挂载失败!" + echo "パーティションマウントは失敗しました!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# パーティションをアンインストールします unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "パーティションをアンインストールします" + read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "パーティションはマウントされていません!" return fi - # 卸载分区 + # パーティションをアンインストールします umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "パーティションのアンインストールに正常に:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "パーティションのアンインストールに失敗しました!" fi } -# 列出已挂载的分区 +# マウントされたパーティションをリストします list_mounted_partitions() { - echo "已挂载的分区:" + echo "マウントされたパーティション:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# フォーマットパーティション format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "フォーマットパーティション" + read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "パーティションがマウントされました。最初にアンインストールしてください!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # ファイルシステムタイプを選択します + echo "ファイルシステムタイプを選択してください:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + 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 ;; + *) echo "無効な選択!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # フォーマットを確認します + read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作已取消。" + echo "操作はキャンセルされました。" return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # フォーマットパーティション + echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "パーティション形式は成功しました!" else - echo "分区格式化失败!" + echo "パーティションのフォーマットが失敗しました!" fi } -# 检查分区状态 +# パーティションステータスを確認します check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "パーティションステータスを確認します" + read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # パーティションステータスを確認します + echo "パーティション /dev /$PARTITION状態:" fsck "/dev/$PARTITION" } -# 主菜单 +# メインメニュー disk_manager() { - send_stats "硬盘管理功能" + send_stats "ハードディスク管理機能" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "ハードディスクパーティション管理" + echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" + echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } -# 显示任务列表 +# タスクリストを表示します list_tasks() { - echo "已保存的同步任务:" + 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 " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + 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 + 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 + echo "認証方法を選択してください:" + echo "1。パスワード" + echo "2。キー" + read -e -p "(1/2)を選択してください:" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" 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" @@ -6211,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "無効なキーコンテンツ!" return fi ;; *) - echo "无效的选择!" + echo "無効な選択!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + 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" ;; + *) 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 "任务已保存!" + echo "タスクが節約されました!" } -# 删除任务 +# タスクを削除します delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "同期タスクを削除します" + read -e -p "削除するには、タスク番号を入力してください。" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + 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 "任务已删除!" + echo "削除されたタスク!" } run_task() { - send_stats "执行同步任务" + send_stats "同期タスクを実行します" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # パラメーターを分析します local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6278,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # 着信タスク番号がない場合は、ユーザーに入力するように促します if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "実行するタスク番号を入力してください:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + 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" + echo "同期をローカルに引く:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # 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 "エラー: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" + echo "エラー:キーファイルが存在しません:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." chmod 600 "$password_or_key" fi @@ -6330,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同步完成!" + echo "同期は完了です!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "同期は失敗しました!以下を確認してください。" + echo "1。ネットワーク接続は正常ですか?" + echo "2。リモートホストにアクセスできますか?" + echo "3。認証情報は正しいですか?" + echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" fi } -# 创建定时任务 +# 時限タスクを作成します schedule_task() { - send_stats "添加同步定时任务" + send_stats "同期タイミングタスクを追加します" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "定期的に同期するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "エラー:有効なタスク番号を入力してください!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + echo "時限実行間隔を選択してください:" + echo "1)1時間に1回実行します" + echo "2)1日1回実行します" + echo "3)週に1回実行します" + read -e -p "オプションを入力してください(1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" @@ -6363,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) 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 "错误: 该任务的定时同步已存在!" + echo "エラー:このタスクのタイミング同期はすでに存在しています!" return fi - # 创建到用户的 crontab + # ユーザーにクロンタブを作成します (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "タイミングタスクが作成されました。$cron_job" } -# 查看定时任务 +# スケジュールされたタスクを表示します view_tasks() { - echo "当前的定时任务:" + echo "現在のタイミングタスク:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# タイミングタスクを削除します delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "同期タイミングタスクを削除します" + read -e -p "削除するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "エラー:有効なタスク番号を入力してください!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "削除されたタスク番号$numタイミングタスク" } -# 任务管理主菜单 +# タスク管理メインメニュー rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "RSYNCリモート同期ツール" + echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1.新しいタスクを作成します2。タスクを削除します" + echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" + echo "5.タイミングタスクを作成6.タイミングタスクを削除します" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無効な選択、もう一度やり直してください。" ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } @@ -6448,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "システム情報クエリ" ip_address @@ -6498,41 +6498,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + 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}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}ホスト名:${gl_bai}$hostname" + echo -e "${gl_kjlan}システムバージョン:${gl_bai}$os_info" + echo -e "${gl_kjlan}Linuxバージョン:${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}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}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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}オペレーター:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}ランタイム:${gl_bai}$runtime" echo @@ -6545,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats「基本ツール」 + echo -e "基本的なツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}カールダウンロードツール${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}WGETダウンロードツール${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" + echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" + echo -e "${gl_kjlan}7. ${gl_bai}zip zip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" + echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + 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}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}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}41. ${gl_bai}指定されたツールをインストールします${gl_kjlan}42. ${gl_bai}指定されたツールをアンインストールします" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" curl --help - send_stats "安装curl" + send_stats "カールをインストールします" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" wget --help - send_stats "安装wget" + send_stats "WGETをインストールします" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" sudo --help - send_stats "安装sudo" + send_stats "sudoをインストールします" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" socat -h - send_stats "安装socat" + send_stats "SOCATをインストールします" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "HTOPをインストールします" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "IFTOPをインストールします" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" unzip - send_stats "安装unzip" + send_stats "unzipをインストールします" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" tar --help - send_stats "安装tar" + send_stats "タールをインストールします" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" tmux --help - send_stats "安装tmux" + send_stats "tmuxをインストールします" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" ffmpeg --help - send_stats "安装ffmpeg" + send_stats "ffmpegをインストールします" ;; 11) @@ -6657,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "BTOPをインストールします" ;; 12) clear @@ -6666,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "レンジャーをインストールします" ;; 13) clear @@ -6675,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "NCDUをインストールします" ;; 14) clear @@ -6684,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "FZFをインストールします" ;; 15) clear @@ -6693,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "VIMをインストールします" ;; 16) clear @@ -6702,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "ナノをインストールします" ;; @@ -6713,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "gitをインストールします" ;; 21) @@ -6721,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "cmatrixをインストールします" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "SLをインストールします" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "バステットをインストールします" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "nsnakeをインストールします" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "Ninvadersをインストールします" ;; 31) clear - send_stats "全部安装" + 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 "全部安装(不含游戏和屏保)" + send_stats "すべてをインストールします(ゲームやスクリーンセーバーを除く)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + 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 + read -e -p "インストールされているツール名(Wget Curl Sudo htop)を入力してください。" installname install $installname - send_stats "安装指定软件" + send_stats "指定されたソフトウェアをインストールします" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename remove $removename - send_stats "卸载指定软件" + send_stats "指定されたソフトウェアをアンインストールします" ;; 0) @@ -6789,7 +6789,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -6803,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr管理" + 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 "現在のTCPブロッキングアルゴリズム:$congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "AlpineはBBR3を有効にします" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6854,37 +6854,37 @@ linux_docker() { while true; do clear - # send_stats "docker管理" + # send_stats「Docker Management」 echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" + echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" + 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}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}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}卸载Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "Docker環境をインストールします" install_add_docker ;; @@ -6895,22 +6895,22 @@ linux_docker() { 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 "docker全局状态" - echo "Docker版本" + send_stats "Dockerグローバルステータス" + echo "Dockerバージョン" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -6925,8 +6925,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Dockerネットワーク管理" + echo "Dockerネットワークリスト" echo "------------------------------------------------------------" docker network ls echo "" @@ -6950,36 +6950,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "ネットワーク操作" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1.ネットワークを作成します" + echo "2。インターネットに参加してください" + echo "3。ネットワークを終了します" + echo "4.ネットワークを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "ネットワークを作成します" + read -e -p "新しいネットワーク名を設定します:" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + 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 + send_stats "インターネットに参加してください" + read -e -p "出口ネットワーク名:" dockernetwork + read -e -p "これらのコンテナはネットワークを終了します(複数のコンテナ名はスペースで区切られています):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -6988,8 +6988,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "ネットワークを削除します" + read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork docker network rm $dockernetwork ;; @@ -7003,29 +7003,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" - echo "Docker卷列表" + send_stats "Dockerボリューム管理" + echo "Dockerボリュームリスト" docker volume ls echo "" - echo "卷操作" + echo "ボリューム操作" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1.新しいボリュームを作成します" + echo "2。指定されたボリュームを削除します" + echo "3.すべてのボリュームを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + send_stats "新しいボリュームを作成します" + read -e -p "新しいボリューム名を設定します:" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7034,7 +7034,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "すべてのボリュームを削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7043,7 +7043,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7056,7 +7056,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker清理" + send_stats "Dockerクリーニング" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7065,13 +7065,13 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 8) clear - send_stats "Docker源" + send_stats "Dockerソース" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7084,19 +7084,19 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker V6が開いています" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker V6レベル" docker_ipv6_off ;; 20) clear - send_stats "Docker卸载" + send_stats "Dockerアンインストール" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7108,7 +7108,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7117,7 +7117,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7134,151 +7134,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # 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}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + 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ストリーミングメディアのロック解除検出" + echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" + echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" + echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" + echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" + echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" + echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" + echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}ハードウェアパフォーマンステスト" + echo -e "${gl_kjlan}21. ${gl_bai}YABSパフォーマンステスト" + echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPUパフォーマンステストスクリプト" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}包括的なテスト" + echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" + echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "CHATGPTはステータス検出のロックを解除します" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "リージョンストリーミングメディアのロック解除テスト" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "YeahWUストリーミングメディアのロック解除検出" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "XYKT_IP品質の身体検査スクリプト" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "MTR_TRACE 3ネットワークリターンラインテスト" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "SuperSpeed Three-Net速度測定" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace高速バックホールテストスクリプト" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "Nxtraceは、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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + 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 "広州通信:58.60.188.222" + echo "広州ユニコム:210.21.196.6" + echo "広州モバイル:120.196.165.24" + echo "成都通信:61.139.2.69" + echo "成都ユニコム:119.6.6.6" + echo "成都モバイル: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 + read -e -p "指定されたIPを入力してください:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "Ludashi2020 3ネットワークラインテスト" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "I-ABC多機能速度テストスクリプト" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "ネットワーク品質のテストスクリプト" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "YABSパフォーマンステスト" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "ベンチパフォーマンステスト" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + send_stats "SpiritySDX Fusion Monster Review" clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; @@ -7288,7 +7288,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7304,51 +7304,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + send_stats "Oracle Cloud Scriptコレクション" + echo -e "Oracle Cloud Scriptコレクション" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装闲置机器活跃脚本" - echo -e "${gl_kjlan}2. ${gl_bai}卸载闲置机器活跃脚本" + 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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + 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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + 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 + # ユーザーに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 + 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 + read -e -p "メモリの使用率を入力してください[デフォルト:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # Dockerコンテナを実行します docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7356,14 +7356,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "Oracle Cloudインストールアクティブスクリプト" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7371,20 +7371,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" ;; 3) clear - echo "重装系统" + echo "システムを再インストールします" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + 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 + read -e -p "再インストールするシステムを選択してください:1。Debian12| 2。Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7396,28 +7396,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "選択の無効な、再入力してください。" ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + 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 "甲骨文云重装系统脚本" + send_stats "Oracle Cloud再インストールシステムスクリプト" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "この機能は開発段階にあるので、お楽しみに!" ;; 5) clear @@ -7427,15 +7427,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + send_stats "IPv6修正" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7456,7 +7456,7 @@ docker_tato() { 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}" + 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 } @@ -7477,7 +7477,7 @@ 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" + echo -e "${gl_lv}環境がインストールされています${gl_bai}サイト:$outputデータベース:$db_output" fi fi @@ -7505,31 +7505,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP建站" - echo -e "${gl_huang}LDNMP建站" + # send_stats "ldnmp webサイトビルディング" + echo -e "${gl_huang}LDNMP Webサイトビルディング" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールします${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールします${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" + echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" + echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" + 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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}nginxのみをインストールします${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}サイトリダイレクト" + echo -e "${gl_huang}23. ${gl_bai}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" + echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" + echo -e "${gl_huang}27. ${gl_bai}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}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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -7543,10 +7543,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # ディスクフォーラム webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7569,21 +7569,21 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "データベースアドレス:mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:discuz_" ;; 4) clear - # 可道云桌面 + # ケダオクラウドデスクトップ webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7605,20 +7605,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "データベースアドレス:mysql" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベース名:$dbname" + echo "Redisホスト:Redis" ;; 5) clear - # 苹果CMS + # Apple CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7644,24 +7644,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "データベースアドレス:mysql" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベースプレフィックス:mac_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "インストールが成功した後、バックグラウンドアドレスにログインします" echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # 一本足のカウントカード webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7682,34 +7682,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "データベースアドレス:mysql" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" echo "" - echo "redis地址: redis" - echo "redis密码: 默认不填写" - echo "redis端口: 6379" + echo "Redisアドレス:Redis" + echo "Redisパスワード:デフォルトで記入されていません" + echo "Redisポート:6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "ウェブサイトURL:https://$yuming" + echo "バックグラウンドログインパス: /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "ユーザー名:admin" + echo "パスワード:管理者" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" + echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # フララムフォーラム webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7746,12 +7746,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "データベースアドレス:mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:flarum_" + echo "管理者情報は自分で設定されます" ;; @@ -7759,8 +7759,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7784,11 +7784,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "データベースプレフィックス:typecho_" + echo "データベースアドレス:mysql" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベース名:$dbname" ;; @@ -7797,8 +7797,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7823,18 +7823,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "データベースアドレス:mysql" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7851,10 +7851,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -7864,20 +7864,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + 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 + read -e -p "(/home/web/html/に似たindex.phpのパスを入力してください$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 -e "[${gl_huang}3/6${gl_bai}] PHPバージョンを選択してください" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + 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 @@ -7888,15 +7888,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "選択の無効な、再入力してください。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" echo "-------------" - echo "已经安装的扩展" + echo "インストールされた拡張機能" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -7906,25 +7906,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}]データベース管理" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -7934,10 +7934,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "データベースインポートテーブルデータ" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "データベースのインポートが完了しました" ;; *) echo @@ -7949,12 +7949,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "データベースアドレス:mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:$prefix" + echo "管理者ログイン情報は自分で設定されます" ;; @@ -7967,10 +7967,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "ジャンプドメイン名を入力してください:" reverseproxy nginx_install_status install_ssltls certs_status @@ -7992,7 +7992,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8003,11 +8003,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" + read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8027,8 +8027,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8050,8 +8050,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8068,8 +8068,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8102,8 +8102,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8120,10 +8120,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8133,12 +8133,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + 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 + read -e -p "(/home/web/html/に似たindex.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 @@ -8163,21 +8163,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP環境バックアップ" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /home /$backup_filename" + read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "エラー:リモートサーバーIPを入力してください。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8185,9 +8185,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送されるファイルは見つかりませんでした。" fi break ;; @@ -8195,7 +8195,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac done @@ -8203,9 +8203,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + 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 @@ -8215,18 +8215,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1。毎週のバックアップ2。毎日のバックアップ" + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + 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 + read -e -p "毎日のバックアップの時間を選択します(時間、0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8240,19 +8240,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP環境修復" + echo "利用可能なサイトバックアップ" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + 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 @@ -8262,7 +8262,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8271,7 +8271,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "圧縮パッケージは見つかりませんでした。" fi ;; @@ -8289,11 +8289,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "LDNMP環境を更新します" + echo "LDNMP環境を更新します" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "コンポーネントの新しいバージョンを発見します" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8313,13 +8313,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" + echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" echo "------------------------" - echo "5. 更新完整环境" + echo "5。完全な環境を更新します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8328,7 +8328,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version local version=${version:-latest} cd /home/web/ @@ -8339,13 +8339,13 @@ linux_ldnmp() { 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}完成" + 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 + 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 @@ -8378,8 +8378,8 @@ linux_ldnmp() { 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}完成" + send_stats "更新します$ldnmp_pods" + echo "更新します${ldnmp_pods}仕上げる" ;; 4) @@ -8390,15 +8390,15 @@ linux_ldnmp() { 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}完成" + 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环境" + send_stats "LDNMP環境を完全に更新します" cd /home/web/ docker compose down --rmi all @@ -8424,7 +8424,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "LDNMP環境をアンインストールします" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8438,7 +8438,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -8448,7 +8448,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "無効な入力!" esac break_end @@ -8468,12 +8468,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "应用市场" + echo -e "アプリケーション市場" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # ループで色を設定します for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8482,62 +8482,67 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" + echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" + echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" + echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" + echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" + echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" + echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" + echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" + echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" + echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" + echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" + echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" + echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" + echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" + echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" + echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" + echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" + echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" + echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" + echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" + echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" - echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" + echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" + echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" + echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" + echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice fi case $sub_choice in @@ -8687,7 +8692,8 @@ while true; do docker_rum() { - + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーパスワードを設定します。" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -8696,8 +8702,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ @@ -8711,8 +8717,8 @@ while true; do local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app @@ -8720,7 +8726,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "ネザを作る" local app_id="7" local docker_name="nezha-dashboard" @@ -8729,20 +8735,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒监控 $check_docker $update_status" - echo "开源、轻量、易用的服务器监控与运维工具" - echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + echo -e "Nezhaの監視$check_docker $update_status" + echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" + echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 使用" + echo "1。使用します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -8811,41 +8817,41 @@ while true; do clear echo -e "邮局服务 $check_docker $update_status" echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}ポート$port現在利用可能です${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "アクセスアドレス:" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "これらのDNSレコードを最初に解析します" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -8855,7 +8861,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "任意のキーを押して続行します..." read -n 1 -s -r -p "" install jq @@ -8874,9 +8880,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.ioがインストールされています" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" echo "" @@ -8899,9 +8905,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.ioがインストールされています" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" echo "" ;; @@ -8912,7 +8918,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; *) @@ -8946,7 +8952,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -8956,7 +8962,7 @@ while true; do 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已经安装完成" + echo "Rocket.chatがインストールされています" check_docker_app_ip } @@ -8966,7 +8972,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9050,7 +9056,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -9064,7 +9070,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9209,7 +9215,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "サンダープールを構築します" local app_id="19" local docker_name=safeline-mgt @@ -9217,20 +9223,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "サンダープールサービス$check_docker" + echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -9240,7 +9246,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经安装完成" + echo "サンダープールWAFパネルがインストールされています" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9253,7 +9259,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经更新完成" + echo "サンダープールWAFパネルが更新されました" check_docker_app_ip ;; 3) @@ -9264,7 +9270,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9383,7 +9389,8 @@ while true; do docker_rum() { - + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーパスワードを設定します。" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -9392,8 +9399,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ @@ -9404,14 +9411,13 @@ while true; do --restart unless-stopped \ lscr.io/linuxserver/webtop:latest - } local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app ;; @@ -9672,7 +9678,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -9725,7 +9731,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoyaファミリーバケツ" clear install_docker check_disk_space 1 @@ -9927,9 +9933,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "インストール" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "最初のユーザー名とパスワードは次のとおりです" } docker_app_update() { @@ -9947,7 +9953,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10034,7 +10040,7 @@ while true; do 51|pve) clear - send_stats "PVE开小鸡" + send_stats "PVEチキン" 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 ;; @@ -10154,7 +10160,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10169,7 +10175,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10197,7 +10203,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10212,7 +10218,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10220,7 +10226,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10241,17 +10247,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "初期ユーザー名:admin" + echo "最初のパスワード:changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "アプリが更新されました" } @@ -10261,7 +10267,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10308,7 +10314,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10324,7 +10330,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10586,7 +10592,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "libretvログインパスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10607,32 +10613,55 @@ while true; do ;; + 74|moontv) local app_id="74" - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - docker_rum() { + local app_name="moontv私有影视" + local app_text="免费在线视频搜索与观看平台" + local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local docker_name="moontv-core" + local docker_port="8074" + local app_size="2" - read -e -p "设置MoonTV的登录密码: " app_passwd + docker_app_install() { + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "承認コードを入力してください:" shouquanma + + + mkdir -p /home/docker/moontv + mkdir -p /home/docker/moontv/config + mkdir -p /home/docker/moontv/data + cd /home/docker/moontv + + curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + cd /home/docker/moontv/ + docker compose up -d + clear + echo "インストール" + check_docker_app_ip + } - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + docker_app_update() { + cd /home/docker/moontv/ && docker compose down --rmi all + cd /home/docker/moontv/ && docker compose up -d } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + + docker_app_uninstall() { + cd /home/docker/moontv/ && docker compose down --rmi all + rm -rf /home/docker/moontv + echo "アプリはアンインストールされています" + } + + docker_app_plus ;; @@ -10702,8 +10731,8 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + read -e -p "ログインユーザー名を設定します:" app_use + read -e -p "ログインパスワードの設定:" app_passwd docker run -d \ --name xunlei \ @@ -10800,11 +10829,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 公式のDocker-ComposeおよびEnvファイルをダウンロードします curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # ランダムキーとパスワードを生成します local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10813,17 +10842,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 管理者アカウント情報を追加します echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # コンテナを起動します docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10833,7 +10862,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 元の変数を保持します source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10850,7 +10879,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10900,7 +10929,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10918,10 +10947,12 @@ while true; do docker_rum() { + read -e -p "設定${docker_name}SK-159KEJILIONYYDS163などのログインキー(SKターニング文字と数字の組み合わせ):" app_passwd + mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ + -e AUTH_KEY=${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest @@ -10929,7 +10960,7 @@ while true; do local docker_describe="高性能AI接口透明代理服务" local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_use="" local docker_passwd="" local app_size="1" docker_app @@ -11020,7 +11051,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -11033,7 +11064,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11136,6 +11167,239 @@ while true; do ;; + + 89|file-code-box) + + local app_id="89" + local docker_name="file-code-box" + local docker_img="lanol/filecodebox:latest" + local docker_port=8089 + + docker_rum() { + + docker run -d \ + --name file-code-box \ + -p ${docker_port}:12345 \ + -v /home/docker/file-code-box/data:/app/data \ + --restart unless-stopped \ + lanol/filecodebox:latest + + } + + local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" + local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + + 90|matrix) + + local app_id="90" + local docker_name="matrix" + local docker_img="matrixdotorg/synapse:latest" + local docker_port=8090 + + docker_rum() { + + add_yuming + + if [ ! -d /home/docker/matrix/data ]; then + docker run -it --rm \ + -v /home/docker/matrix/data:/data \ + -e SYNAPSE_SERVER_NAME=${yuming} \ + -e SYNAPSE_REPORT_STATS=yes \ + --name matrix \ + matrixdotorg/synapse:latest generate + fi + + docker run -d \ + --name matrix \ + -v /home/docker/matrix/data:/data \ + -p ${docker_port}:8008 \ + --restart unless-stopped \ + matrixdotorg/synapse:latest + + echo "初期ユーザーまたは管理者を作成します。次のユーザー名とパスワード、およびあなたが管理者であるかどうかを設定してください。" + docker exec -it matrix register_new_matrix_user \ + http://localhost:8008 \ + -c /data/homeserver.yaml + + sed -i '/^enable_registration:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration: true' /home/docker/matrix/data/homeserver.yaml + sed -i '/^enable_registration_without_verification:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration_without_verification: true' /home/docker/matrix/data/homeserver.yaml + + docker restart matrix + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + local docker_describe="Matrix是一个去中心化的聊天协议" + local docker_url="官网介绍: https://matrix.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 91|gitea) + + local app_id="91" + + local app_name="gitea私有代码仓库" + local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" + local app_url="视频介绍: https://github.com/go-gitea/gitea" + local docker_name="gitea" + local docker_port="8091" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/gitea + mkdir -p /home/docker/gitea/gitea + mkdir -p /home/docker/gitea/data + mkdir -p /home/docker/gitea/postgres + cd /home/docker/gitea + + curl -o /home/docker/gitea/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/gitea-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/gitea/docker-compose.yml + cd /home/docker/gitea/ + docker compose up -d + clear + echo "インストール" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/gitea/ && docker compose down --rmi all + cd /home/docker/gitea/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/gitea/ && docker compose down --rmi all + rm -rf /home/docker/gitea + echo "アプリはアンインストールされています" + } + + docker_app_plus + + ;; + + + + + 92|filebrowser) + + local app_id="92" + local docker_name="filebrowser" + local docker_img="hurlenko/filebrowser" + local docker_port=8092 + + docker_rum() { + + docker run -d \ + --name filebrowser \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v /home/docker/filebrowser/data:/data \ + -v /home/docker/filebrowser/config:/config \ + -e FB_BASEURL=/filebrowser \ + hurlenko/filebrowser + + } + + local docker_describe="是一个基于Web的文件管理器" + local docker_url="官网介绍: https://filebrowser.org/" + local docker_use="docker logs filebrowser" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + b) + clear + send_stats "すべてのアプリケーションバックアップ" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "ファイルは、リモートサーバー/ルートディレクトリに転送されました。" + else + echo "転送されるファイルは見つかりませんでした。" + fi + break + ;; + *) + echo "注:現在、バックアップにはDockerプロジェクトのみが含まれており、Pagodaや1PanelなどのWebサイトビルディングパネルのデータバックアップは含まれていません。" + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "すべてのアプリケーションが復元されます" + echo "利用可能なアプリバックアップ" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージを使用します + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "アプリケーションデータが復元されました。指定されたアプリケーションメニューを手動で入力し、アプリケーションを更新してアプリケーションを復元してください。" + else + echo "圧縮パッケージは見つかりませんでした。" + fi + + ;; + 0) kejilion ;; @@ -11153,35 +11417,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "バックエンドワークスペース" + echo -e "バックエンドワークスペース" + echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" + echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}1. ${gl_bai}ワークスペース番号1" + echo -e "${gl_kjlan}2. ${gl_bai}ワークスペースNo. 2" + echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" + echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" + echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" + echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" + echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" + echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" + echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" + echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -11189,7 +11453,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; @@ -11197,63 +11461,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; @@ -11265,21 +11529,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH常駐モード" + echo -e "SSH常駐モード${tmux_sshd_status}" + echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1。2をオンにします。オフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -11295,29 +11559,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "カスタムワークスペース" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "バックグラウンドワークスペースにコマンドを注入します" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "ワークスペースを削除します" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -11342,54 +11606,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}スクリプトの起動ショートカットキーを設定します${gl_kjlan}2. ${gl_bai}ログインパスワードを変更します" + echo -e "${gl_kjlan}3. ${gl_bai}ルートパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンのPythonをインストールします" + 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}ルートアカウントを無効にして新しいアカウントを作成します${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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + 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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "ショートカットキーが設定されています" + send_stats "スクリプトのショートカットキーが設定されています" break_end linux_Settings done @@ -11397,28 +11661,28 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "ログインパスワードを設定します" + echo "ログインパスワードを設定します" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "ルートパスワードモード" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "Pyバージョン管理" + echo "Pythonバージョン管理" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + echo -e "現在のPythonバージョン番号:${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 "推奨バージョン: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 @@ -11457,7 +11721,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi @@ -11486,55 +11750,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "开放端口" + send_stats "オープンポート" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "すべてのポートが開いています" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "SSHポートを変更します" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 現在の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}" + # 現在のSSHポート番号を印刷します + echo -e "現在のSSHポート番号は次のとおりです。${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # ユーザーに新しい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端口已修改" + send_stats "SSHポートが変更されました" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "SSHポート変更を終了します" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "ポート番号は無効です。1〜65535の数字を入力してください。" + send_stats "無効なSSHポート入力" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "入力が無効です。番号を入力してください。" + send_stats "無効なSSHポート入力" break_end fi done @@ -11553,8 +11817,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "新しいユーザーはルートを無効にします" + read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11569,49 +11833,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "操作が完了しました。" ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "V4/V6の優先度を設定します" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "IPv4の優先度に切り替えました" + send_stats "IPv4の優先度に切り替えました" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "IPv6の優先度に切り替えました" + send_stats "IPv6の優先度に切り替えました" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + send_stats "IPv6修正" ;; *) @@ -11629,43 +11893,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "仮想メモリを設定します" while true; do clear - echo "设置虚拟内存" + 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 -e "現在の仮想メモリ:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G仮想メモリが設定されています" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G仮想メモリが設定されています" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G仮想メモリが設定されています" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "カスタム仮想メモリが設定されています" ;; *) @@ -11678,8 +11942,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "ユーザー管理" + echo "ユーザーリスト" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11690,62 +11954,62 @@ EOF echo "" - echo "账户操作" + echo "アカウント操作" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3.最高の権限を与える4。最高の権限をキャンセルします" echo "------------------------" - echo "5. 删除账号" + echo "5.アカウントを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # ユーザーに新しいユーザー名を入力するように求めます + read -e -p "新しいユーザー名を入力してください:" new_username - # 创建新用户并设置密码 + # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "操作が完了しました。" ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # ユーザーに新しいユーザー名を入力するように求めます + read -e -p "新しいユーザー名を入力してください:" new_username - # 创建新用户并设置密码 + # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 新規ユーザーのsudo許可を付与します echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作已完成。" + echo "操作が完了しました。" ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "ユーザー名を入力してください:" username + # 新規ユーザーのsudo許可を付与します echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "ユーザー名を入力してください:" username + # sudoersファイルからユーザーのsudo許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "削除するにはユーザー名を入力してください:" username + # ユーザーとそのホームディレクトリを削除します userdel -r "$username" ;; @@ -11758,50 +12022,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "ユーザー情報ジェネレーター" + echo "ランダムユーザー名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "ランダムユーザー名$i: $username" done echo "" - 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个随机用户姓名 + # 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" + echo "ランダムなユーザー名$i: $user_name" done echo "" - echo "随机UUID" + echo "ランダムuuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "ランダムuuid$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "ランダムなパスワード$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "ランダムなパスワード$i: $password" done echo "" @@ -11809,46 +12073,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "タイムゾーンを変更します" while true; do clear - echo "系统时间信息" + echo "システム時間情報" - # 获取当前系统时区 + # 現在のシステムタイムゾーンを取得します local timezone=$(current_timezone) - # 获取当前系统时间 + # 現在のシステム時間を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # タイムゾーンと時間を表示します + echo "現在のシステムタイムゾーン:$timezone" + echo "現在のシステム時間:$current_time" echo "" - echo "时区切换" + echo "タイムゾーンの切り替え" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + 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 "11。英国のロンドン時間12。パリの時間フランスの時間" + echo "13。ベルリン時代、ドイツ14。モスクワ・タイム、ロシア" + echo "15。オランダのユトレヒト時間16。スペインでのマドリード時間" echo "------------------------" - echo "美洲" + echo "アメリカ" echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "23。カナダ時間24。メキシコの時間" + echo "25。ブラジル時間26。アルゼンチン時間" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31。UTCグローバル標準時間" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -11891,21 +12155,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "ホスト名を変更します" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # Debian、Ubuntu、Centosなどの他のシステム。 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11923,11 +12187,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "ホスト名は次のように変更されています。$new_hostname" + send_stats "ホスト名が変更されました" sleep 1 else - echo "已退出,未更改主机名。" + echo "終了すると、ホスト名は変更されていません。" break fi done @@ -11935,32 +12199,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "システムの更新ソースを変更します" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "更新ソース領域を選択します" + echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "中国本土のデフォルトソース" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "中国本土の教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "海外起源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "キャンセル" ;; esac @@ -11968,62 +12232,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "タイミングタスク管理" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "タイミングされたタスクリスト" crontab -l echo "" - echo "操作" + echo "動作します" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1。毎月のタスク2。毎週のタスク" + echo "3。毎日のタスク4。時間ごとのタスク" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "毎日タスクを実行する時間を選択しますか? (時間、0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "時限タスクを追加します" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "削除する必要があるキーワードを入力してください。" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "タイミングタスクを削除します" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "タイミングタスクを編集します" ;; *) break # 跳出循环,退出菜单 @@ -12035,32 +12299,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "ローカルホストの解析" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "ネイティブホストのペルシングリスト" + echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" cat /etc/hosts echo "" - echo "操作" + echo "動作します" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1.新しい解析2を追加します。解析アドレスを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "選択を入力してください:" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "ローカルホストの解析が追加されました" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "ローカルホストの解析と削除" ;; *) break # 跳出循环,退出菜单 @@ -12071,7 +12335,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "SSH防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12083,20 +12347,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防衛プログラム$check_docker" + echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" + echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2。SSH傍受記録を表示します" + echo "3。リアルタイムログ監視" echo "------------------------" - echo "9. 卸载防御程序" + echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) install_docker @@ -12119,7 +12383,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防衛プログラムがアンインストールされています" ;; *) break @@ -12132,47 +12396,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "電流制限シャットダウン機能" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "電流制限シャットダウン機能" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # limiting_shut_down.shファイルが存在するかどうかを確認してください if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # threshold_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}" + 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}" + echo -e "${gl_hui}現在の制限シャットダウン機能は有効になりません${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 新しい仮想メモリサイズを入力します + echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" + read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day cz_day=${cz_day:-1} cd ~ @@ -12185,15 +12449,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "現在の制限シャットダウン関数はオフになっています" ;; *) break @@ -12206,40 +12470,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "秘密キーログイン" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ルート秘密キーログインモード" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "キーペアが生成され、SSHログインのより安全な方法" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "選択を入力してください:" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "新しいキーを生成します" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "既存の公開キーをインポートします" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "地元の秘密の鍵を表示します" echo "------------------------" - echo "公钥信息" + echo "公開鍵情報" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "秘密のキー情報" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12255,18 +12519,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "電報警告" + echo "TG-BOTモニタリングと早期警告機能" + echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "しきい値に達した後、ユーザーはユーザーに送信されます" + echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "電報警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -12288,7 +12552,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # 〜/.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 @@ -12299,21 +12563,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-BOT早期警告システムが開始されました" + echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -12357,7 +12621,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -12380,61 +12644,61 @@ EOF 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "メッセージボード" + echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "ワンストップチューニングスタート" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10。タイムゾーンをに設定します${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12451,25 +12715,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10。 Linuxシステムのカーネルパラメーターの最適化" + echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac @@ -12477,7 +12741,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "システムを再起動します" server_reboot ;; 100) @@ -12493,32 +12757,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "プライバシーとセキュリティ" + echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" + echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "現在のステータス:$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1。コレクションをオンにします" + echo "2。コレクションを閉じます" echo "--------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "コレクションは閉じた" + send_stats "プライバシーとセキュリティは収集のために閉鎖されています" ;; *) break @@ -12534,11 +12798,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "テックライオンスクリプトをアンインストールします" + echo "テックライオンスクリプトをアンインストールします" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) @@ -12546,16 +12810,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "スクリプトはアンインストールされています、さようなら!" break_end clear exit ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -12565,7 +12829,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -12583,187 +12847,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "ファイルマネージャー" while true; do clear - echo "文件管理器" + echo "ファイルマネージャー" echo "------------------------" - echo "当前路径" + echo "現在のパス" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1。ディレクトリを入力します2。ディレクトリを作成3。ディレクトリアクセス許可を変更する4。ディレクトリの名前を変更します" + echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" + echo "15.ファイルを削除します" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" + echo "25。ファイルを別のサーバーに渡します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "ディレクトリ名を入力してください:" dirname + cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" + send_stats "ディレクトリに移動します" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "削除するには、ディレクトリ名を入力してください。" dirname + rm -rf "$dirname" && echo "ディレクトリが削除されました" || echo "削除が失敗しました" + send_stats "ディレクトリを削除します" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "前のメニューディレクトリに戻ります" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "作成するにはファイル名を入力してください。" filename + touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" + send_stats "ファイルを作成します" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "編集するにはファイル名を入力してください:" filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "ファイルを編集します" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名文件" + 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 "删除文件" + read -e -p "削除するには、ファイル名を入力してください。" filename + rm -f "$filename" && echo "削除されたファイル" || echo "削除が失敗しました" + send_stats "ファイルを削除します" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" + send_stats "圧縮ファイル/ディレクトリ" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "ファイル名(.tar.gz)を入力してください:" filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" + send_stats "ファイル/ディレクトリを解凍します" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "エラー:ファイルまたはディレクトリは存在しません。" + send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "エラー:ターゲットパスを入力してください。" + send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリは移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" + send_stats "ファイルまたはディレクトリを移動します" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "エラー:ファイルまたはディレクトリは存在しません。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "エラー:ターゲットパスを入力してください。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # -Rオプションを使用して、ディレクトリを再帰的にコピーします + cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" + send_stats "ファイルまたはディレクトリをコピーします" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "転送されるファイルパスを入力してください。" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "エラー:ファイルは存在しません。" + send_stats "ファイルの転送に失敗しました:ファイルは存在しません" continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "エラー:リモートサーバーIPを入力してください。" + send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "エラー:リモートサーバーのパスワードを入力してください。" + send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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を使用してファイルを転送します scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "スクリプトは最新です$sh_v_new" break_end ~/kejilion.sh exit @@ -13061,15 +13325,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}自動更新は閉じられています${gl_bai}" + send_stats "スクリプト自動更新を閉じます" break_end ;; *) @@ -13091,41 +13355,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "テクノロジーライオンスクリプトツールボックス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}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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}7. ${gl_bai}ワープ管理" +echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" +echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" +echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" +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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu Serverオープニングスクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "選択を入力してください:" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 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 "warp管理" ; install wget + 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 ;; @@ -13136,13 +13400,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; 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 "无效的输入!" ;; + *) echo "無効な入力!" ;; esac break_end done @@ -13150,68 +13414,68 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "Kコマンド参照ユースケース" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav | k 命令收藏夹" -echo "应用市场管理 k app" -echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "以下は、Kコマンドリファレンスユースケースです。" +echo "スクリプトkを開始します" +echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" +echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" +echo "システムKアップデートを更新| Kアップデート" +echo "クリーンシステムガベージkクリーン| kきれい" +echo "システムパネルk dd |を再インストールしますk再インストール" +echo "BBR3コントロールパネルK BBR3 | K BBRV3" +echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" +echo "仮想メモリkスワップ2048を設定します" +echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" +echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" +echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" +echo "SSHリモート接続ツールK SSH | Kリモート接続" +echo "rsyncリモート同期ツールk rsync | Kリモート同期" +echo "ハードディスク管理ツールKディスク| Kハードディスク管理" +echo "イントラネット浸透(サーバー側)K FRP" +echo "イントラネット浸透(クライアント)K FRPC" +echo "ソフトウェアStart K Start SSHD | k sshdを開始します" +echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" +echo "ソフトウェア再起動k再起動sshd | k再起動sshd" +echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" +echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" +echo "ドメイン名証明書アプリケーションK SSL" +echo "ドメイン名証明書の有効期限クエリK SSL PS" +echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" +echo "Docker Container Management K Docker PS | K Dockerコンテナ" +echo "Docker Image Management K Docker IMG | K Docker画像" +echo "LDNMPサイト管理k Web" +echo "LDNMPキャッシュクリーンアップK Webキャッシュ" +echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" +echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" +echo "ロードバランスkロードバランス| kロードバランシングをインストールします" +echo "ファイアウォールパネルk fhq | kファイアウォール" +echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" +echo "コマンドお気に入りk fav | Kコマンドのお気に入り" +echo "アプリ市場管理Kアプリ" +echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" } if [ "$#" -eq 0 ]; then - # 如果没有参数,运行交互式逻辑 + # パラメーターがない場合は、インタラクティブロジックを実行します kejilion_sh else - # 如果有参数,执行相应函数 + # パラメーターがある場合は、対応する関数を実行します case $1 in install|add|安装) shift - send_stats "安装软件" + send_stats "ソフトウェアをインストールします" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "ソフトウェアをアンインストールします" remove "$@" ;; update|更新) @@ -13245,7 +13509,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "タイム付きRSYNC同期" run_task "$@" ;; @@ -13264,7 +13528,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13277,13 +13541,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "仮想メモリをすばやく設定します" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "タイムゾーンをすばやく設定します" set_timedate "$@" ;; @@ -13331,42 +13595,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "ソフトウェアステータスビュー" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "ソフトウェアスタートアップ" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "ソフトウェアの一時停止" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "ソフトウェアの再起動" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "ソフトウェアが起動します" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "証明書のステータスを確認してください" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "すぐに証明書を申請してください" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "すぐに証明書を申請してください" else k_info fi @@ -13376,15 +13640,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Dockerをすばやくインストールします" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "クイックコンテナ管理" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "クイックミラー管理" docker_image ;; *) @@ -13411,7 +13675,7 @@ else app) shift - send_stats "应用$@" + send_stats "$@を適用します" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 1bebba7ec..114edc060 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.8" +sh_v="4.0.10" gl_hui='\e[37m' @@ -335,7 +335,7 @@ enable() { break_end() { echo -e "${gl_lv}작업이 완료되었습니다${gl_bai}" - echo "按任意键继续..." + echo "계속하려면 키를 누르십시오 ..." read -n 1 -s -r -p "" echo "" clear @@ -425,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}Docker 환경 설치 ...${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 @@ -500,55 +500,55 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker容器管理" - echo "Docker容器列表" + send_stats "도커 컨테이너 관리" + echo "도커 컨테이너 목록" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "容器操作" + echo "컨테이너 작동" echo "------------------------" - echo "1. 创建新的容器" + echo "1. 새 컨테이너를 만듭니다" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" - echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "2. 지정된 컨테이너를 시작하십시오. 6. 모든 컨테이너를 시작하십시오" + echo "3. 지정된 컨테이너를 중지하십시오. 7. 모든 컨테이너를 중지하십시오" + echo "4. 지정된 컨테이너를 삭제합니다. 8. 모든 컨테이너를 삭제하십시오" + echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" + echo "13. 컨테이너 네트워크보기 14. 컨테이너 점유보기" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + send_stats "새 컨테이너를 만듭니다" + read -e -p "창조 명령을 입력하십시오 :" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "지정된 컨테이너를 시작하십시오" + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker start $dockername ;; 3) send_stats "지정된 컨테이너를 중지하십시오" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "지정된 컨테이너를 삭제하십시오" + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" + send_stats "지정된 컨테이너를 다시 시작하십시오" read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "모든 컨테이너를 시작하십시오" docker start $(docker ps -a -q) ;; 7) @@ -556,7 +556,7 @@ while true; do docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "모든 컨테이너를 삭제하십시오" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "모든 컨테이너를 다시 시작하십시오" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "컨테이너를 입력하십시오" + read -e -p "컨테이너 이름을 입력하십시오 :" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "컨테이너 로그를 봅니다" + read -e -p "컨테이너 이름을 입력하십시오 :" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "컨테이너 네트워크를 봅니다" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "컨테이너 점유를 봅니다" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "컨테이너 포트 액세스를 허용합니다" + read -e -p "컨테이너 이름을 입력하십시오 :" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "컨테이너 포트 액세스 차단" + read -e -p "컨테이너 이름을 입력하십시오 :" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "도커 이미지 관리" + echo "도커 이미지 목록" docker image ls echo "" - echo "镜像操作" + echo "미러 작동" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1. 지정된 이미지 가져 오기 3. 지정된 이미지 삭제" + echo "2. 지정된 이미지 업데이트 4. 모든 이미지 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "거울을 당기십시오" + read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}이미지 얻기 :$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "이미지를 업데이트하십시오" + read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}업데이트 된 이미지 :$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "거울을 삭제하십시오" + read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "모든 이미지를 삭제합니다" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -754,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "지원되지 않는 분포 :$ID" return ;; esac else - echo "无法确定操作系统。" + echo "운영 체제를 결정할 수 없습니다." return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}Crontab이 설치되고 Cron 서비스가 실행 중입니다.${gl_bai}" } @@ -775,27 +775,27 @@ docker_ipv6_on() { 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处理配置文件的更新 + # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # 현재 구성에 이미 IPv6 설정이 있는지 확인하십시오 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # 구성 업데이트 및 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}" + echo -e "${gl_huang}IPv6 액세스가 현재 활성화되어 있습니다${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # 구성 파일이 있는지 확인하십시오 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}配置文件不存在${gl_bai}" + echo -e "${gl_hong}구성 파일이 존재하지 않습니다${gl_bai}" return fi - # 读取当前配置 + # 현재 구성을 읽으십시오 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 使用jq处理配置文件的更新 + # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # 현재 IPv6 상태를 확인하십시오 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # 원래 구성과 새로운 구성을 비교합니다 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 액세스는 현재 닫힙니다${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 액세스가 성공적으로 닫혔습니다${gl_bai}" fi } @@ -870,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + 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" + echo "포트가 열렸습니다$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "포트가 열렸습니다" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + 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" + echo "포트 폐쇄$port" fi done - # 删除已存在的规则(如果有) + # 기존 규칙 삭제 (있는 경우) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # 새로운 규칙을 먼저 삽입하십시오 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "포트 폐쇄" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + 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" + echo "IP 출시$ip" fi done save_iptables_rules - send_stats "已放行IP" + send_stats "IP 출시" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + 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" + echo "IP 차단$ip" fi done save_iptables_rules - send_stats "已阻止IP" + send_stats "IP 차단" } @@ -990,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # 방어 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 @@ -1000,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "DDOS 방어를 켜십시오" } -# 关闭DDoS防御 +# DDOS 방어를 끕니다 disable_ddos_defense() { - # 关闭防御 DDoS + # 방어 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 @@ -1015,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "DDOS 방어를 끕니다" } -# 管理国家IP规则的函数 +# 국가 IP 규칙을 관리하는 기능 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # IPSET가 존재하지 않는 경우 작성하십시오 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IP 영역 파일을 다운로드하십시오 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" exit 1 fi - # 将 IP 添加到 ipset + # IPSET에 IP를 추가하십시오 while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 使用 iptables 阻止 IP + # iptables와 함께 IP를 차단하십시오 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 地址" + echo "성공적으로 차단되었습니다$country_codeIP 주소" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # 허용 국가에 대한 IPSET 만들기 (존재하지 않는 경우) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IP 영역 파일을 다운로드하십시오 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" 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 + # IPSET에 IP를 추가하십시오 while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # 지정된 국가의 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 地址" + echo "성공적으로 만 허용됩니다$country_codeIP 주소" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # 국가의 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 + # ipset을 파괴하십시오 if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "성공적으로 해제했습니다$country_codeIP 주소 제한" ;; *) @@ -1116,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "고급 방화벽 관리" + send_stats "고급 방화벽 관리" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "방화벽 관리" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." + echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" - echo "7. 清除指定IP" + echo "5. IP 화이트리스트 6. IP 블랙리스트" + echo "7. 지정된 IP를 지우십시오" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. 핑 허용 12. 핑을 비활성화하십시오" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13. DDOS 방어 시작 14. DDOS 방어를 끄십시오" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15. 지정된 국가 IP 16. 지정된 국가 IP 만 허용됩니다." + echo "17. 지정된 국가에서 IP 제한을 해제합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "열린 포트 번호를 입력하십시오 :" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "지정된 포트를 엽니 다" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "지정된 포트를 닫습니다" ;; 3) - # 开放所有端口 + # 모든 포트를 엽니 다 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "모든 포트를 엽니 다" ;; 4) - # 关闭所有端口 + # 모든 포트를 닫습니다 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1180,40 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "모든 포트를 닫습니다" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IP 화이트리스트 + read -e -p "해제 할 IP 또는 IP 세그먼트를 입력하십시오." o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IP 블랙리스트 + read -e -p "차단 된 IP 또는 IP 세그먼트를 입력하십시오." c_ip block_ip $c_ip ;; 7) - # 清除指定 IP - read -e -p "请输入清除的IP: " d_ip + # 지정된 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" + send_stats "지정된 IP를 지우십시오" ;; 11) - # 允许 PING + # 핑을 허용하십시오 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 "允许PING" + send_stats "핑을 허용하십시오" ;; 12) - # 禁用 PING + # 핑을 비활성화합니다 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 "禁用PING" + send_stats "핑을 비활성화합니다" ;; 13) enable_ddos_defense @@ -1223,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "차단 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "허용 국가$country_codeIP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "허용 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "나라를 차단하십시오$country_codeIP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "나라를 정리하십시오$country_codeIP" ;; *) @@ -1257,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 현재 시스템에서 모든 스왑 파티션을 얻으십시오 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # 모든 스왑 파티션을 반복하고 삭제하십시오 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # /swapfile이 더 이상 사용되지 않도록하십시오 swapoff /swapfile - # 删除旧的 /swapfile + # 이전 /스왑 파일을 삭제하십시오 rm -f /swapfile - # 创建新的 swap 分区 + # 새 스왑 파티션을 만듭니다 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "가상 메모리 크기가 크기가 커졌습니다${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# 가상 메모리를 만들어야하는지 확인하십시오 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # 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版本 + # 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版本 + # 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版本 + # 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}" @@ -1341,7 +1341,7 @@ ldnmp_v() { 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 @@ -1350,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # 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 文件中进行替换 + # 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 @@ -1399,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP 환경이 설치되었습니다" echo "------------------------" ldnmp_v @@ -1416,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "갱신 작업이 업데이트되었습니다" } @@ -1453,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yuming공개 키 정보${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yuming개인 키 정보${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}인증서 저장 경로${gl_bai}" + echo "공개 키 :/etc/letsencrypt/live/$yuming/fullchain.pem" + echo "개인 키 :/etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}SSL 인증서를 신속하게 신청하고 만료 전에 서명을 자동으로 갱신하십시오.${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}응용 인증서 만료${gl_bai}" + echo "사이트 정보 인증서 만료 시간" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + 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 배/도메인 이름/주)을 갖습니다." + echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." break_end clear - echo "请再次尝试部署 $webname" + echo "다시 배포를 시도하십시오$webname" add_yuming install_ssltls certs_status @@ -1549,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "도메인 이름 재사용" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -1623,8 +1623,8 @@ nginx_upgrade() { 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}完成" + send_stats "고쳐 쓰다$ldnmp_pods" + echo "고쳐 쓰다${ldnmp_pods}마치다" } @@ -1643,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "로그인 정보 :" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "시작$ldnmp_pods" } @@ -1657,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # 구성 파일이 있는지 확인하십시오 if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # 구성 파일에서 API_TOKE 및 ZONE_ID를 읽으십시오 read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # 캐시 청소 여부를 사용자에게 프롬프트합니다 + 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 + 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 并执行清除缓存命令 + # 각 Zone_ID를 루프하고 CLEAR CACHE 명령을 실행하십시오. for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + 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" \ @@ -1687,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "캐시 클리어 요청이 전송되었습니다." } web_cache() { - send_stats "清理站点缓存" + send_stats "사이트 캐시를 정리하십시오" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "사이트 데이터 삭제" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "사이트 데이터를 삭제하려면 도메인 이름을 입력하십시오 (여러 도메인 이름이 공간별로 분리됩니다)." yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + 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" + # 오류를 피하기 위해 삭제하기 전에 데이터베이스가 존재하는지 확인하십시오. + echo "데이터베이스 삭제 :$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # 모드 매개 변수에 따라 WAF를 켜거나 끄기로 결정 if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # 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:加上注释 + # 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' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 오래된 정의를 삭제하십시오 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 오래된 정의를 삭제하십시오 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # Brotli를 켜십시오 : 주석을 제거하십시오 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # Brotli를 닫습니다 : 주석을 추가하십시오 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # ZSTD를 켜십시오 : 주석을 제거하십시오 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # Zstd를 닫습니다 : 주석을 추가하십시오 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi @@ -1990,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP 환경 방어" while true; do check_waf_status check_cf_mode @@ -2004,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "서버 웹 사이트 방어 프로그램${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. SSH 차단 레코드보기 6. 웹 사이트 차단 레코드보기" + echo "7. 방어 규칙 목록보기 8. 로그의 실시간 모니터링보기" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11. 인터셉트 매개 변수 구성 12. 차단 된 모든 IP를 지우십시오" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21. CloudFlare 모드 22. 5 초 방패의 높은 하중" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31. WAF 32를 켜십시오. WAF를 끄십시오" + echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 방어 프로그램을 제거하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2ban 방어 프로그램은 제거되었습니다" ;; 11) @@ -2097,11 +2097,11 @@ web_security() { ;; 21) - send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "CloudFlare 모드" + echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "CF 계정 번호를 입력하십시오." cfuser + read -e -p "CF의 글로벌 API 키를 입력하십시오." 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 @@ -2116,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "CloudFlare 모드는 CF 배경, Site-Security-Events에서 인터셉트 레코드를 보도록 구성됩니다." ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "5 초 방패의 높은 하중" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "CF 매개 변수 가져 오기 :" + echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" + echo -e "CF 배경 도메인 이름 요약 페이지의 오른쪽 하단으로 이동하려면${gl_huang}지역 ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "CF 계정 번호를 입력하십시오." cfuser + read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken + read -e -p "CF에 도메인 이름의 영역 ID를 입력하십시오." cfzonID cd ~ install jq bc @@ -2147,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "고 부하 자동 방패 오프닝 스크립트가 추가되었습니다" else - echo "自动开盾脚本已存在,无需添加" + echo "자동 방패 스크립트가 이미 존재합니다. 추가 할 필요가 없습니다." fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "사이트 waf가 활성화되어 있습니다" + send_stats "사이트 waf가 활성화되어 있습니다" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "사이트 waf가 닫혔습니다" + send_stats "사이트 waf가 닫혔습니다" ;; 33) @@ -2189,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# 현재 Worker_Processes 설정 값을 얻으십시오 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# 값에 따라 모드 정보를 설정합니다 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # ZSTD가 활성화되어 있고 주석이 없는지 확인하십시오 (전체 라인은 ZSTD 켜기로 시작합니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # Brotli가 활성화되어 있고 댓글이 없는지 확인하십시오 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "LDNMP 환경을 최적화하십시오" + echo -e "LDNMP 환경을 최적화하십시오${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1. 표준 모드 2. 고성능 모드 (2H4G 이상 권장)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3. GZIP 압축 켜기 4. GZIP 압축 끄기" + echo "5. BR 압축 켜기 6. BR 압축 끄기" + echo "7. ZSTD 압축 켜기 8. ZSTD 압축 끄기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "사이트 표준 모드" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2276,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2288,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP 환경은 표준 모드로 설정되었습니다" ;; 2) - send_stats "站点高性能模式" + send_stats "사이트 고성능 모드" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2316,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2326,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 환경은 고성능 모드로 설정되었습니다" ;; 3) @@ -2386,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker = "$ {gl_lv} $ {gl_bai} 설치" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" # fi # } @@ -2396,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "액세스 주소 :" ip_address @@ -2434,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 默认标签为 latest + # 기본 레이블이 최신입니다 [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # 공식 이미지에 대한 지원을 추가하십시오 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # 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 @@ -2477,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # 컨테이너의 IP 주소를 가져옵니다 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # 다른 모든 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 + # 지정된 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 + # 로컬 네트워크 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 + # 다른 모든 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 + # 지정된 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 + # 로컬 네트워크 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 @@ -2524,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" save_iptables_rules } @@ -2535,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # 컨테이너의 IP 주소를 가져옵니다 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # 다른 모든 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 的规则 + # 지정된 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 的规则 + # 로컬 네트워크 릴리스 규칙을 지우십시오. 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 @@ -2564,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # 다른 모든 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 的规则 + # 지정된 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 的规则 + # 로컬 네트워크 릴리스 규칙을 지우십시오. 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 @@ -2585,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+포트는 서비스에 액세스 할 수있었습니다" save_iptables_rules } @@ -2599,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." + echo "사용법 : block_host_port <포트 번호> <승인 된 ip>" return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # 다른 모든 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 访问 + # 지정된 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 @@ -2626,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # 다른 모든 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 访问 + # 지정된 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+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" save_iptables_rules } @@ -2658,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." + echo "사용법 : CLEAR_HOST_PORT_RULES <포트 번호> <승인 IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # 다른 모든 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 访问的规则 + # 지정된 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 访问的规则 + # 다른 모든 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 访问的规则 + # 지정된 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+端口访问该服务" + echo "IP+포트는 서비스에 액세스 할 수있었습니다" save_iptables_rules } @@ -2727,7 +2727,7 @@ grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker docker_app() { -send_stats "${docker_name}管理" +send_stats "${docker_name}관리하다" while true; do clear @@ -2747,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" + echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_name설치" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "설치하다$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_name설치" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新$docker_name" + send_stats "고쳐 쓰다$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "앱이 제거되었습니다" + send_stats "제거하십시오$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}도메인 액세스 설정" + send_stats "${docker_name}도메인 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IP 액세스 허용${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IP 액세스를 차단하십시오${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" + echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}도메인 액세스 설정" + send_stats "${docker_name}도메인 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IP 액세스 허용${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IP 액세스를 차단하십시오${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2995,17 @@ 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 세션을 만듭니다 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "다시 시작" reboot ;; *) - echo "已取消" + echo "취소" ;; esac @@ -3127,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "LDNMP 환경을 다시 설치할 수 없습니다" + echo -e "${gl_huang}힌트:${gl_bai}웹 사이트 구성 환경이 설치되었습니다. 다시 설치할 필요가 없습니다!" break_end linux_ldnmp fi @@ -3138,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "LDNMP 환경을 설치하십시오" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}LDNMP 환경이 설치되지 않았으며 LDNMP 환경 설치를 시작하십시오 ...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "Nginx 환경을 설치하십시오" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3169,8 @@ 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 "Nginx가 설치되었습니다" +echo -e "현재 버전 :${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "먼저 LDNMP 환경을 설치하십시오" ldnmp_install_all fi @@ -3191,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "Nginx 환경을 먼저 설치하십시오" nginx_install_all fi @@ -3202,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "당신 것$webname세워짐!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webname설치 정보는 다음과 같습니다." } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "당신 것$webname세워짐!" echo "https://$yuming" } @@ -3223,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "반세대 IP를 입력하십시오 :" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "반세대 포트를 입력하십시오 :" port fi nginx_install_status install_ssltls @@ -3297,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "공간으로 분리 된 여러 반세대 IP+ 포트를 입력하십시오 (예 : 127.0.0.1:3000 127.0.1:3002) :" reverseproxy_port fi nginx_install_status @@ -3357,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMP 사이트 관리" + echo "LDNMP 환경" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "대지:${output}인증서 만료 시간" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" - echo "3. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1. 도메인 이름 인증서 신청/업데이트 2. 사이트 도메인 이름 변경" + echo "3. 사이트 캐시 정리 4. 관련 사이트 만들기" + echo "5. 액세스 로그보기 6. 오류 로그보기" + echo "7. 글로벌 구성 편집 8. 사이트 구성 편집" + echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서보기" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20. 지정된 사이트 데이터를 삭제합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + 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 @@ -3412,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "사이트 도메인 이름을 변경하십시오" + echo -e "${gl_hong}적극 권장 :${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" + read -e -p "이전 도메인 이름을 입력하십시오 :" oddyuming + read -e -p "새 도메인 이름을 입력하십시오 :" yuming install_certbot install_ssltls certs_status - # mysql替换 + # MySQL 교체 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "관련 사이트를 만듭니다" + echo -e "액세스 용 기존 사이트의 새 도메인 이름을 연결하십시오." + read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming + read -e -p "새 도메인 이름을 입력하십시오 :" yuming install_certbot install_ssltls certs_status @@ -3476,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "액세스 로그를 봅니다" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "오류 로그를 봅니다" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "글로벌 구성 편집" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "사이트 구성 편집" + read -e -p "사이트 구성을 편집하려면 편집 할 도메인 이름을 입력하십시오." yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "사이트 데이터를 봅니다" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3535,21 +3535,21 @@ fi install_panel() { -send_stats "${panelname}管理" +send_stats "${panelname}관리하다" while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}요즘 인기 있고 강력한 운영 및 유지 관리 패널입니다." + echo "공식 웹 사이트 소개 :$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1. 설치 2. 관리 3. 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安装" + send_stats "${panelname}설치하다" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}控制" + send_stats "${panelname}제어" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}제거하십시오" ;; *) break @@ -3615,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "FRP 서버를 설치하십시오" + # 임의의 포트 및 자격 증명을 생성합니다 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3637,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # 출력 생성 정보 ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + 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 "FRP 패널 정보" + echo "FRP 패널 주소 : http : //$ipv4_address:$dashboard_port" + echo "FRP 패널 사용자 이름 :$dashboard_user" + echo "FRP 패널 비밀번호 :$dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3657,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "FRP 클라이언트를 설치하십시오" + read -e -p "외부 네트워크 도킹 IP를 입력하십시오." server_addr + read -e -p "외부 네트워크 도킹 토큰을 입력하십시오." token echo mkdir -p /home/frp @@ -3679,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "FRP 인트라넷 서비스를 추가하십시오" + # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 + read -e -p "서비스 이름을 입력하십시오 :" service_name + read -e -p "전달 유형 (TCP/UDP)을 입력하십시오 [기본 TCP 입력] :" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "인트라넷 IP를 입력하십시오 [기본값 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 + read -e -p "인트라넷 포트를 입력하십시오 :" local_port + read -e -p "외부 네트워크 포트를 입력하십시오 :" remote_port - # 将用户输入写入配置文件 + # 구성 파일에 사용자 입력을 쓰십시오 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # 출력 생성 정보 + echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다" docker restart frpc @@ -3711,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "FRP 인트라넷 서비스를 삭제하십시오" + # 삭제 해야하는 서비스 이름을 입력하라는 메시지 + read -e -p "삭제 해야하는 서비스 이름을 입력하십시오." service_name + # SED를 사용하여 서비스 및 관련 구성을 삭제하십시오. sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "제공하다$service_namefrpc.toml에서 성공적으로 삭제되었습니다" docker restart frpc @@ -3726,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # 헤더를 인쇄하십시오 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # 서비스 정보가있는 경우 새 서비스를 처리하기 전에 현재 서비스를 인쇄하십시오. if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3756,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 현재 서비스 이름을 업데이트하십시오 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 이전 값을 지우십시오 local_ip="" local_port="" remote_port="" @@ -3789,7 +3789,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 마지막 서비스에 대한 정보를 인쇄하십시오 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3802,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# 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 的端口 + # 8055/8056 이외의 포트가 있는지 확인하십시오 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3821,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # 유효한 포트가있을 때만 제목과 콘텐츠 표시 if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRP 서비스 외부 액세스 주소 :" - # 处理 IPv4 地址 + # 프로세스 IPv4 주소 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # Process IPv6 주소 (현재 경우) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3841,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # HTTPS 구성 처리 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRP 서버" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRP 서버$check_frp $update_status" + echo "FRP 인트라넷 침투 서비스 환경을 구축하여 인터넷에 공개 IP없이 장치를 노출시킵니다." + 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 "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5. 인트라넷 서비스에 대한 도메인 이름 액세스 6. 도메인 이름 액세스 삭제" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00. 서비스 상태 새로 고침 0. 이전 메뉴로 돌아갑니다." echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) install jq grep ss @@ -3902,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经安装完成" + echo "FRP 서버가 설치되었습니다" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经更新完成" + echo "FRP 서버가 업데이트되었습니다" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "리버스 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" + send_stats "외부 도메인 이름에 대한 FRP 액세스" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "인트라넷 침투 서비스 포트를 입력하십시오 :" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + 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 + send_stats "IP 액세스를 차단하십시오" + echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단할 수 있습니다." + read -e -p "차단 해야하는 포트를 입력하십시오." frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "FRP 서비스 상태를 새로 고치십시오" + echo "FRP 서비스 상태가 새로 고쳐졌습니다" ;; *) @@ -3966,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRP 클라이언트" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRP 클라이언트$check_frp $update_status" + echo "서버로 도킹, 도킹 후 인터넷 액세스에 인트라넷 침투 서비스를 만들 수 있습니다." + echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" + echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4. 외부 서비스 추가 5. 외부 서비스 삭제 6. 서비스 구성 수동으로 서비스 구성" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) install jq grep ss @@ -3999,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经安装完成" + echo "FRP 클라이언트가 설치되었습니다" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经更新完成" + echo "FRP 클라이언트가 업데이트되었습니다" ;; 3) @@ -4020,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다" ;; 4) @@ -4066,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + 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 -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 "다운로드 된 비디오 목록 :" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(아직 없음)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5. 단일 비디오 다운로드 6. 배치 비디오 다운로드 7. 사용자 정의 매개 변수 다운로드" + echo "8. MP3 오디오 9. 비디오 디렉토리 삭제 10. 쿠키 관리 (개발 중)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "옵션 번호를 입력하십시오 :" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "yt-dlp 설치 ..." + echo "yt-dlp 설치 ..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安装完成。按任意键继续..." + echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 2) - send_stats "正在更新 yt-dlp..." - echo "正在更新 yt-dlp..." + send_stats "yt-dlp 업데이트 ..." + echo "yt-dlp 업데이트 ..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意键继续..." + echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "yt-dlp 제거 ..." + echo "yt-dlp 제거 ..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + 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 "下载完成,按任意键继续..." ;; + read -e -p "다운로드가 완료되면 키를 눌러 계속하십시오 ..." ;; 6) - send_stats "批量视频下载" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 여러 비디오 링크 주소를 입력하십시오 \ n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "이제 배치 다운로드를 시작하십시오 ..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "배치 다운로드가 완료되었습니다. 키를 눌러 계속하십시오 ..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + 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 "执行完成,按任意键继续..." ;; + read -e -p "실행이 완료되면 키를 눌러 계속하십시오 ..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + 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 "音频下载完成,按任意键继续..." ;; + read -e -p "오디오 다운로드가 완료되었습니다. 키를 누르면 계속하십시오 ..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "비디오 삭제" + read -e -p "삭제 비디오의 이름을 입력하십시오." rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4195,7 @@ set_timedate() { -# 修复dpkg中断问题 +# DPKG 인터럽트 문제를 수정하십시오 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi } @@ -4231,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}시스템 정리 ...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "패키지 관리자 캐시 청소 ..." apk cache clean - echo "删除系统日志..." + echo "시스템 로그 삭제 ..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "APK 캐시 삭제 ..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "임시 파일 삭제 ..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "시스템 로그 삭제 ..." rm -rf /var/log/* - echo "删除临时文件..." + echo "임시 파일 삭제 ..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "사용하지 않는 의존성 정리 ..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "패키지 관리자 캐시 청소 ..." pkg clean -y - echo "删除系统日志..." + echo "시스템 로그 삭제 ..." rm -rf /var/log/* - echo "删除临时文件..." + echo "임시 파일 삭제 ..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi return @@ -4340,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "DNS 최적화" while true; do clear - echo "优化DNS地址" + echo "DNS 주소를 최적화합니다" echo "------------------------" - echo "当前DNS地址" + echo "현재 DNS 주소" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + 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 "2. 국내 DNS 최적화 :" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3. DNS 구성을 수동으로 편집합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "외국 DNS 최적화" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "국내 DNS 최적화" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "DNS 구성을 수동으로 편집합니다" ;; *) break @@ -4403,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # PasswordAuthentication이 발견되면 예로 설정하십시오 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 设置为 yes + # 발견 된 경우 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/' \ @@ -4417,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # PasswordAuthentication 또는 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" @@ -4428,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # 백업 SSH 구성 파일 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "SSH 포트는 다음으로 수정되었습니다.$new_port" sleep 1 @@ -4459,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "개인 키 정보가 생성되었습니다. 복사하고 저장하십시오.${gl_huang}${ipv4_address}_ssh.key${gl_bai}향후 SSH 로그인 파일" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}루트 프라이빗 키 로그인이 활성화되고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "SSH 공개 키 내용을 입력하십시오 (일반적으로 'SSH-RSA'또는 'SSH-ED25519'로 시작) :" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}오류 : 공개 키 컨텐츠가 입력되지 않았습니다.${gl_bai}" return 1 fi @@ -4499,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}공개 키가 성공적으로 가져 왔고 루트 개인 키 로그인이 활성화되었고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" } @@ -4508,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}루트 로그인이 설정되었습니다!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}힌트:${gl_bai}이 기능은 루트 사용자가 실행해야합니다!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + 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 @@ -4538,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." + echo -e "${gl_hui}Leitbogioro 및 Bin456789의 스크립트 지원 덕분에!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35. OpenSuse Tumbleweed 36. FNOS FEINIU 공개 베타 버전" 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 "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "데비안 13을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "데비안 12를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "데비안 11을 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "데비안 10을 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "우분투 24.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "우분투 22.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "Ubuntu 20.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "우분투 18.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4661,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "Rockylinux10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "Rockylinux9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "Alma10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "Alma9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "Oracle10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "Oracle9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "Fedora42를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "Fedora41을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "CentOS10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "CentOS9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "알파인을 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "아치를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "칼리를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "Openeuler를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "재설치 OpenSuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "비행 소부소" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4790,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "Windows 11을 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "Windows 10을 다시 설치하십시오" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "Windows 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 @@ -4812,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "Windows Server 22를 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "Windows Server 19를 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "Windows Server 16을 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "Windows11 Arm을 다시 설치하십시오" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3管理" + send_stats "BBRV3 관리" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "Xanmod의 BBRV3 커널을 설치했습니다" + echo "현재 커널 버전 :$kernel_version" echo "" - echo "内核管理" + echo "커널 관리" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1. BBRV3 커널 업데이트 2. BBRV3 커널 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) @@ -4884,7 +4884,7 @@ bbrv3() { # 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:添加存储库 + # 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+') @@ -4893,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "Xanmod 커널이 업데이트되었습니다. 다시 시작한 후에도 적용됩니다" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "Xanmod 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" server_reboot ;; @@ -4916,13 +4916,13 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "BBR3 가속도를 설정하십시오" + echo "비디오 소개 : https://www.bilibili.com/video/bv14k421x7bs?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "데비안/우분투 만 지원합니다" + echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) @@ -4930,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "현재 환경은이를 지원하지 않으며 데비안 및 우분투 시스템 만 지원합니다." break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "운영 체제 유형을 결정할 수 없습니다" break_end linux_Settings fi @@ -4946,7 +4946,7 @@ bbrv3() { # 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:添加存储库 + # 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+') @@ -4957,17 +4957,17 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + 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 "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac fi @@ -4976,40 +4976,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # 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" + echo "지원되지 않는 운영 체제 :$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # 감지 된 운영 체제 정보를 인쇄합니다 + echo "감지 된 운영 체제 :$os_name $os_version" + # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + 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)..." + echo "Elrepo 저장소 구성 (버전 9)을 설치하십시오 ..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "Elrepo 저장소 구성 (버전 10)을 설치하십시오 ..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "지원되지 않는 시스템 버전 :$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오. + echo "Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오 ..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "Elrepo 저장소 구성이 설치되어 최신 메인 라인 커널로 업데이트됩니다." server_reboot } @@ -5017,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "레드 모자 커널 관리" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "Elrepo 커널을 설치했습니다" + echo "현재 커널 버전 :$kernel_version" echo "" - echo "内核管理" + echo "커널 관리" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. Elrepo 커널 업데이트 2. Elrepo 커널 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "更新红帽内核" + 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 "卸载红帽内核" + echo "Elrepo 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" + send_stats "빨간 모자 커널을 제거하십시오" server_reboot ;; @@ -5060,26 +5060,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "데이터를 백업하고 Linux 커널을 업그레이드합니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "Red Hat 시리즈 배포 Centos/Redhat/Alma/Rocky/Oracle 만 지원합니다" + echo "Linux 커널을 업그레이드하면 시스템 성능 및 보안이 향상 될 수 있습니다. 조건이 허용되고 생산 환경을 조심스럽게 업그레이드하는 경우 시도하는 것이 좋습니다!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "Red Hat 커널을 업그레이드하십시오" server_reboot ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac fi @@ -5090,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}바이러스 데이터베이스 업데이트 ...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "스캔 할 디렉토리를 지정하십시오." return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + 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 命令参数 + # Clamscan 명령 매개 변수를 작성하십시오 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # Docker 명령을 실행하십시오 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5130,8 @@ clamav_scan() { 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}" + echo -e "${gl_lv}$@ scan이 완료되고 바이러스 보고서가 저장됩니다${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}바이러스가 있다면 제발${gl_huang}scan.log${gl_lv}파일에서 찾은 키워드를 검색하여 바이러스의 위치를 ​​확인하십시오.${gl_bai}" } @@ -5143,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "바이러스 스캔 관리" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "Clamav 바이러스 스캐닝 도구" + echo "비디오 소개 : https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "오픈 소스 바이러스 백신 소프트웨어 도구로 주로 다양한 유형의 맬웨어를 감지하고 제거하는 데 사용됩니다." + echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어를 포함합니다." echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리를 스캔하십시오${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "전체 디스크 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "중요한 디렉토리 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "사용자 정의 디렉토리 스캔" + read -e -p "스캔 할 디렉토리를 입력하십시오." directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5194,21 @@ clamav() { -# 高性能模式优化函数 +# 고성능 모드 최적화 기능 optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}전환하십시오${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5220,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}캐시 관리 최적화 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}기타 최적화 ...${gl_bai}" + # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # NUMA 밸런싱을 비활성화합니다 sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 均衡模式优化函数 +# 이퀄라이제이션 모드 최적화 기능 optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5261,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}캐시 관리 최적화 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}기타 최적화 ...${gl_bai}" + # 투명 페이지를 복원하십시오 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # NUMA 밸런싱을 복원하십시오 sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# 기본 설정 기능을 복원하십시오 restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}기본 설정으로 복원하십시오 ...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 디스크립터 복원 ...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + 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}" + 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 @@ -5302,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}캐시 관리 복원 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 복원 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}다른 최적화를 복원 ...${gl_bai}" + # 투명 페이지를 복원하십시오 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 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}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5344,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}캐시 관리 최적화 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}기타 최적화 ...${gl_bai}" + # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # NUMA 밸런싱을 비활성화합니다 sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linux 커널 튜닝 관리" + echo "Linux 시스템에서 커널 매개 변수의 최적화" + echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." + echo -e "${gl_huang}힌트:${gl_bai}생산 환경에서주의해서 사용하십시오!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1. 고성능 최적화 모드 : 시스템 성능을 극대화하고 파일 설명기, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." + echo "2. 균형 최적화 모드 : 매일 사용하기에 적합한 성능과 자원 소비 사이의 균형." + echo "3. 웹 사이트 최적화 모드 : 웹 사이트 서버에 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." + echo "4. 라이브 브로드 캐스트 최적화 모드 : 라이브 방송 스트리밍의 특별한 요구를 최적화하여 대기 시간을 줄이고 전송 성능을 향상시킵니다." + echo "5. 게임 서버 최적화 모드 : 게임 서버를 위해 동시 처리 기능 및 응답 속도를 향상시킬 최적화." + echo "6. 기본 설정을 복원하십시오. 시스템 설정을 기본 구성으로 복원하십시오." echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "고성능 모드 최적화" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "균형 모드 최적화" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "웹 사이트 최적화 모델" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "라이브 스트리밍 최적화" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "게임 서버 최적화" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "기본 설정을 복원하십시오" ;; *) break @@ -5446,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" hash -r break_end @@ -5455,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "지원되지 않는 시스템 :$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "지원되지 않는 시스템, 시스템 유형을 인식 할 수 없습니다." break_end fi } @@ -5475,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "스위치 시스템 언어" while true; do clear - echo "当前系统语言: $LANG" + echo "현재 시스템 언어 :$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1. 영어 2. 중국어 3. 전통 중국어" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "영어로 전환하십시오" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "단순화 된 중국어로 전환하십시오" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "전통적인 중국어로 전환하십시오" ;; *) break @@ -5519,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}변경이 완료되었습니다. 변경 사항을 볼 수 있도록 SSH를 다시 ​​연결하십시오!${gl_bai}" hash -r break_end @@ -5530,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "命令行美化工具" + send_stats "명령 라인 미화 도구" while true; do clear - echo "命令行美化工具" + 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}#" @@ -5543,9 +5543,9 @@ shell_bianse() { 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 "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -5590,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "시스템 재활용 스테이션" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5605,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "현재 재활용 쓰레기통${trash_status}" + echo -e "활성화 후 RM이 삭제 한 파일은 먼저 재활용 빈에 입력하여 중요한 파일의 잘못된 삭제를 방지합니다!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "재활용 쓰레기통은 비어 있습니다" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1. 재활용 빈을 활성화합니다. 2. 재활용 쓰레기통을 닫습니다." + echo "3. 컨텐츠를 복원 4. 재활용 쓰레기통을 지 웁니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -5623,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "Recycle Bin이 활성화되고 삭제 된 파일이 Recycle Bin으로 이동됩니다." sleep 2 ;; 2) @@ -5631,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "재활용 빈이 닫히고 파일이 직접 삭제됩니다." sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + 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 已还原到主目录。" + echo "$file_to_restore홈 디렉토리로 복원되었습니다." else - echo "文件不存在。" + echo "파일이 존재하지 않습니다." fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "재활용 쓰레기통을 지우셨습니까? [Y/N] :" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "재활용 쓰레기통이 지워졌습니다." fi ;; *) @@ -5658,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夹" +send_stats "명령 즐겨 찾기" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 创建备份 +# 백업을 만듭니다 create_backup() { - send_stats "创建备份" + send_stats "백업을 만듭니다" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # 사용자에게 백업 디렉토리를 입력하라는 메시지를 표시하십시오 + echo "백업 예제 :" + echo "- 단일 디렉토리를 백업 : /var /www" + echo "- 여러 디렉토리 백업 : /etc /home /var /log" + echo "- Direct Enter는 기본 디렉토리 ( /etc /usr /home)를 사용합니다." + read -r -p "백업 디렉토리를 입력하십시오 (여러 디렉토리가 공간별로 구분되며 직접 입력하면 기본 디렉토리를 사용하십시오)." input - # 如果用户没有输入目录,则使用默认目录 + # 사용자가 디렉토리를 입력하지 않으면 기본 디렉토리를 사용하십시오. if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5682,119 @@ create_backup() { "/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 "您选择的备份目录为:" + # 사용자가 선택한 디렉토리를 인쇄하십시오 + echo "선택한 백업 디렉토리는 다음과 같습니다." for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # 백업을 만듭니다 + echo "백업 생성$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # 명령이 성공했는지 확인하십시오 if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "백업은 성공적으로 생성되었습니다.$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "백업 생성이 실패했습니다!" exit 1 fi } -# 恢复备份 +# 백업을 복원하십시오 restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "백업을 복원하십시오" + # 복원하려는 백업을 선택하십시오 + read -e -p "복원하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME - # 检查备份文件是否存在 + # 백업 파일이 있는지 확인하십시오 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "백업 파일이 존재하지 않습니다!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "백업 복구$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "백업 및 복원을 성공적으로 복원하십시오!" else - echo "备份恢复失败!" + echo "백업 복구 실패!" exit 1 fi } -# 列出备份 +# 백업을 나열합니다 list_backups() { - echo "可用的备份:" + echo "사용 가능한 백업 :" ls -1 "$BACKUP_DIR" } -# 删除备份 +# 백업을 삭제하십시오 delete_backup() { - send_stats "删除备份" + send_stats "백업을 삭제하십시오" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "삭제하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME - # 检查备份文件是否存在 + # 백업 파일이 있는지 확인하십시오 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "백업 파일이 존재하지 않습니다!" exit 1 fi - # 删除备份 + # 백업을 삭제하십시오 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "백업이 성공적으로 삭제되었습니다!" else - echo "备份删除失败!" + echo "백업 삭제가 실패했습니다!" exit 1 fi } -# 备份主菜单 +# 백업 메인 메뉴 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "시스템 백업 기능" + echo "시스템 백업 기능" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1. 백업 만들기 2. 백업 복원 3. 백업 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르십시오 ..." done } @@ -5806,56 +5806,56 @@ linux_backup() { -# 显示连接列表 +# 연결 목록 표시 list_connections() { - echo "已保存的连接:" + 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 " - 用户名: root" - echo " - 端口: 22" + 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 "请输入用户名 (默认: root): " user + read -e -p "연결 이름을 입력하십시오 :" name + read -e -p "IP 주소를 입력하십시오 :" ip + read -e -p "사용자 이름 (기본값 : 루트)을 입력하십시오 :" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "인증 방법을 선택하십시오 :" + echo "1. 비밀번호" + echo "2. 키" + read -e -p "선택 (1/2)을 입력하십시오 :" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "비밀번호를 입력하십시오 :" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" 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" @@ -5864,89 +5864,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "잘못된 선택!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "연결이 저장됩니다!" } -# 删除连接 +# 연결을 삭제하십시오 delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "연결을 삭제하십시오" + read -e -p "삭제하려면 연결 번호를 입력하십시오." num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + 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 "连接已删除!" + echo "연결이 삭제되었습니다!" } -# 使用连接 +# 연결을 사용하십시오 use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "연결을 사용하십시오" + read -e -p "사용할 연결 번호를 입력하십시오." num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "오류 : 해당 연결을 찾을 수 없었습니다." return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + 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. 目标服务器是否允许使用密钥登录。" + 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 "오류 : 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 服务是否正常运行。" + echo "연결 실패! 다음을 확인하십시오." + echo "1. 사용자 이름과 비밀번호가 올바른지 여부." + echo "2. 대상 서버가 암호 로그인을 허용하는지 여부." + echo "3. 대상 서버의 SSH 서비스가 정상적으로 실행되는지 여부." fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "SSH 원격 연결 도구" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # 구성 파일과 키 디렉토리가 존재하는지 확인하고 존재하지 않으면 작성하십시오. if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSH 원격 연결 도구" + echo "SSH를 통해 다른 Linux 시스템에 연결할 수 있습니다" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1. 새 연결 만들기 2. 연결 사용 3. 연결 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "잘못된 선택, 다시 시도하십시오." ;; esac done } @@ -5988,156 +5988,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 사용 가능한 하드 디스크 파티션을 나열하십시오 list_partitions() { - echo "可用的硬盘分区:" + echo "사용 가능한 하드 디스크 파티션 :" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# 파티션을 장착하십시오 mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "파티션을 장착하십시오" + read -e -p "장착 할 파티션 이름을 입력하십시오 (예 : SDA1) :" PARTITION - # 检查分区是否存在 + # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "파티션이 존재하지 않습니다!" return fi - # 检查分区是否已经挂载 + # 파티션이 이미 장착되어 있는지 확인하십시오 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "파티션은 이미 장착되어 있습니다!" return fi - # 创建挂载点 + # 마운트 포인트를 만듭니다 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # 파티션을 장착하십시오 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "파티션 마운트 성공적으로 :$MOUNT_POINT" else - echo "分区挂载失败!" + echo "파티션 마운트 실패!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# 파티션을 제거하십시오 unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "파티션을 제거하십시오" + read -e -p "파티션 이름 (예 : SDA1)을 입력하십시오." PARTITION - # 检查分区是否已经挂载 + # 파티션이 이미 장착되어 있는지 확인하십시오 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "파티션이 장착되지 않았습니다!" return fi - # 卸载分区 + # 파티션을 제거하십시오 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "파티션 분할 해제 성공 :$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "파티션 제거 실패!" fi } -# 列出已挂载的分区 +# 목록 장착 파티션 list_mounted_partitions() { - echo "已挂载的分区:" + echo "마운트 파티션 :" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# 형식 파티션 format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "형식 파티션" + read -e -p "파티션 이름을 형식 (예 : SDA1)에 입력하십시오." PARTITION - # 检查分区是否存在 + # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "파티션이 존재하지 않습니다!" return fi - # 检查分区是否已经挂载 + # 파티션이 이미 장착되어 있는지 확인하십시오 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "파티션이 장착되었습니다. 먼저 제거하십시오!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # 파일 시스템 유형을 선택하십시오 + echo "파일 시스템 유형을 선택하십시오 :" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + 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 ;; + *) echo "잘못된 선택!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # 형식을 확인하십시오 + read -e -p "파티션 형식 확인 /dev /$PARTITION~을 위한$FS_TYPE그게? (Y/N) :" CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作已取消。" + echo "작업이 취소되었습니다." return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # 형식 파티션 + echo "파티션 서식 /dev /$PARTITION~을 위한$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "파티션 형식이 성공적이었습니다!" else - echo "分区格式化失败!" + echo "파티션 형식이 실패했습니다!" fi } -# 检查分区状态 +# 파티션 상태를 확인하십시오 check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "파티션 상태를 확인하십시오" + read -e -p "파티션 이름을 입력하여 확인하십시오 (예 : SDA1) :" PARTITION - # 检查分区是否存在 + # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "파티션이 존재하지 않습니다!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # 파티션 상태를 확인하십시오 + echo "파티션 /개발자 /$PARTITION상태:" fsck "/dev/$PARTITION" } -# 主菜单 +# 메인 메뉴 disk_manager() { - send_stats "硬盘管理功能" + send_stats "하드 디스크 관리 기능" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "하드 디스크 파티션 관리" + echo -e "${gl_huang}이 기능은 테스트 기간 동안 내부적으로 테스트되므로 생산 환경에서 사용하지 마십시오.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1. 파티션 마운트 2. 파티션 3. 마운트 파티션보기" + echo "4. 파티션 형식 5. 파티션 상태를 확인하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르십시오 ..." done } -# 显示任务列表 +# 작업 목록 표시 list_tasks() { - echo "已保存的同步任务:" + 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 " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + 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 + 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 + echo "인증 방법을 선택하십시오 :" + echo "1. 비밀번호" + echo "2. 키" + read -e -p "선택하십시오 (1/2) :" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "비밀번호를 입력하십시오 :" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" 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" @@ -6211,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "잘못된 키 컨텐츠!" return fi ;; *) - echo "无效的选择!" + echo "잘못된 선택!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + 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" ;; + *) 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 "任务已保存!" + echo "작업을 저장했습니다!" } -# 删除任务 +# 작업을 삭제하십시오 delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "동기화 작업을 삭제합니다" + read -e -p "삭제하려면 작업 번호를 입력하십시오." num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + 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 "任务已删除!" + echo "작업이 삭제되었습니다!" } run_task() { - send_stats "执行同步任务" + send_stats "동기화 작업을 수행하십시오" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # 매개 변수를 분석하십시오 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6278,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # 들어오는 작업 번호가없는 경우 사용자에게 입력하라는 메시지를 표시하십시오. if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "실행할 작업 번호를 입력하십시오." num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + 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" + echo "로컬로 동기화를 당기기 :$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "동기화를 원격 끝으로 푸시합니다.$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # 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 "오류 : 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" + echo "오류 : 키 파일이 존재하지 않습니다.$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "경고 : 키 파일 권한이 잘못되었고 수리 중입니다 ..." chmod 600 "$password_or_key" fi @@ -6330,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同步完成!" + echo "동기화가 완료되었습니다!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "동기화 실패! 다음을 확인하십시오." + echo "1. 네트워크 연결이 정상입니까?" + echo "2. 원격 호스트가 액세스 할 수 있습니까?" + echo "3. 인증 정보가 정확합니까?" + echo "4. 로컬 및 원격 디렉토리에 올바른 액세스 권한이 있습니까?" fi } -# 创建定时任务 +# 시간이 정한 작업을 만듭니다 schedule_task() { - send_stats "添加同步定时任务" + send_stats "동기화 타이밍 작업을 추가하십시오" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "정기적으로 동기화 할 작업 번호를 입력하십시오." num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "오류 : 유효한 작업 번호를 입력하십시오!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + 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="" @@ -6363,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) 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 "错误: 该任务的定时同步已存在!" + echo "오류 :이 작업의 타이밍 동기화가 이미 존재합니다!" return fi - # 创建到用户的 crontab + # 사용자에게 크론AB를 만듭니다 (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "타이밍 작업이 만들어졌습니다.$cron_job" } -# 查看定时任务 +# 예정된 작업을 봅니다 view_tasks() { - echo "当前的定时任务:" + echo "현재 타이밍 작업 :" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# 타이밍 작업을 삭제하십시오 delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "동기화 타이밍 작업을 삭제합니다" + read -e -p "삭제하려면 작업 번호를 입력하십시오." num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "오류 : 유효한 작업 번호를 입력하십시오!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "삭제 된 작업 번호$num타이밍 작업" } -# 任务管理主菜单 +# 작업 관리 메인 메뉴 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "RSYNC 원격 동기화 도구" + echo "원격 디렉토리 간의 동기화는 증분 동기화, 효율적이고 안정적인 지원을 지원합니다." echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1. 새 작업 생성 2. 작업을 삭제하십시오" + echo "3. 원격 끝에 로컬 동기화 수행 4. 로컬 엔드에 대한 원격 동기화 수행" + echo "5. 타이밍 작업 만들기 6. 타이밍 작업 삭제" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "잘못된 선택, 다시 시도하십시오." ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르십시오 ..." done } @@ -6448,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "시스템 정보 쿼리" ip_address @@ -6498,41 +6498,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + 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}Linux版本: ${gl_bai}$kernel_version" + 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}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}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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" + echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}네트워크 알고리즘 :${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}연산자:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4 주소 :${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}실행 시간:${gl_bai}$runtime" echo @@ -6545,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats "기본 도구" + echo -e "기본 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}컬 다운로드 도구${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}WGET 다운로드 도구${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}소사이어티 커뮤니케이션 연결 도구" + 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}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + 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}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}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}41. ${gl_bai}지정된 도구를 설치하십시오${gl_kjlan}42. ${gl_bai}지정된 도구를 제거하십시오" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." curl --help - send_stats "安装curl" + send_stats "컬을 설치하십시오" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." wget --help - send_stats "安装wget" + send_stats "wget을 설치하십시오" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." sudo --help - send_stats "安装sudo" + send_stats "Sudo를 설치하십시오" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." socat -h - send_stats "安装socat" + send_stats "Socat을 설치하십시오" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "HTOP를 설치하십시오" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "Iftop을 설치하십시오" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." unzip - send_stats "安装unzip" + send_stats "압축을 설치하십시오" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." tar --help - send_stats "安装tar" + send_stats "타르를 설치하십시오" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." tmux --help - send_stats "安装tmux" + send_stats "tmux를 설치하십시오" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." ffmpeg --help - send_stats "安装ffmpeg" + send_stats "FFMPEG를 설치하십시오" ;; 11) @@ -6657,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "Btop을 설치하십시오" ;; 12) clear @@ -6666,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "레인저를 설치하십시오" ;; 13) clear @@ -6675,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "NCDU를 설치하십시오" ;; 14) clear @@ -6684,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "FZF를 설치하십시오" ;; 15) clear @@ -6693,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "VIM을 설치하십시오" ;; 16) clear @@ -6702,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "나노를 설치하십시오" ;; @@ -6713,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "git을 설치하십시오" ;; 21) @@ -6721,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "cmatrix를 설치하십시오" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "SL을 설치하십시오" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "Bastet을 설치하십시오" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "NSNAKE를 설치하십시오" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "Ninvaders를 설치하십시오" ;; 31) clear - send_stats "全部安装" + 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 "全部安装(不含游戏和屏保)" + send_stats "모든 설치 (게임 및 스크린 세이버 제외)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + 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 + read -e -p "설치된 도구 이름 (WGET CURL SUDO HTOP)을 입력하십시오." installname install $installname - send_stats "安装指定软件" + send_stats "지정된 소프트웨어를 설치하십시오" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "제거되지 않은 도구 이름 (HTOP UFW TMUX CMATRIX)을 입력하십시오." removename remove $removename - send_stats "卸载指定软件" + send_stats "지정된 소프트웨어를 제거하십시오" ;; 0) @@ -6789,7 +6789,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -6803,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr管理" + 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 "현재 TCP 차단 알고리즘 :$congestion_algorithm $queue_algorithm" echo "" - echo "BBR管理" + echo "BBR 관리" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1. BBRV3 켜기 2. BBRV3 끄기 (재시작)" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "알파인 활성화 BBR3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6854,37 +6854,37 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # Send_stats "Docker Management" + echo -e "도커 관리" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker 환경을 설치하고 업데이트하십시오${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}Docker Global Status를 봅니다${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + 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}清理无用的docker容器和镜像网络数据卷" + 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}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}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}卸载Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경을 제거하십시오" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "Docker 환경을 설치하십시오" install_add_docker ;; @@ -6895,22 +6895,22 @@ linux_docker() { 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 "docker全局状态" - echo "Docker版本" + send_stats "도커 글로벌 상태" + echo "도커 버전" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "도커 이미지 :${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "도커 컨테이너 :${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "도커 네트워크 :${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -6925,8 +6925,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "도커 네트워크 관리" + echo "도커 네트워크 목록" echo "------------------------------------------------------------" docker network ls echo "" @@ -6950,36 +6950,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "네트워크 작동" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1. 네트워크를 만듭니다" + echo "2. 인터넷에 가입하십시오" + echo "3. 네트워크를 종료하십시오" + echo "4. 네트워크를 삭제합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "네트워크를 만듭니다" + read -e -p "새 네트워크 이름 설정 :" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + 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 + send_stats "인터넷에 가입하십시오" + read -e -p "종료 네트워크 이름 :" dockernetwork + read -e -p "해당 컨테이너는 네트워크를 종료합니다 (여러 컨테이너 이름은 공간별로 분리됩니다)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -6988,8 +6988,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "네트워크를 삭제하십시오" + read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork docker network rm $dockernetwork ;; @@ -7003,29 +7003,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" - echo "Docker卷列表" + send_stats "도커 볼륨 관리" + echo "도커 볼륨 목록" docker volume ls echo "" - echo "卷操作" + echo "볼륨 작동" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1. 새 볼륨을 만듭니다" + echo "2. 지정된 볼륨을 삭제합니다" + echo "3. 모든 볼륨을 삭제하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + send_stats "새 볼륨을 만듭니다" + read -e -p "새 볼륨 이름 설정 :" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "볼륨 삭제 이름을 입력하십시오 (공백으로 여러 볼륨 이름을 분리하십시오)." dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7034,7 +7034,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "모든 볼륨을 삭제하십시오" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7043,7 +7043,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -7056,7 +7056,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker清理" + send_stats "도커 청소" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7065,13 +7065,13 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 8) clear - send_stats "Docker源" + send_stats "도커 소스" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7084,19 +7084,19 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker V6 열기" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker V6 레벨" docker_ipv6_off ;; 20) clear - send_stats "Docker卸载" + send_stats "Docker는 제거합니다" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7108,7 +7108,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -7117,7 +7117,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -7134,151 +7134,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # 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}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + 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 스트리밍 미디어 잠금 해제 탐지" + echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" + echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" + echo -e "${gl_kjlan}17. ${gl_bai}I-ABC 다기능 속도 테스트 스크립트" + echo -e "${gl_kjlan}18. ${gl_bai}Netquality Network 품질 신체 검사 스크립트${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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}하드웨어 성능 테스트" + echo -e "${gl_kjlan}21. ${gl_bai}YABS 성능 테스트" + echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPU 성능 테스트 스크립트" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "ChatGpt는 상태 감지를 잠금 해제합니다" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "지역 스트리밍 미디어 잠금 해제 테스트" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "YEAHWU 스트리밍 미디어 잠금 해제 탐지" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "xykt_ip 품질 신체 검사 스크립트" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "MTR_TRACE 3 개의 네트워크 리턴 라인 테스트" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "Superspeed 3 Net 속도 측정" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace 빠른 백홀 테스트 스크립트" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" + 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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + 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 "광저우 통신 : 58.60.188.222" + echo "광저우 유니폼 : 210.21.196.6" + echo "광저우 모바일 : 120.196.165.24" + echo "청두 통신 : 61.139.2.69" + echo "청두 유니폼 : 119.6.6.6" + echo "청두 모바일 : 211.137.96.205" + echo "Hunan Telecom : 36.111.200.100" + echo "후난 유니폼 : 42.48.16.100" + echo "후난 모바일 : 39.134.254.6" echo "------------------------" - read -e -p "输入一个指定IP: " testip + read -e -p "지정된 IP를 입력하십시오." testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "Ludashi2020 3 네트워크 라인 테스트" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "I-ABC 다기능 속도 테스트 스크립트" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "네트워크 품질 테스트 스크립트" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "YABS 성능 테스트" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "IICU/GB5 CPU 성능 테스트 스크립트" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "벤치 성능 테스트" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + 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 ;; @@ -7288,7 +7288,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -7304,51 +7304,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + 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}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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + echo "활성 스크립트 : CPU는 10-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 + # 사용자에게 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 + 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 + read -e -p "메모리 사용 백분율을 입력하십시오 [기본값 :$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "스피드 테스트 간격 시간 (초)을 입력하십시오 [기본값 :$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # 도커 컨테이너를 실행하십시오 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7356,14 +7356,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "Oracle Cloud 설치 활성 스크립트" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -7371,20 +7371,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" ;; 3) clear - echo "重装系统" + echo "시스템을 다시 설치하십시오" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + 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 + read -e -p "다시 설치할 시스템을 선택하십시오 : 1. Debian12 | 2. Ubuntu20.04 :" sys_choice case "$sys_choice" in 1) @@ -7396,28 +7396,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "유효하지 않은 선택, 다시 입력하십시오." ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + 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 "甲骨文云重装系统脚本" + send_stats "Oracle Cloud 회복 시스템 스크립트" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "이 기능은 개발 단계에 있으므로 계속 지켜봐 주시기 바랍니다!" ;; 5) clear @@ -7427,15 +7427,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "이 기능은 마스터 JHB가 제공합니다." + send_stats "IPv6 수정" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -7456,7 +7456,7 @@ docker_tato() { 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}" + 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 } @@ -7477,7 +7477,7 @@ 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" + echo -e "${gl_lv}환경이 설치됩니다${gl_bai}대지:$output데이터 베이스:$db_output" fi fi @@ -7505,31 +7505,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP建站" - echo -e "${gl_huang}LDNMP建站" + # 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}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}LDNMP 환경을 설치하십시오${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPress를 설치하십시오${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Discuz 포럼을 설치하십시오${gl_huang}4. ${gl_bai}Kadao 클라우드 데스크탑을 설치하십시오" + echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" + echo -e "${gl_huang}7. ${gl_bai}Flarum Forum 웹 사이트를 설치하십시오${gl_huang}8. ${gl_bai}Typecho Lightweight 블로그 웹 사이트를 설치하십시오" + 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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}nginx 만 설치하십시오${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}사이트 리디렉션" + echo -e "${gl_huang}23. ${gl_bai}사이트 리버스 프록시 -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}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}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}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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -7543,10 +7543,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # Discuz 포럼 webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7569,21 +7569,21 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "테이블 접두사 : discuz_" ;; 4) clear - # 可道云桌面 + # Kedao 클라우드 데스크탑 webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7605,20 +7605,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "데이터베이스 주소 : MySQL" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "데이터베이스 이름 :$dbname" + echo "Redis 호스트 : Redis" ;; 5) clear - # 苹果CMS + # Apple CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7644,24 +7644,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 포트 : 3306" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "데이터베이스 접두사 : MAC_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "설치가 성공한 후 배경 주소에 로그인하십시오." echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # 한 다리 카운팅 카드 webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7682,34 +7682,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 포트 : 3306" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" echo "" - echo "redis地址: redis" - echo "redis密码: 默认不填写" - echo "redis端口: 6379" + echo "Redis 주소 : Redis" + echo "Redis Password : 기본적으로 채워지지 않습니다" + echo "Redis Port : 6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "웹 사이트 URL : https : //$yuming" + echo "백그라운드 로그인 경로 : /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "사용자 이름 : 관리자" + echo "비밀번호 : 관리자" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "로그인 할 때 오른쪽 상단에 빨간색 Error0이 나타나면 다음 명령을 사용하십시오." + echo "나는 또한 유니콘 번호 카드가 너무 귀찮다는 것에 대해 매우 화가 났으며 그러한 문제가있을 것입니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # Flarum 포럼 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7746,12 +7746,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "테이블 접두사 : flarum_" + echo "관리자 정보는 직접 설정됩니다" ;; @@ -7759,8 +7759,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7784,11 +7784,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "데이터베이스 접두사 : typecho_" + echo "데이터베이스 주소 : MySQL" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "데이터베이스 이름 :$dbname" ;; @@ -7797,8 +7797,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7823,18 +7823,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 포트 : 3306" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7851,10 +7851,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드하십시오" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -7864,20 +7864,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + 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 + read -e -p "(/home/web/html/와 유사한 Index.php의 경로를 입력하십시오.$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 -e "[${gl_huang}3/6${gl_bai}] PHP 버전을 선택하십시오" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + 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 @@ -7888,15 +7888,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "유효하지 않은 선택, 다시 입력하십시오." ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}] 지정된 확장자를 설치하십시오" echo "-------------" - echo "已经安装的扩展" + echo "설치된 확장" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -7906,25 +7906,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}] 사이트 구성 편집" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 데이터베이스 관리" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 작성하고 데이터베이스 백업이 있습니다." use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." + read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -7934,10 +7934,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "데이터베이스 가져 오기 테이블 데이터" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "데이터베이스 가져 오기가 완료되었습니다" ;; *) echo @@ -7949,12 +7949,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "테이블 접두사 :$prefix" + echo "관리자 로그인 정보는 직접 설정됩니다" ;; @@ -7967,10 +7967,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "점프 도메인 이름을 입력하십시오 :" reverseproxy nginx_install_status install_ssltls certs_status @@ -7992,7 +7992,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8003,11 +8003,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "도메인 이름 형식 :${gl_huang}google.com${gl_bai}" + read -e -p "반세기 도메인 이름을 입력하십시오 :" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8027,8 +8027,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming nginx_install_status install_ssltls @@ -8050,8 +8050,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming nginx_install_status install_ssltls @@ -8068,8 +8068,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming nginx_install_status install_ssltls @@ -8102,8 +8102,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8120,10 +8120,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드를 업로드하십시오" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8133,12 +8133,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + 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 + read -e -p "(/home/web/html/와 유사한 index.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 @@ -8163,21 +8163,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP 환경 백업" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "백업 파일이 작성되었습니다 : /home /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "오류 : 원격 서버 IP를 입력하십시오." continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8185,9 +8185,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일은 찾을 수 없었습니다." fi break ;; @@ -8195,7 +8195,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac done @@ -8203,9 +8203,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + 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 @@ -8215,18 +8215,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1. 주간 백업 2. 매일 백업" + read -e -p "선택을 입력하십시오 :" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + 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 + read -e -p "매일 백업 시간을 선택하십시오 (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8240,19 +8240,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP 환경 복원" + echo "사용 가능한 사이트 백업" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + 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 @@ -8262,7 +8262,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8271,7 +8271,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "압축 패키지가 발견되지 않았습니다." fi ;; @@ -8289,11 +8289,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "LDNMP 환경을 업데이트하십시오" + echo "LDNMP 환경을 업데이트하십시오" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "구성 요소의 새 버전을 발견하십시오" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8313,13 +8313,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" + echo "1. Nginx 업데이트 2. MySQL 업데이트 3. PHP 업데이트 4. Redis 업데이트" echo "------------------------" - echo "5. 更新完整环境" + echo "5. 전체 환경을 업데이트하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8328,7 +8328,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "입력하십시오${ldnmp_pods}버전 번호 (예 : 8.0 8.3 8.4 9.0) (최신 버전을 얻으려면 입력) :" version local version=${version:-latest} cd /home/web/ @@ -8339,13 +8339,13 @@ linux_ldnmp() { 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}完成" + 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 + 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 @@ -8378,8 +8378,8 @@ linux_ldnmp() { 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}完成" + send_stats "고쳐 쓰다$ldnmp_pods" + echo "고쳐 쓰다${ldnmp_pods}마치다" ;; 4) @@ -8390,15 +8390,15 @@ linux_ldnmp() { 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}完成" + 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环境" + send_stats "LDNMP 환경을 완전히 업데이트하십시오" cd /home/web/ docker compose down --rmi all @@ -8424,7 +8424,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "LDNMP 환경을 제거하십시오" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8438,7 +8438,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -8448,7 +8448,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "잘못된 입력!" esac break_end @@ -8468,12 +8468,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "应用市场" + echo -e "응용 프로그램 시장" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # 루프로 색상을 설정하십시오 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8482,62 +8482,67 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1 파넬 신세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" + echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}우분투 원격 데스크탑 웹 에디션" + echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" + echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}Rocketchat 멀티 플레이어 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}Zendao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" + echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" + echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" + echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" + echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" + echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" + echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" + echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}Stirlingpdf 도구 컬렉션${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" + echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" + echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" + echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}Websh 웹 버전 SSH 연결 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" + echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdesk 원격 책상 (릴레이)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" + echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹 사이트 빌딩 관리 패널" + echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}점프 서버 오픈 소스 요새 기계" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" + echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" + echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" + echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" + echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" + echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" + echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" + echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" - echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" + echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" + echo -e "${gl_kjlan}85. ${color85}Immich 사진 비디오 관리자${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" + echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" + echo -e "${gl_kjlan}89. ${color89}filecodebox 파일 Express${gl_kjlan}90. ${color90}매트릭스 분산 채팅 프로토콜" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice fi case $sub_choice in @@ -8687,7 +8692,8 @@ while true; do docker_rum() { - + read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 비밀번호 설정 :" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -8696,8 +8702,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ @@ -8711,8 +8717,8 @@ while true; do local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app @@ -8720,7 +8726,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "Nezha를 구축하십시오" local app_id="7" local docker_name="nezha-dashboard" @@ -8729,20 +8735,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒监控 $check_docker $update_status" - echo "开源、轻量、易用的服务器监控与运维工具" - echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + echo -e "Nezha 모니터링$check_docker $update_status" + echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" + echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 使用" + echo "1. 사용" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -8799,7 +8805,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "우체국을 건설하십시오" clear install telnet local app_id="9" @@ -8809,43 +8815,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "우체국 서비스$check_docker $update_status" + echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}포트$port현재 사용 가능합니다${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}포트$port현재 사용할 수 없습니다${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "액세스 주소 :" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "이메일 도메인 이름 (예 : Mail.yuming.com)을 설정하십시오." yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "이 DNS 레코드를 먼저 구문 분석하십시오" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -8855,7 +8861,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "계속하려면 키를 누르십시오 ..." read -n 1 -s -r -p "" install jq @@ -8874,9 +8880,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.io가 설치되었습니다" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." echo "https://$yuming" echo "" @@ -8899,9 +8905,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.io가 설치되었습니다" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." echo "https://$yuming" echo "" ;; @@ -8912,7 +8918,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다" ;; *) @@ -8946,7 +8952,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -8956,7 +8962,7 @@ while true; do 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已经安装完成" + echo "Rocket.chat이 설치되었습니다" check_docker_app_ip } @@ -8966,7 +8972,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -9050,7 +9056,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -9064,7 +9070,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -9209,7 +9215,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "천둥 수영장을 건설하십시오" local app_id="19" local docker_name=safeline-mgt @@ -9217,20 +9223,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "썬더 풀 서비스$check_docker" + echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1. 설치 2. 업데이트 3. 비밀번호 재설정 4. 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -9240,7 +9246,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经安装完成" + echo "Thunder Pool WAF 패널이 설치되었습니다" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9253,7 +9259,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经更新完成" + echo "Thunder Pool WAF 패널이 업데이트되었습니다" check_docker_app_ip ;; 3) @@ -9264,7 +9270,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9383,7 +9389,8 @@ while true; do docker_rum() { - + read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 비밀번호 설정 :" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -9392,8 +9399,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ @@ -9404,14 +9411,13 @@ while true; do --restart unless-stopped \ lscr.io/linuxserver/webtop:latest - } local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app ;; @@ -9672,7 +9678,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -9725,7 +9731,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya 가족 버킷" clear install_docker check_disk_space 1 @@ -9927,9 +9933,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "설치" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" } docker_app_update() { @@ -9947,7 +9953,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10034,7 +10040,7 @@ while true; do 51|pve) clear - send_stats "PVE开小鸡" + send_stats "PVE 치킨" 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 ;; @@ -10154,7 +10160,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10169,7 +10175,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10197,7 +10203,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10212,7 +10218,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10220,7 +10226,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10241,17 +10247,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "설치" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "초기 사용자 이름 : 관리자" + echo "초기 비밀번호 : changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "앱이 업데이트되었습니다" } @@ -10261,7 +10267,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10308,7 +10314,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10324,7 +10330,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10586,7 +10592,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd docker run -d \ --name libretv \ @@ -10607,32 +10613,55 @@ while true; do ;; + 74|moontv) local app_id="74" - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - docker_rum() { + local app_name="moontv私有影视" + local app_text="免费在线视频搜索与观看平台" + local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local docker_name="moontv-core" + local docker_port="8074" + local app_size="2" + + docker_app_install() { + read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "인증 코드를 입력하십시오." shouquanma + + + mkdir -p /home/docker/moontv + mkdir -p /home/docker/moontv/config + mkdir -p /home/docker/moontv/data + cd /home/docker/moontv + + curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + cd /home/docker/moontv/ + docker compose up -d + clear + echo "설치" + check_docker_app_ip + } + - read -e -p "设置MoonTV的登录密码: " app_passwd + docker_app_update() { + cd /home/docker/moontv/ && docker compose down --rmi all + cd /home/docker/moontv/ && docker compose up -d + } - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + docker_app_uninstall() { + cd /home/docker/moontv/ && docker compose down --rmi all + rm -rf /home/docker/moontv + echo "앱이 제거되었습니다" } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker_app_plus ;; @@ -10702,8 +10731,8 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录用户名: " app_use - read -e -p "设置${docker_name}的登录密码: " app_passwd + read -e -p "로그인 사용자 이름 설정 :" app_use + read -e -p "로그인 비밀번호 설정 :" app_passwd docker run -d \ --name xunlei \ @@ -10800,11 +10829,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # 임의의 키와 암호를 생성합니다 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -10813,17 +10842,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 관리자 계정 정보를 추가하십시오 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # 컨테이너를 시작하십시오 docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10833,7 +10862,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 원래 변수를 유지하십시오 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -10850,7 +10879,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10900,7 +10929,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10918,10 +10947,12 @@ while true; do docker_rum() { + read -e -p "설정${docker_name}SK-159KEJILIONYYDS163 :와 같은 로그인 키 (SK 별 문자 및 숫자 조합) :" app_passwd + mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ + -e AUTH_KEY=${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest @@ -10929,7 +10960,7 @@ while true; do local docker_describe="高性能AI接口透明代理服务" local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_use="" local docker_passwd="" local app_size="1" docker_app @@ -11020,7 +11051,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -11033,7 +11064,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11136,6 +11167,239 @@ while true; do ;; + + 89|file-code-box) + + local app_id="89" + local docker_name="file-code-box" + local docker_img="lanol/filecodebox:latest" + local docker_port=8089 + + docker_rum() { + + docker run -d \ + --name file-code-box \ + -p ${docker_port}:12345 \ + -v /home/docker/file-code-box/data:/app/data \ + --restart unless-stopped \ + lanol/filecodebox:latest + + } + + local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" + local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + + 90|matrix) + + local app_id="90" + local docker_name="matrix" + local docker_img="matrixdotorg/synapse:latest" + local docker_port=8090 + + docker_rum() { + + add_yuming + + if [ ! -d /home/docker/matrix/data ]; then + docker run -it --rm \ + -v /home/docker/matrix/data:/data \ + -e SYNAPSE_SERVER_NAME=${yuming} \ + -e SYNAPSE_REPORT_STATS=yes \ + --name matrix \ + matrixdotorg/synapse:latest generate + fi + + docker run -d \ + --name matrix \ + -v /home/docker/matrix/data:/data \ + -p ${docker_port}:8008 \ + --restart unless-stopped \ + matrixdotorg/synapse:latest + + echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." + docker exec -it matrix register_new_matrix_user \ + http://localhost:8008 \ + -c /data/homeserver.yaml + + sed -i '/^enable_registration:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration: true' /home/docker/matrix/data/homeserver.yaml + sed -i '/^enable_registration_without_verification:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration_without_verification: true' /home/docker/matrix/data/homeserver.yaml + + docker restart matrix + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + local docker_describe="Matrix是一个去中心化的聊天协议" + local docker_url="官网介绍: https://matrix.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 91|gitea) + + local app_id="91" + + local app_name="gitea私有代码仓库" + local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" + local app_url="视频介绍: https://github.com/go-gitea/gitea" + local docker_name="gitea" + local docker_port="8091" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/gitea + mkdir -p /home/docker/gitea/gitea + mkdir -p /home/docker/gitea/data + mkdir -p /home/docker/gitea/postgres + cd /home/docker/gitea + + curl -o /home/docker/gitea/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/gitea-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/gitea/docker-compose.yml + cd /home/docker/gitea/ + docker compose up -d + clear + echo "설치" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/gitea/ && docker compose down --rmi all + cd /home/docker/gitea/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/gitea/ && docker compose down --rmi all + rm -rf /home/docker/gitea + echo "앱이 제거되었습니다" + } + + docker_app_plus + + ;; + + + + + 92|filebrowser) + + local app_id="92" + local docker_name="filebrowser" + local docker_img="hurlenko/filebrowser" + local docker_port=8092 + + docker_rum() { + + docker run -d \ + --name filebrowser \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v /home/docker/filebrowser/data:/data \ + -v /home/docker/filebrowser/config:/config \ + -e FB_BASEURL=/filebrowser \ + hurlenko/filebrowser + + } + + local docker_describe="是一个基于Web的文件管理器" + local docker_url="官网介绍: https://filebrowser.org/" + local docker_use="docker logs filebrowser" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + b) + clear + send_stats "모든 응용 프로그램 백업" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "파일은 원격 서버/루트 디렉토리로 전송되었습니다." + else + echo "전송할 파일은 찾을 수 없었습니다." + fi + break + ;; + *) + echo "참고 : 현재 백업에는 Docker 프로젝트 만 포함되어 있으며 Pagoda 및 1Panel과 같은 웹 사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "모든 응용 프로그램이 복원됩니다" + echo "사용 가능한 앱 백업" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # 사용자가 파일 이름을 입력하지 않으면 최신 압축 패키지를 사용하십시오. + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "응용 프로그램 데이터가 복원되었습니다. 지정된 응용 프로그램 메뉴를 수동으로 입력하고 응용 프로그램을 업데이트하여 응용 프로그램을 복원하십시오." + else + echo "압축 패키지가 발견되지 않았습니다." + fi + + ;; + 0) kejilion ;; @@ -11153,35 +11417,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "백엔드 작업 공간" + echo -e "백엔드 작업 공간" + echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." + echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." + echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}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}작업 공간 No. 4" + echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" + echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" + echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" + echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" + echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 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}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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -11189,7 +11453,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -11197,63 +11461,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -11265,21 +11529,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH 거주 모드" + echo -e "SSH 거주 모드${tmux_sshd_status}" + echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1. 2를 켜십시오. 2를 끕니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -11295,29 +11559,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "사용자 정의 작업 공간" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "배경 작업 공간에 명령을 주입합니다" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "작업 공간을 삭제합니다" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -11342,54 +11606,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}스크립트 스타트 업 단축키 키를 설정하십시오${gl_kjlan}2. ${gl_bai}로그인 암호를 수정하십시오" + echo -e "${gl_kjlan}3. ${gl_bai}루트 암호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python을 설치하십시오" + 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + 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 고위험 취약점을 수정하십시오" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "바로 가기 키가 설정되어 있습니다" + send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings done @@ -11397,34 +11661,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "로그인 비밀번호를 설정하십시오" + echo "로그인 비밀번호를 설정하십시오" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "루트 비밀번호 모드" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "PY 버전 관리" + echo "파이썬 버전 관리" + echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + 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 "권장 버전 : 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 + read -e -p "설치하려는 Python 버전 번호를 입력하십시오 (종료하려면 0을 입력하십시오) :" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "스크립트 PY 관리" break_end linux_Settings fi @@ -11457,7 +11721,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi @@ -11486,55 +11750,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + send_stats "스크립트 Py 버전을 스위치하십시오" ;; 5) root_use - send_stats "开放端口" + send_stats "포트 열기" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "모든 포트가 열려 있습니다" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "SSH 포트를 수정하십시오" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 현재 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}" + # 현재 SSH 포트 번호를 인쇄하십시오 + echo -e "현재 SSH 포트 번호는 다음과 같습니다.${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # 사용자에게 새 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端口已修改" + send_stats "SSH 포트가 수정되었습니다" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "SSH 포트 수정을 종료하십시오" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." + send_stats "잘못된 SSH 포트 입력" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "입력이 유효하지 않으므로 번호를 입력하십시오." + send_stats "잘못된 SSH 포트 입력" break_end fi done @@ -11553,8 +11817,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "신규 사용자는 루트를 비활성화합니다" + read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -11569,49 +11833,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "V4/V6 우선 순위를 설정하십시오" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv4${gl_bai}우선 사항" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1. IPv4 우선 순위 2. IPv6 우선 순위 3. IPv6 수리 도구" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "IPv4 우선 순위로 전환되었습니다" + send_stats "IPv4 우선 순위로 전환되었습니다" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "IPv6 우선 순위로 전환되었습니다" + send_stats "IPv6 우선 순위로 전환되었습니다" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "이 기능은 마스터 JHB가 제공합니다." + send_stats "IPv6 수정" ;; *) @@ -11629,43 +11893,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "가상 메모리를 설정합니다" while true; do clear - echo "设置虚拟内存" + 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 -e "현재 가상 메모리 :${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G 가상 메모리가 설정되었습니다" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G 가상 메모리가 설정되었습니다" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "사용자 정의 가상 메모리가 설정되었습니다" ;; *) @@ -11678,8 +11942,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "사용자 관리" + echo "사용자 목록" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -11690,62 +11954,62 @@ EOF echo "" - echo "账户操作" + echo "계정 운영" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." echo "------------------------" - echo "5. 删除账号" + echo "5. 계정을 삭제하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + read -e -p "새 사용자 이름을 입력하십시오 :" new_username - # 创建新用户并设置密码 + # 새 사용자를 생성하고 비밀번호를 설정하십시오 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + read -e -p "새 사용자 이름을 입력하십시오 :" new_username - # 创建新用户并设置密码 + # 새 사용자를 생성하고 비밀번호를 설정하십시오 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 새로운 사용자에게 허가를 부여하십시오 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "사용자 이름을 입력하십시오 :" username + # 새로운 사용자에게 허가를 부여하십시오 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "사용자 이름을 입력하십시오 :" username + # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "삭제하려면 사용자 이름을 입력하십시오." username + # 사용자와 홈 디렉토리를 삭제하십시오 userdel -r "$username" ;; @@ -11758,50 +12022,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "사용자 정보 생성기" + echo "임의의 사용자 이름" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "임의의 사용자 이름$i: $username" done echo "" - 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个随机用户姓名 + # 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" + echo "임의의 사용자 이름$i: $user_name" done echo "" - echo "随机UUID" + echo "무작위 uuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "무작위 uuid$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "랜덤 비밀번호$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "랜덤 비밀번호$i: $password" done echo "" @@ -11809,46 +12073,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "시간대를 변경하십시오" while true; do clear - echo "系统时间信息" + echo "시스템 시간 정보" - # 获取当前系统时区 + # 현재 시스템 시간대를 얻으십시오 local timezone=$(current_timezone) - # 获取当前系统时间 + # 현재 시스템 시간을 얻으십시오 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # 시간대와 시간을 보여줍니다 + echo "현재 시스템 시간대 :$timezone" + echo "현재 시스템 시간 :$current_time" echo "" - echo "时区切换" + echo "시간대 스위칭" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + echo "아시아" + echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" + echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" + echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" + echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" + echo "9. 태국 방콕에서의 시간" echo "------------------------" - echo "欧洲" - echo "11. 英国伦敦时间 12. 法国巴黎时间" - echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" - echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" + echo "유럽" + echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" + echo "13. 베를린 시간, 독일 14. 모스크바 시간, 러시아" + echo "15. 네덜란드에서 우트레흐트 시간 16. 스페인의 마드리드 시간" echo "------------------------" - echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "미국" + echo "21. 서양 시간 22. 동부 시간" + echo "23. 캐나다 시간 24. 멕시코 시간" + echo "25. 브라질 시간 26. 아르헨티나 시간" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31. UTC 글로벌 표준 시간" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -11891,21 +12155,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "호스트 이름을 수정하십시오" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # Debian, Ubuntu, Centos 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -11923,11 +12187,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" + send_stats "호스트 이름이 변경되었습니다" sleep 1 else - echo "已退出,未更改主机名。" + echo "종료, 호스트 이름이 변경되지 않았습니다." break fi done @@ -11935,32 +12199,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "시스템 업데이트 소스를 변경하십시오" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "업데이트 소스 영역을 선택하십시오" + echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "중국 본토의 기본 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "중국 본토의 교육 원" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "해외 출신" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "취소" ;; esac @@ -11968,62 +12232,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "타이밍 작업 관리" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "시간이 정한 작업 목록" crontab -l echo "" - echo "操作" + echo "작동하다" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1. 월간 작업 2. 주간 작업" + echo "3. 일일 작업 4. 시간당 작업" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "선택을 입력하십시오 :" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "매일 작업을 수행 할 시간을 선택하십시오. (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "시간이 정한 작업을 추가하십시오" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "타이밍 작업을 삭제하십시오" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "타이밍 작업 편집" ;; *) break # 跳出循环,退出菜单 @@ -12035,32 +12299,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "지역 호스트 구문 분석" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "기본 호스트 구문 분석 목록" + echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." cat /etc/hosts echo "" - echo "操作" + echo "작동하다" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "선택을 입력하십시오 :" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "로컬 호스트 구문 분석이 추가되었습니다" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "로컬 호스트 구문 분석 및 삭제" ;; *) break # 跳出循环,退出菜单 @@ -12071,7 +12335,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "SSH 방어" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12083,20 +12347,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH 방어 프로그램$check_docker" + echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" + echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2. SSH 차단 레코드보기" + echo "3. 실시간 로그 모니터링" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 방어 프로그램을 제거하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) install_docker @@ -12119,7 +12383,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2ban 방어 프로그램은 제거되었습니다" ;; *) break @@ -12132,47 +12396,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "현재 제한 종료 기능" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "현재 제한 종료 기능" + echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" + echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # limiting_shut_down.sh 파일이 있는지 확인하십시오 if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # threshold_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}" + 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}" + echo -e "${gl_hui}전류 제한 종료 기능이 활성화되지 않았습니다${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 새 가상 메모리 크기를 입력하십시오 + echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." + read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day cz_day=${cz_day:-1} cd ~ @@ -12185,15 +12449,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "전류 제한 종료 기능이 꺼졌습니다" ;; *) break @@ -12206,40 +12470,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "개인 키 로그인" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "루트 비공개 키 로그인 모드" + echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "선택을 입력하십시오 :" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "새로운 키를 생성하십시오" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "기존 공개 키를 가져옵니다" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "로컬 비밀 키를보십시오" echo "------------------------" - echo "公钥信息" + echo "공개 키 정보" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "개인 키 정보" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12255,18 +12519,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "전보 경고" + echo "TG-BOT 모니터링 및 조기 경고 기능" + echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." + echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." + echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "전보 경고가 활성화되었습니다" cd ~ install nano tmux bc jq check_crontab_installed @@ -12288,7 +12552,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # ~/.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 @@ -12299,21 +12563,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-BOT 조기 경고 시스템이 시작되었습니다" + echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -12357,7 +12621,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -12380,61 +12644,61 @@ EOF 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "게시판" + echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "원 스톱 튜닝 시작" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 시간대를 설정하십시오${gl_huang}상하이${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -12451,25 +12715,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux 시스템의 커널 매개 변수 최적화" + echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac @@ -12477,7 +12741,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하십시오" server_reboot ;; 100) @@ -12493,32 +12757,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" + echo "개인 정보 및 보안" echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "현재 상태 :$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1. 수집을 켭니다" + echo "2. 컬렉션을 닫습니다" echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "컬렉션이 닫혔습니다" + send_stats "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" ;; *) break @@ -12534,11 +12798,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "기술 라이온 스크립트를 제거하십시오" + echo "기술 라이온 스크립트를 제거하십시오" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) @@ -12546,16 +12810,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "대본은 제거되었습니다." break_end clear exit ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -12565,7 +12829,7 @@ EOF ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -12583,187 +12847,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "파일 관리자" while true; do clear - echo "文件管理器" + echo "파일 관리자" echo "------------------------" - echo "当前路径" + echo "현재 경로" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" + echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" + echo "15. 파일을 삭제하십시오" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" + echo "25. 파일을 다른 서버로 전달합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "디렉토리 이름을 입력하십시오 :" dirname + cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" + send_stats "디렉토리로 이동하십시오" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "삭제하려면 디렉토리 이름을 입력하십시오." dirname + rm -rf "$dirname" && echo "디렉토리가 삭제되었습니다" || echo "삭제가 실패했습니다" + send_stats "디렉토리 삭제" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "이전 메뉴 디렉토리로 돌아갑니다" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "작성하려면 파일 이름을 입력하십시오." filename + touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" + send_stats "파일을 만듭니다" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "편집 할 파일 이름을 입력하십시오." filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "파일 편집" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名文件" + 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 "删除文件" + read -e -p "삭제하려면 파일 이름을 입력하십시오." filename + rm -f "$filename" && echo "파일이 삭제되었습니다" || echo "삭제가 실패했습니다" + send_stats "파일 삭제" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" + send_stats "압축 파일/디렉토리" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" + send_stats "압축 파일/디렉토리 해제" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "오류 : 대상 경로를 입력하십시오." + send_stats "이동 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" + send_stats "파일 또는 디렉토리를 이동하십시오" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "오류 : 대상 경로를 입력하십시오." + send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 + cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" + send_stats "파일 또는 디렉토리를 복사합니다" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "오류 : 파일이 존재하지 않습니다." + send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "오류 : 원격 서버 IP를 입력하십시오." + send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "오류 : 원격 서버 비밀번호를 입력하십시오." + send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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를 사용하여 파일을 전송합니다 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "스크립트는 최신입니다$sh_v_new" break_end ~/kejilion.sh exit @@ -13061,15 +13325,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}자동 업데이트가 닫힙니다${gl_bai}" + send_stats "스크립트 자동 업데이트를 닫습니다" break_end ;; *) @@ -13091,41 +13355,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "기술 라이온 스크립트 도구 상자 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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu 서버 오프닝 스크립트" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}종료 스크립트" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "선택을 입력하십시오 :" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 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 "warp管理" ; install wget + 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 ;; @@ -13136,13 +13400,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; 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 "无效的输入!" ;; + *) echo "잘못된 입력!" ;; esac break_end done @@ -13150,68 +13414,68 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "K 명령 참조 사용 사례" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav | k 命令收藏夹" -echo "应用市场管理 k app" -echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "다음은 K 명령 참조 유스 케이스입니다." +echo "스크립트 시작 k" +echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" +echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" +echo "업데이트 시스템 K 업데이트 | K 업데이트" +echo "깨끗한 시스템 쓰레기 K Clean | K 청소" +echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" +echo "BBR3 제어판 K BBR3 | K bbrv3" +echo "커널 튜닝 패널 K nhyh | K 커널 최적화" +echo "가상 메모리 K 스왑 2048을 설정하십시오" +echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" +echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" +echo "시스템 백업 기능 K 백업 | K bf | K 백업" +echo "SSH 원격 연결 도구 K SSH | K 원격 연결" +echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" +echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" +echo "인트라넷 침투 (서버 측) K frps" +echo "인트라넷 침투 (클라이언트) K frpc" +echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" +echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" +echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" +echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" +echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" +echo "도메인 이름 인증서 응용 프로그램 K SSL" +echo "도메인 이름 인증서 만료 쿼리 K SSL PS" +echo "도커 환경 설치 K 도커 설치 | K 도커 설치" +echo "Docker Container Management K Docker PS | K 도커 컨테이너" +echo "Docker Image Management K Docker img | K Docker Image" +echo "LDNMP 사이트 관리 K 웹" +echo "LDNMP 캐시 정리 K 웹 캐시" +echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" +echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." +echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" +echo "방화벽 패널 K FHQ | K 방화벽" +echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" +echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" +echo "앱 시장 관리 K 앱" +echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" } if [ "$#" -eq 0 ]; then - # 如果没有参数,运行交互式逻辑 + # 매개 변수가없는 경우 대화식 로직을 실행하십시오 kejilion_sh else - # 如果有参数,执行相应函数 + # 매개 변수가있는 경우 해당 함수를 실행하십시오 case $1 in install|add|安装) shift - send_stats "安装软件" + send_stats "소프트웨어를 설치하십시오" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "소프트웨어를 제거하십시오" remove "$@" ;; update|更新) @@ -13245,7 +13509,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "시간이 정한 RSYNC 동기화" run_task "$@" ;; @@ -13264,7 +13528,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13277,13 +13541,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 신속하게 설정했습니다" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정하십시오" set_timedate "$@" ;; @@ -13331,42 +13595,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "소프트웨어 상태보기" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "소프트웨어 시작" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "소프트웨어 일시 정지" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "소프트웨어 재시작" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "소프트웨어 부츠" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "인증서 상태를 확인하십시오" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "인증서를 신속하게 신청하십시오" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "인증서를 신속하게 신청하십시오" else k_info fi @@ -13376,15 +13640,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Docker를 신속하게 설치하십시오" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 미러 관리" docker_image ;; *) @@ -13411,7 +13675,7 @@ else app) shift - send_stats "应用$@" + send_stats "$@ 적용" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 7860f9ecf..61a4f8c73 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.8" +sh_v="4.0.10" gl_hui='\e[37m' @@ -3682,7 +3682,7 @@ add_forwarding_service() { send_stats "添加frp內網服務" # 提示用戶輸入服務名稱和轉發信息 read -e -p "請輸入服務名稱:" service_name - read -e -p "請輸入轉發類型 (tcp/udp) [回車默認tcp]:" service_type + read -e -p "請輸入轉發類型 (tcp/udp) [回​​車默認tcp]:" service_type local service_type=${service_type:-tcp} read -e -p "請輸入內網IP [回車默認127.0.0.1]:" local_ip local local_ip=${local_ip:-127.0.0.1} @@ -8534,6 +8534,11 @@ while true; do echo -e "${gl_kjlan}83. ${color83}komari服務器監控工具${gl_kjlan}84. ${color84}Wallos個人財務管理工具" echo -e "${gl_kjlan}85. ${color85}immich圖片視頻管理器${gl_kjlan}86. ${color86}jellyfin媒體管理系統" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器${gl_kjlan}88. ${color88}Owncast自託管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快遞${gl_kjlan}90. ${color90}matrix去中心化聊天協議" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}91. ${color91}gitea私有代碼倉庫${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -8687,7 +8692,8 @@ while true; do docker_rum() { - + read -e -p "設置登錄用戶名:" admin + read -e -p "設置登錄用戶密碼:" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -8696,8 +8702,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=ubuntu-abc \ - -e PASSWORD=ubuntuABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -p ${docker_port}:3000 \ -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ @@ -8711,8 +8717,8 @@ while true; do local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: ubuntu-abc\"" - local docker_passwd="echo \"密码: ubuntuABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app @@ -9383,7 +9389,8 @@ while true; do docker_rum() { - + read -e -p "設置登錄用戶名:" admin + read -e -p "設置登錄用戶密碼:" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -9392,8 +9399,8 @@ while true; do -e TZ=Etc/UTC \ -e SUBFOLDER=/ \ -e TITLE=Webtop \ - -e CUSTOM_USER=webtop-abc \ - -e PASSWORD=webtopABC123 \ + -e CUSTOM_USER=${admin} \ + -e PASSWORD=${admin_password} \ -e LC_ALL=zh_CN.UTF-8 \ -e DOCKER_MODS=linuxserver/mods:universal-package-install \ -e INSTALL_PACKAGES=font-noto-cjk \ @@ -9404,14 +9411,13 @@ while true; do --restart unless-stopped \ lscr.io/linuxserver/webtop:latest - } local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" - local docker_use="echo \"用户名: webtop-abc\"" - local docker_passwd="echo \"密码: webtopABC123\"" + local docker_use="" + local docker_passwd="" local app_size="2" docker_app ;; @@ -10607,32 +10613,55 @@ while true; do ;; + 74|moontv) local app_id="74" - local docker_name="moontv" - local docker_img="ghcr.io/senshinya/moontv:latest" - local docker_port=8074 - docker_rum() { + local app_name="moontv私有影视" + local app_text="免费在线视频搜索与观看平台" + local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local docker_name="moontv-core" + local docker_port="8074" + local app_size="2" + + docker_app_install() { + read -e -p "設置登錄用戶名:" admin + read -e -p "設置登錄用戶密碼:" admin_password + read -e -p "輸入授權碼:" shouquanma + + + mkdir -p /home/docker/moontv + mkdir -p /home/docker/moontv/config + mkdir -p /home/docker/moontv/data + cd /home/docker/moontv + + curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml + sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + cd /home/docker/moontv/ + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } - read -e -p "設置MoonTV的登錄密碼:" app_passwd - docker run -d \ - --name moontv \ - --restart unless-stopped \ - -p ${docker_port}:3000 \ - -e PASSWORD=${app_passwd} \ - ghcr.io/senshinya/moontv:latest + docker_app_update() { + cd /home/docker/moontv/ && docker compose down --rmi all + cd /home/docker/moontv/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/moontv/ && docker compose down --rmi all + rm -rf /home/docker/moontv + echo "應用已卸載" } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/senshinya/MoonTV" - local docker_use="" - local docker_passwd="" - local app_size="1" - docker_app + docker_app_plus ;; @@ -10702,8 +10731,8 @@ while true; do docker_rum() { - read -e -p "設定${docker_name}的登錄用戶名:" app_use - read -e -p "設定${docker_name}的登錄密碼:" app_passwd + read -e -p "設置登錄用戶名:" app_use + read -e -p "設置登錄密碼:" app_passwd docker run -d \ --name xunlei \ @@ -10918,10 +10947,12 @@ while true; do docker_rum() { + read -e -p "設定${docker_name}的登錄密鑰(sk-開頭字母和數字組合)如: sk-159kejilionyyds163:" app_passwd + mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ -p ${docker_port}:3001 \ - -e AUTH_KEY=sk-123456 \ + -e AUTH_KEY=${app_passwd} \ -v "/home/docker/gpt-load/data":/app/data \ tbphp/gpt-load:latest @@ -10929,7 +10960,7 @@ while true; do local docker_describe="高性能AI接口透明代理服务" local docker_url="官网介绍: https://www.gpt-load.com/" - local docker_use="echo \"默认管理密钥: sk-123456\"" + local docker_use="" local docker_passwd="" local app_size="1" docker_app @@ -11136,6 +11167,239 @@ while true; do ;; + + 89|file-code-box) + + local app_id="89" + local docker_name="file-code-box" + local docker_img="lanol/filecodebox:latest" + local docker_port=8089 + + docker_rum() { + + docker run -d \ + --name file-code-box \ + -p ${docker_port}:12345 \ + -v /home/docker/file-code-box/data:/app/data \ + --restart unless-stopped \ + lanol/filecodebox:latest + + } + + local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" + local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + + 90|matrix) + + local app_id="90" + local docker_name="matrix" + local docker_img="matrixdotorg/synapse:latest" + local docker_port=8090 + + docker_rum() { + + add_yuming + + if [ ! -d /home/docker/matrix/data ]; then + docker run -it --rm \ + -v /home/docker/matrix/data:/data \ + -e SYNAPSE_SERVER_NAME=${yuming} \ + -e SYNAPSE_REPORT_STATS=yes \ + --name matrix \ + matrixdotorg/synapse:latest generate + fi + + docker run -d \ + --name matrix \ + -v /home/docker/matrix/data:/data \ + -p ${docker_port}:8008 \ + --restart unless-stopped \ + matrixdotorg/synapse:latest + + echo "創建初始用戶或管理員。請設置以下內容用戶名和密碼以及是否為管理員。" + docker exec -it matrix register_new_matrix_user \ + http://localhost:8008 \ + -c /data/homeserver.yaml + + sed -i '/^enable_registration:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration: true' /home/docker/matrix/data/homeserver.yaml + sed -i '/^enable_registration_without_verification:/d' /home/docker/matrix/data/homeserver.yaml + sed -i '/^# vim:ft=yaml/i enable_registration_without_verification: true' /home/docker/matrix/data/homeserver.yaml + + docker restart matrix + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + } + + local docker_describe="Matrix是一个去中心化的聊天协议" + local docker_url="官网介绍: https://matrix.org/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 91|gitea) + + local app_id="91" + + local app_name="gitea私有代码仓库" + local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" + local app_url="视频介绍: https://github.com/go-gitea/gitea" + local docker_name="gitea" + local docker_port="8091" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/gitea + mkdir -p /home/docker/gitea/gitea + mkdir -p /home/docker/gitea/data + mkdir -p /home/docker/gitea/postgres + cd /home/docker/gitea + + curl -o /home/docker/gitea/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/gitea-docker-compose.yml + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/gitea/docker-compose.yml + cd /home/docker/gitea/ + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/gitea/ && docker compose down --rmi all + cd /home/docker/gitea/ && docker compose up -d + } + + + docker_app_uninstall() { + cd /home/docker/gitea/ && docker compose down --rmi all + rm -rf /home/docker/gitea + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + + 92|filebrowser) + + local app_id="92" + local docker_name="filebrowser" + local docker_img="hurlenko/filebrowser" + local docker_port=8092 + + docker_rum() { + + docker run -d \ + --name filebrowser \ + --restart unless-stopped \ + -p ${docker_port}:8080 \ + -v /home/docker/filebrowser/data:/data \ + -v /home/docker/filebrowser/config:/config \ + -e FB_BASEURL=/filebrowser \ + hurlenko/filebrowser + + } + + local docker_describe="是一个基于Web的文件管理器" + local docker_url="官网介绍: https://filebrowser.org/" + local docker_use="docker logs filebrowser" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + b) + clear + send_stats "全部應用備份" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在備份$backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "文件已傳送至遠程服務器/根目錄。" + else + echo "未找到要傳送的文件。" + fi + break + ;; + *) + echo "注意: 目前備份僅包含docker項目,不包含寶塔,1panel等建站面板的數據備份。" + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "全部應用還原" + echo "可用的應用備份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回車鍵還原最新的備份,輸入備份文件名還原指定的備份,輸入0退出:" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # 如果用戶沒有輸入文件名,使用最新的壓縮包 + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解壓$filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "應用數據已還原,目前請手動進入指定應用菜單,更新應用,即可還原應用。" + else + echo "沒有找到壓縮包。" + fi + + ;; + 0) kejilion ;; @@ -11295,7 +11559,7 @@ linux_work() { ;; 22) - read -e -p "請輸入你創建或進入的工作區名稱,如1001 kj001 work1:" SESSION_NAME + read -e -p "請輸入你創建或進入的工作區名稱,如1​​001 kj001 work1:" SESSION_NAME tmux_run send_stats "自定義工作區" ;; From 987220f7f54f0436e9d4396a4dd566bca0a89e5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 12:11:01 +0800 Subject: [PATCH 093/553] Update kejilion.sh --- cn/kejilion.sh | 389 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 316 insertions(+), 73 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 4a8bb24c6..cad5a9a25 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.10" +sh_v="4.1.0" gl_hui='\e[37m' @@ -6850,6 +6850,310 @@ linux_bbr() { +docker_ssh_migration() { + + GREEN='\033[0;32m' + RED='\033[0;31m' + YELLOW='\033[1;33m' + BLUE='\033[0;36m' + NC='\033[0m' + + BACKUP_ROOT="/tmp" + DATE_STR=$(date +%Y%m%d_%H%M%S) + + check_root() { + [[ "$EUID" -ne 0 ]] && { echo -e "${RED}请使用 root 权限运行脚本!${NC}"; exit 1; } + } + + ensure_docker() { + command -v docker &>/dev/null || { echo -e "${RED}Docker 未安装!${NC}"; exit 1; } + } + + ensure_jq() { + command -v jq &>/dev/null || { echo -e "${RED}jq 未安装!${NC}"; exit 1; } + } + + is_compose_container() { + local container=$1 + docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 + } + + list_backups() { + echo -e "${BLUE}当前备份列表:${NC}" + ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + } + + + + # ---------------------------- + # 备份 + # ---------------------------- + backup_docker() { + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + local TARGET_CONTAINERS=() + if [ -z "$containers" ]; then + mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') + else + read -ra TARGET_CONTAINERS <<< "$containers" + fi + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } + + local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" + mkdir -p "$BACKUP_DIR" + + local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" + echo "#!/bin/bash" > "$RESTORE_SCRIPT" + echo "set -e" >> "$RESTORE_SCRIPT" + echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" + + # 记录已打包过的 Compose 项目路径,避免重复打包 + declare -A PACKED_COMPOSE_PATHS=() + + for c in "${TARGET_CONTAINERS[@]}"; do + echo -e "${GREEN}备份容器: $c${NC}" + local inspect_file="${BACKUP_DIR}/${c}_inspect.json" + docker inspect "$c" > "$inspect_file" + + if is_compose_container "$c"; then + echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" + local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') + local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') + + if [ -z "$project_dir" ]; then + read -p "未检测到 compose 目录,请手动输入路径: " project_dir + fi + + # 如果该 Compose 项目已经打包过,跳过 + if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then + echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + continue + fi + + if [ -f "$project_dir/docker-compose.yml" ]; then + echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" + echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" + tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . + echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" + echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" + PACKED_COMPOSE_PATHS["$project_dir"]=1 + echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" + else + echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" + fi + else + # 普通容器备份卷 + local VOL_PATHS + VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') + for path in $VOL_PATHS; do + echo "打包卷: $path" + tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" + done + + # 端口 + local PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) + for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done + + # 环境变量 + local ENV_VARS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") + for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done + + # 卷映射 + local VOL_ARGS="" + for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done + + # 镜像 + local IMAGE + IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") + + echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" + echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" + fi + done + + chmod +x "$RESTORE_SCRIPT" + echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + } + + # ---------------------------- + # 还原 + # ---------------------------- + restore_docker() { + list_backups + read -p "请输入要还原的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + echo -e "${BLUE}开始执行还原操作...${NC}" + + install_docker + + # --------- 优先还原 Compose 项目 --------- + for f in "$BACKUP_DIR"/backup_type_*; do + [[ ! -f "$f" ]] && continue + if grep -q "compose" "$f"; then + project_name=$(basename "$f" | sed 's/backup_type_//') + path_file="$BACKUP_DIR/compose_path_${project_name}.txt" + [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" + [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + + # 检查该 compose 项目的容器是否已经在运行 + running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) + if [[ "$running_count" -gt 0 ]]; then + echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" + continue + fi + + read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + + mkdir -p "$original_path" + tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" + echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" + + cd "$original_path" || exit 1 + docker compose down || true + docker compose up -d + echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" + fi + done + + # --------- 继续还原普通容器 --------- + echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" + local has_container=false + for json in "$BACKUP_DIR"/*_inspect.json; do + [[ ! -f "$json" ]] && continue + has_container=true + container=$(basename "$json" | sed 's/_inspect.json//') + echo -e "${GREEN}处理容器: $container${NC}" + + # 检查容器是否已经存在且正在运行 + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" + continue + fi + + IMAGE=$(jq -r '.[0].Config.Image' "$json") + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } + + # 端口映射 + PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") + for p in "${PORTS[@]}"; do + [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" + done + + # 环境变量 + ENV_ARGS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") + for e in "${ENVS[@]}"; do + ENV_ARGS="$ENV_ARGS -e \"$e\"" + done + + # 卷映射 + 卷数据恢复 + VOL_ARGS="" + mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") + for v in "${VOLS[@]}"; do + VOL_SRC=$(echo "$v" | cut -d':' -f1) + VOL_DST=$(echo "$v" | cut -d':' -f2) + mkdir -p "$VOL_SRC" + VOL_ARGS="$VOL_ARGS -v $VOL_SRC:$VOL_DST" + + VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" + if [[ -f "$VOL_FILE" ]]; then + echo "恢复卷数据: $VOL_SRC" + tar -xzf "$VOL_FILE" -C / + fi + done + + # 删除已存在但未运行的容器 + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" + docker rm -f "$container" + fi + + # 启动容器 + echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + done + + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + } + + + # ---------------------------- + # 迁移 + # ---------------------------- + migrate_docker() { + ensure_jq + list_backups + read -p "请输入要迁移的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + read -p "目标服务器IP: " TARGET_IP + read -p "目标服务器SSH用户名: " TARGET_USER + + LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + + echo -e "${YELLOW}传输备份中...${NC}" + if [[ -z "$TARGET_PASS" ]]; then + # 使用密钥登录 + scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + fi + + } + + # ---------------------------- + # 删除备份 + # ---------------------------- + delete_backup() { + list_backups + read -p "请输入要删除的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + rm -rf "$BACKUP_DIR" + echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" + } + + # ---------------------------- + # 主菜单 + # ---------------------------- + main_menu() { + + check_root + ensure_docker + ensure_jq + while true; do + clear + echo -e "\n${BLUE}-----------------------------------------${NC}" + echo -e "Docker 备份 / 迁移 / 还原 工具 v1.4" + echo -e "${BLUE}-----------------------------------------${NC}" + list_backups + echo -e "\n1. 备份docker项目" + echo -e "2. 迁移docker项目" + echo -e "3. 还原docker项目" + echo -e "4. 删除docker项目的备份文件" + echo -e "0. 返回主菜单 / 退出" + read -p "请选择: " choice + case $choice in + 1) backup_docker ;; + 2) migrate_docker ;; + 3) restore_docker ;; + 4) delete_backup ;; + 0) exit 0 ;; + *) echo -e "${RED}无效选项${NC}" ;; + esac + done + } + + main_menu +} + + + + + linux_docker() { while true; do @@ -6875,6 +7179,7 @@ linux_docker() { 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}19. ${gl_bai}备份/还原/迁移Docker环境" echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -7082,6 +7387,9 @@ linux_docker() { restart docker ;; + + + 11) clear send_stats "Docker v6 开" @@ -7094,6 +7402,11 @@ linux_docker() { docker_ipv6_off ;; + 19) + docker_ssh_migration + ;; + + 20) clear send_stats "Docker卸载" @@ -8538,8 +8851,6 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" - echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice @@ -9815,8 +10126,10 @@ while true; do docker_rum() { + ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d \ --name nexterm \ + -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ @@ -11330,76 +11643,6 @@ while true; do ;; - - - b) - clear - send_stats "全部应用备份" - - local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" - cd / && tar czvf "$backup_filename" home - - 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 /app*.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:/" - echo "文件已传送至远程服务器/根目录。" - else - echo "未找到要传送的文件。" - fi - break - ;; - *) - echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" - break - ;; - esac - done - - ;; - - r) - root_use - send_stats "全部应用还原" - echo "可用的应用备份" - echo "-------------------------" - ls -lt /app*.gz | awk '{print $NF}' - echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename - - if [ "$filename" == "0" ]; then - break_end - linux_panel - fi - - # 如果用户没有输入文件名,使用最新的压缩包 - if [ -z "$filename" ]; then - local filename=$(ls -t /app*.tar.gz | head -1) - fi - - if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" - cd / && tar -xzf "$filename" - echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" - else - echo "没有找到压缩包。" - fi - - ;; - 0) kejilion ;; From dc9fba201f5010c1ebedad00d1041a6251e6834a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 12:11:32 +0800 Subject: [PATCH 094/553] Implement Docker backup and restore features Add Docker backup, restore, and migration functions --- kejilion.sh | 389 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 316 insertions(+), 73 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index ff076970f..b9640481a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.10" +sh_v="4.1.0" gl_hui='\e[37m' @@ -6850,6 +6850,310 @@ linux_bbr() { +docker_ssh_migration() { + + GREEN='\033[0;32m' + RED='\033[0;31m' + YELLOW='\033[1;33m' + BLUE='\033[0;36m' + NC='\033[0m' + + BACKUP_ROOT="/tmp" + DATE_STR=$(date +%Y%m%d_%H%M%S) + + check_root() { + [[ "$EUID" -ne 0 ]] && { echo -e "${RED}请使用 root 权限运行脚本!${NC}"; exit 1; } + } + + ensure_docker() { + command -v docker &>/dev/null || { echo -e "${RED}Docker 未安装!${NC}"; exit 1; } + } + + ensure_jq() { + command -v jq &>/dev/null || { echo -e "${RED}jq 未安装!${NC}"; exit 1; } + } + + is_compose_container() { + local container=$1 + docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 + } + + list_backups() { + echo -e "${BLUE}当前备份列表:${NC}" + ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + } + + + + # ---------------------------- + # 备份 + # ---------------------------- + backup_docker() { + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + local TARGET_CONTAINERS=() + if [ -z "$containers" ]; then + mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') + else + read -ra TARGET_CONTAINERS <<< "$containers" + fi + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } + + local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" + mkdir -p "$BACKUP_DIR" + + local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" + echo "#!/bin/bash" > "$RESTORE_SCRIPT" + echo "set -e" >> "$RESTORE_SCRIPT" + echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" + + # 记录已打包过的 Compose 项目路径,避免重复打包 + declare -A PACKED_COMPOSE_PATHS=() + + for c in "${TARGET_CONTAINERS[@]}"; do + echo -e "${GREEN}备份容器: $c${NC}" + local inspect_file="${BACKUP_DIR}/${c}_inspect.json" + docker inspect "$c" > "$inspect_file" + + if is_compose_container "$c"; then + echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" + local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') + local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') + + if [ -z "$project_dir" ]; then + read -p "未检测到 compose 目录,请手动输入路径: " project_dir + fi + + # 如果该 Compose 项目已经打包过,跳过 + if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then + echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + continue + fi + + if [ -f "$project_dir/docker-compose.yml" ]; then + echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" + echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" + tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . + echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" + echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" + PACKED_COMPOSE_PATHS["$project_dir"]=1 + echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" + else + echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" + fi + else + # 普通容器备份卷 + local VOL_PATHS + VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') + for path in $VOL_PATHS; do + echo "打包卷: $path" + tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" + done + + # 端口 + local PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) + for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done + + # 环境变量 + local ENV_VARS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") + for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done + + # 卷映射 + local VOL_ARGS="" + for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done + + # 镜像 + local IMAGE + IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") + + echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" + echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" + fi + done + + chmod +x "$RESTORE_SCRIPT" + echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + } + + # ---------------------------- + # 还原 + # ---------------------------- + restore_docker() { + list_backups + read -p "请输入要还原的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + echo -e "${BLUE}开始执行还原操作...${NC}" + + install_docker + + # --------- 优先还原 Compose 项目 --------- + for f in "$BACKUP_DIR"/backup_type_*; do + [[ ! -f "$f" ]] && continue + if grep -q "compose" "$f"; then + project_name=$(basename "$f" | sed 's/backup_type_//') + path_file="$BACKUP_DIR/compose_path_${project_name}.txt" + [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" + [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + + # 检查该 compose 项目的容器是否已经在运行 + running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) + if [[ "$running_count" -gt 0 ]]; then + echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" + continue + fi + + read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + + mkdir -p "$original_path" + tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" + echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" + + cd "$original_path" || exit 1 + docker compose down || true + docker compose up -d + echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" + fi + done + + # --------- 继续还原普通容器 --------- + echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" + local has_container=false + for json in "$BACKUP_DIR"/*_inspect.json; do + [[ ! -f "$json" ]] && continue + has_container=true + container=$(basename "$json" | sed 's/_inspect.json//') + echo -e "${GREEN}处理容器: $container${NC}" + + # 检查容器是否已经存在且正在运行 + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" + continue + fi + + IMAGE=$(jq -r '.[0].Config.Image' "$json") + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } + + # 端口映射 + PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") + for p in "${PORTS[@]}"; do + [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" + done + + # 环境变量 + ENV_ARGS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") + for e in "${ENVS[@]}"; do + ENV_ARGS="$ENV_ARGS -e \"$e\"" + done + + # 卷映射 + 卷数据恢复 + VOL_ARGS="" + mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") + for v in "${VOLS[@]}"; do + VOL_SRC=$(echo "$v" | cut -d':' -f1) + VOL_DST=$(echo "$v" | cut -d':' -f2) + mkdir -p "$VOL_SRC" + VOL_ARGS="$VOL_ARGS -v $VOL_SRC:$VOL_DST" + + VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" + if [[ -f "$VOL_FILE" ]]; then + echo "恢复卷数据: $VOL_SRC" + tar -xzf "$VOL_FILE" -C / + fi + done + + # 删除已存在但未运行的容器 + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" + docker rm -f "$container" + fi + + # 启动容器 + echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + done + + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + } + + + # ---------------------------- + # 迁移 + # ---------------------------- + migrate_docker() { + ensure_jq + list_backups + read -p "请输入要迁移的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + read -p "目标服务器IP: " TARGET_IP + read -p "目标服务器SSH用户名: " TARGET_USER + + LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + + echo -e "${YELLOW}传输备份中...${NC}" + if [[ -z "$TARGET_PASS" ]]; then + # 使用密钥登录 + scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + fi + + } + + # ---------------------------- + # 删除备份 + # ---------------------------- + delete_backup() { + list_backups + read -p "请输入要删除的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + rm -rf "$BACKUP_DIR" + echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" + } + + # ---------------------------- + # 主菜单 + # ---------------------------- + main_menu() { + + check_root + ensure_docker + ensure_jq + while true; do + clear + echo -e "\n${BLUE}-----------------------------------------${NC}" + echo -e "Docker 备份 / 迁移 / 还原 工具 v1.4" + echo -e "${BLUE}-----------------------------------------${NC}" + list_backups + echo -e "\n1. 备份docker项目" + echo -e "2. 迁移docker项目" + echo -e "3. 还原docker项目" + echo -e "4. 删除docker项目的备份文件" + echo -e "0. 返回主菜单 / 退出" + read -p "请选择: " choice + case $choice in + 1) backup_docker ;; + 2) migrate_docker ;; + 3) restore_docker ;; + 4) delete_backup ;; + 0) exit 0 ;; + *) echo -e "${RED}无效选项${NC}" ;; + esac + done + } + + main_menu +} + + + + + linux_docker() { while true; do @@ -6875,6 +7179,7 @@ linux_docker() { 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}19. ${gl_bai}备份/还原/迁移Docker环境" echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -7082,6 +7387,9 @@ linux_docker() { restart docker ;; + + + 11) clear send_stats "Docker v6 开" @@ -7094,6 +7402,11 @@ linux_docker() { docker_ipv6_off ;; + 19) + docker_ssh_migration + ;; + + 20) clear send_stats "Docker卸载" @@ -8538,8 +8851,6 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" - echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice @@ -9815,8 +10126,10 @@ while true; do docker_rum() { + ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d \ --name nexterm \ + -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ @@ -11330,76 +11643,6 @@ while true; do ;; - - - b) - clear - send_stats "全部应用备份" - - local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" - cd / && tar czvf "$backup_filename" home - - 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 /app*.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:/" - echo "文件已传送至远程服务器/根目录。" - else - echo "未找到要传送的文件。" - fi - break - ;; - *) - echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" - break - ;; - esac - done - - ;; - - r) - root_use - send_stats "全部应用还原" - echo "可用的应用备份" - echo "-------------------------" - ls -lt /app*.gz | awk '{print $NF}' - echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename - - if [ "$filename" == "0" ]; then - break_end - linux_panel - fi - - # 如果用户没有输入文件名,使用最新的压缩包 - if [ -z "$filename" ]; then - local filename=$(ls -t /app*.tar.gz | head -1) - fi - - if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" - cd / && tar -xzf "$filename" - echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" - else - echo "没有找到压缩包。" - fi - - ;; - 0) kejilion ;; From 2e81378127f8eb165258f666c169dd5326bc19ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 12:18:17 +0800 Subject: [PATCH 095/553] Update changelog for version 4.1.0 --- kejilion_sh_log.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 097b5ba1d..8cce2f0e0 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1279,3 +1279,8 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 应用市场新增gitea私有代码仓库的安装及使用, 应用市场新增filebrowser文件管理器的安装及使用, ------------------------ +2025-08-24 v4.1.0 +docker管理增加全局备份还原迁移功能。 +修复部分应用的部署不成功问题, +------------------------ + From 540792e8bff9854d3c9af9fd6266fdb42157ce9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 12:18:50 +0800 Subject: [PATCH 096/553] Implement application backup and restore options Add backup and restore functionality for applications. --- cn/kejilion.sh | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index cad5a9a25..508ee0c6f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8851,6 +8851,8 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice @@ -11643,6 +11645,76 @@ while true; do ;; + + b) + clear + send_stats "全部应用备份" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "文件已传送至远程服务器/根目录。" + else + echo "未找到要传送的文件。" + fi + break + ;; + *) + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "全部应用还原" + echo "可用的应用备份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # 如果用户没有输入文件名,使用最新的压缩包 + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + else + echo "没有找到压缩包。" + fi + + ;; + + 0) kejilion ;; From 7beb25a757e2073462525532d0a80b0b7f009e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 12:19:21 +0800 Subject: [PATCH 097/553] Implement application data backup and restore Add backup and restore functionality for applications --- kejilion.sh | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index b9640481a..9878c10a8 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8851,6 +8851,8 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " sub_choice @@ -11643,6 +11645,76 @@ while true; do ;; + + b) + clear + send_stats "全部应用备份" + + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home + + 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 /app*.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:/" + echo "文件已传送至远程服务器/根目录。" + else + echo "未找到要传送的文件。" + fi + break + ;; + *) + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + break + ;; + esac + done + + ;; + + r) + root_use + send_stats "全部应用还原" + echo "可用的应用备份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + + if [ "$filename" == "0" ]; then + break_end + linux_panel + fi + + # 如果用户没有输入文件名,使用最新的压缩包 + if [ -z "$filename" ]; then + local filename=$(ls -t /app*.tar.gz | head -1) + fi + + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + cd / && tar -xzf "$filename" + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + else + echo "没有找到压缩包。" + fi + + ;; + + 0) kejilion ;; From 8193b81c5f73fc012c4027ce0cb569d54a651082 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 24 Aug 2025 07:14:44 +0000 Subject: [PATCH 098/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-24=2007:14:44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 331 +++++++++++++++++++++++++++++++++++++++++-- jp/kejilion.sh | 373 +++++++++++++++++++++++++++++++++++++++++++++---- kr/kejilion.sh | 341 ++++++++++++++++++++++++++++++++++++++++++-- tw/kejilion.sh | 319 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 1312 insertions(+), 52 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index fef2761c3..8b8f2673f 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.10" +sh_v="4.1.0" gl_hui='\e[37m' @@ -2121,7 +2121,7 @@ web_security() { 22) send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When it reaches the detection of a high load, the shield will be automatically turned on, and the low load will be automatically turned off for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" @@ -5959,7 +5959,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can be connected to other Linux systems via SSH" + echo "Can connect to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -6850,6 +6850,310 @@ linux_bbr() { +docker_ssh_migration() { + + GREEN='\033[0;32m' + RED='\033[0;31m' + YELLOW='\033[1;33m' + BLUE='\033[0;36m' + NC='\033[0m' + + BACKUP_ROOT="/tmp" + DATE_STR=$(date +%Y%m%d_%H%M%S) + + check_root() { + [[ "$EUID" -ne 0 ]] && { echo -e "${RED}Please use root permissions to run the script!${NC}"; exit 1; } + } + + ensure_docker() { + command -v docker &>/dev/null || { echo -e "${RED}Docker not installed!${NC}"; exit 1; } + } + + ensure_jq() { + command -v jq &>/dev/null || { echo -e "${RED}jq not installed!${NC}"; exit 1; } + } + + is_compose_container() { + local container=$1 + docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 + } + + list_backups() { + echo -e "${BLUE}Current backup list:${NC}" + ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "No backup" + } + + + + # ---------------------------- + # Backup + # ---------------------------- + backup_docker() { + echo -e "${YELLOW}Backing up Docker container...${NC}" + read -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers + local TARGET_CONTAINERS=() + if [ -z "$containers" ]; then + mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') + else + read -ra TARGET_CONTAINERS <<< "$containers" + fi + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}No container found${NC}"; return; } + + local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" + mkdir -p "$BACKUP_DIR" + + local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" + echo "#!/bin/bash" > "$RESTORE_SCRIPT" + echo "set -e" >> "$RESTORE_SCRIPT" + echo "# Automatically generated restore script" >> "$RESTORE_SCRIPT" + + # Record the path of the packaged Compose project to avoid duplicate packaging + declare -A PACKED_COMPOSE_PATHS=() + + for c in "${TARGET_CONTAINERS[@]}"; do + echo -e "${GREEN}Backup container:$c${NC}" + local inspect_file="${BACKUP_DIR}/${c}_inspect.json" + docker inspect "$c" > "$inspect_file" + + if is_compose_container "$c"; then + echo -e "${BLUE}Detected$cYes docker-compose container${NC}" + local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') + local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') + + if [ -z "$project_dir" ]; then + read -p "The compose directory is not detected, please enter the path manually:" project_dir + fi + + # If the Compose project has been packaged, skip it + if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then + echo -e "${YELLOW}Compose project [$project_name] Backed up, skip duplicate packaging...${NC}" + continue + fi + + if [ -f "$project_dir/docker-compose.yml" ]; then + echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" + echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" + tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . + echo "# docker-compose recovery:$project_name" >> "$RESTORE_SCRIPT" + echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" + PACKED_COMPOSE_PATHS["$project_dir"]=1 + echo -e "${GREEN}Compose project [$project_name] Packed:${project_dir}${NC}" + else + echo -e "${RED}docker-compose.yml not found, skip this container...${NC}" + fi + else + # Normal container backup volume + local VOL_PATHS + VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') + for path in $VOL_PATHS; do + echo "Packing rolls:$path" + tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" + done + + # port + local PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) + for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done + + # Environment variables + local ENV_VARS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") + for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done + + # Volume Mapping + local VOL_ARGS="" + for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done + + # Mirror + local IMAGE + IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") + + echo -e "\n# Restore container:$c" >> "$RESTORE_SCRIPT" + echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" + fi + done + + chmod +x "$RESTORE_SCRIPT" + echo -e "${GREEN}Backup is complete:${BACKUP_DIR}${NC}" + echo -e "${GREEN}Available restore scripts:${RESTORE_SCRIPT}${NC}" + } + + # ---------------------------- + # reduction + # ---------------------------- + restore_docker() { + list_backups + read -p "Please enter the backup directory to restore:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } + + echo -e "${BLUE}Start the restore operation...${NC}" + + install_docker + + # ------------------------- + for f in "$BACKUP_DIR"/backup_type_*; do + [[ ! -f "$f" ]] && continue + if grep -q "compose" "$f"; then + project_name=$(basename "$f" | sed 's/backup_type_//') + path_file="$BACKUP_DIR/compose_path_${project_name}.txt" + [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" + [[ -z "$original_path" ]] && read -p "The original path was not found, please enter the restore directory path:" original_path + + # Check if the container for the compose project is already running + running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) + if [[ "$running_count" -gt 0 ]]; then + echo -e "${YELLOW}Compose project [$project_name] There is already a container running, skip restore...${NC}" + continue + fi + + read -p "Confirm restoring the Compose project [$project_name] to path [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "Please enter a new restore path:" original_path + + mkdir -p "$original_path" + tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" + echo -e "${GREEN}Compose project [$project_name] Decompressed to:$original_path${NC}" + + cd "$original_path" || exit 1 + docker compose down || true + docker compose up -d + echo -e "${GREEN}Compose project [$project_name] Restore is complete!${NC}" + fi + done + + # ------------------------- + echo -e "${BLUE}Check and restore a normal Docker container...${NC}" + local has_container=false + for json in "$BACKUP_DIR"/*_inspect.json; do + [[ ! -f "$json" ]] && continue + has_container=true + container=$(basename "$json" | sed 's/_inspect.json//') + echo -e "${GREEN}Processing container:$container${NC}" + + # Check if the container already exists and is running + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}Container [$container] is running, skip restore...${NC}" + continue + fi + + IMAGE=$(jq -r '.[0].Config.Image' "$json") + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information was not found, skip:$container${NC}"; continue; } + + # Port Mapping + PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") + for p in "${PORTS[@]}"; do + [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" + done + + # Environment variables + ENV_ARGS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") + for e in "${ENVS[@]}"; do + ENV_ARGS="$ENV_ARGS -e \"$e\"" + done + + # Volume Mapping + Volume Data Recovery + VOL_ARGS="" + mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") + for v in "${VOLS[@]}"; do + VOL_SRC=$(echo "$v" | cut -d':' -f1) + VOL_DST=$(echo "$v" | cut -d':' -f2) + mkdir -p "$VOL_SRC" + VOL_ARGS="$VOL_ARGS -v $VOL_SRC:$VOL_DST" + + VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" + if [[ -f "$VOL_FILE" ]]; then + echo "Recover volume data:$VOL_SRC" + tar -xzf "$VOL_FILE" -C / + fi + done + + # Delete existing but not running containers + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}Container [$container] Exist but not running, delete the old container...${NC}" + docker rm -f "$container" + fi + + # Start the container + echo "Execute the restore command: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + done + + [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for normal containers was found${NC}" + } + + + # ---------------------------- + # migrate + # ---------------------------- + migrate_docker() { + ensure_jq + list_backups + read -p "Please enter the backup directory to migrate:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } + + read -p "Target server IP:" TARGET_IP + read -p "Target server SSH username:" TARGET_USER + + LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + + echo -e "${YELLOW}Transfer backup...${NC}" + if [[ -z "$TARGET_PASS" ]]; then + # Log in with a key + scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + fi + + } + + # ---------------------------- + # Delete backup + # ---------------------------- + delete_backup() { + list_backups + read -p "Please enter the backup directory to delete:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } + rm -rf "$BACKUP_DIR" + echo -e "${GREEN}Deleted backup:${BACKUP_DIR}${NC}" + } + + # ---------------------------- + # Main Menu + # ---------------------------- + main_menu() { + + check_root + ensure_docker + ensure_jq + while true; do + clear + echo -e "\n${BLUE}-----------------------------------------${NC}" + echo -e "Docker Backup/Migration/Restore Tool v1.4" + echo -e "${BLUE}-----------------------------------------${NC}" + list_backups + echo -e "\n1. Backup docker project" + echo -e "2. Migrate docker projects" + echo -e "3. Restore the docker project" + echo -e "4. Delete the backup file of the docker project" + echo -e "0. Return to main menu / Exit" + read -p "Please select:" choice + case $choice in + 1) backup_docker ;; + 2) migrate_docker ;; + 3) restore_docker ;; + 4) delete_backup ;; + 0) exit 0 ;; + *) echo -e "${RED}Invalid option${NC}" ;; + esac + done + } + + main_menu +} + + + + + linux_docker() { while true; do @@ -6875,6 +7179,7 @@ linux_docker() { echo -e "${gl_kjlan}11. ${gl_bai}Enable Docker-ipv6 access" echo -e "${gl_kjlan}12. ${gl_bai}Close Docker-ipv6 access" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}19. ${gl_bai}Backup/restore/migrate Docker environment" echo -e "${gl_kjlan}20. ${gl_bai}Uninstall the Docker environment" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -7082,6 +7387,9 @@ linux_docker() { restart docker ;; + + + 11) clear send_stats "Docker v6 open" @@ -7094,6 +7402,11 @@ linux_docker() { docker_ipv6_off ;; + 19) + docker_ssh_migration + ;; + + 20) clear send_stats "Docker uninstall" @@ -7924,7 +8237,7 @@ linux_ldnmp() { ;; 2) echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter to skip remote download:" url_download_db + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -9815,8 +10128,10 @@ while true; do docker_rum() { + ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d \ --name nexterm \ + -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ @@ -11331,7 +11646,6 @@ while true; do ;; - b) clear send_stats "All applications backup" @@ -11400,6 +11714,7 @@ while true; do ;; + 0) kejilion ;; @@ -12096,7 +12411,7 @@ EOF echo "3. Tokyo time in Japan 4. Seoul time in South Korea" echo "5. Singapore time 6. Kolkata time in India" echo "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Bangkok Time, Thailand" + echo "9. Time in Bangkok, Thailand" echo "------------------------" echo "Europe" echo "11. London time in the UK 12. Paris time in France" @@ -12322,7 +12637,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -12759,7 +13074,7 @@ EOF echo "Privacy and Security" echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index acf73106d..ba7180fb0 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.10" +sh_v="4.1.0" gl_hui='\e[37m' @@ -285,7 +285,7 @@ restart() { if [ $? -eq 0 ]; then echo "$1サービスは再開されました。" else - echo "エラー:再起動$1サービスに失敗しました。" + echo "エラー:再起動$1サービスは失敗しました。" fi } @@ -295,7 +295,7 @@ start() { if [ $? -eq 0 ]; then echo "$1サービスが開始されました。" else - echo "エラー:開始$1サービスに失敗しました。" + echo "エラー:開始$1サービスは失敗しました。" fi } @@ -305,7 +305,7 @@ stop() { if [ $? -eq 0 ]; then echo "$1サービスは停止しました。" else - echo "エラー:停止します$1サービスに失敗しました。" + echo "エラー:停止します$1サービスは失敗しました。" fi } @@ -816,7 +816,7 @@ docker_ipv6_off() { return fi - # 現在の構成を読み取ります + # 現在の構成をお読みください local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") # JQを使用して、構成ファイルの更新を処理します @@ -1668,7 +1668,7 @@ cf_purge_cache() { 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 "API_TOKENを入力してください:" API_TOKEN read -e -p "CFユーザ​​ー名を入力してください:" EMAIL read -e -p "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS @@ -1679,7 +1679,7 @@ cf_purge_cache() { # 各ZONE_IDをループして、Clear Cacheコマンドを実行します for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "ゾーン_IDのキャッシュのクリア:$ZONE_ID" + echo "ゾーン_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" \ @@ -2121,10 +2121,10 @@ web_security() { 22) send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷の検出に達すると、シールドが自動的にオンになり、低負荷が自動的に5秒間オフになります。${gl_bai}" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" echo "--------------" echo "CFパラメーターを取得します:" - echo -e "CFの背景の右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" + echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -6369,7 +6369,7 @@ schedule_task() { 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 @@ -6418,7 +6418,7 @@ rsync_manager() { echo echo "1.新しいタスクを作成します2。タスクを削除します" echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6.タイミングタスクを削除します" + echo "5.タイミングタスクを作成6。タイミングタスクを削除します" echo "---------------------------------" echo "0。前のメニューに戻ります" echo "---------------------------------" @@ -6551,7 +6551,7 @@ linux_tools() { 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}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" - echo -e "${gl_kjlan}7. ${gl_bai}zip zip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" + echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}BTOPモダン監視ツール${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}範囲ファイル管理ツール" @@ -6850,6 +6850,310 @@ linux_bbr() { +docker_ssh_migration() { + + GREEN='\033[0;32m' + RED='\033[0;31m' + YELLOW='\033[1;33m' + BLUE='\033[0;36m' + NC='\033[0m' + + BACKUP_ROOT="/tmp" + DATE_STR=$(date +%Y%m%d_%H%M%S) + + check_root() { + [[ "$EUID" -ne 0 ]] && { echo -e "${RED}ルートアクセス許可を使用してスクリプトを実行してください!${NC}"; exit 1; } + } + + ensure_docker() { + command -v docker &>/dev/null || { echo -e "${RED}Dockerがインストールされていません!${NC}"; exit 1; } + } + + ensure_jq() { + command -v jq &>/dev/null || { echo -e "${RED}JQがインストールされていません!${NC}"; exit 1; } + } + + is_compose_container() { + local container=$1 + docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 + } + + list_backups() { + echo -e "${BLUE}現在のバックアップリスト:${NC}" + ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし" + } + + + + # ---------------------------- + # バックアップ + # ---------------------------- + backup_docker() { + echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}" + read -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers + local TARGET_CONTAINERS=() + if [ -z "$containers" ]; then + mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') + else + read -ra TARGET_CONTAINERS <<< "$containers" + fi + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}コンテナは見つかりません${NC}"; return; } + + local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" + mkdir -p "$BACKUP_DIR" + + local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" + echo "#!/bin/bash" > "$RESTORE_SCRIPT" + echo "set -e" >> "$RESTORE_SCRIPT" + echo "#自動的に生成された復元スクリプト" >> "$RESTORE_SCRIPT" + + # パッケージ化されたプロジェクトのパスを記録して、パッケージの重複を避ける + declare -A PACKED_COMPOSE_PATHS=() + + for c in "${TARGET_CONTAINERS[@]}"; do + echo -e "${GREEN}バックアップコンテナ:$c${NC}" + local inspect_file="${BACKUP_DIR}/${c}_inspect.json" + docker inspect "$c" > "$inspect_file" + + if is_compose_container "$c"; then + echo -e "${BLUE}検出されました$cはい、Docker-Composeコンテナ${NC}" + local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') + local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') + + if [ -z "$project_dir" ]; then + read -p "Compose Directoryは検出されません。手動でパスを入力してください。" project_dir + fi + + # Composeプロジェクトがパッケージ化されている場合は、スキップしてください + if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then + echo -e "${YELLOW}プロジェクトを作成する[$project_name]バックアップ、複製パッケージをスキップ...${NC}" + continue + fi + + if [ -f "$project_dir/docker-compose.yml" ]; then + echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" + echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" + tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . + echo "#docker-compose Recovery:$project_name" >> "$RESTORE_SCRIPT" + echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" + PACKED_COMPOSE_PATHS["$project_dir"]=1 + echo -e "${GREEN}プロジェクトを作成する[$project_name]パック:${project_dir}${NC}" + else + echo -e "${RED}docker-compose.ymlが見つかりません、このコンテナをスキップしてください...${NC}" + fi + else + # 通常のコンテナバックアップボリューム + local VOL_PATHS + VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') + for path in $VOL_PATHS; do + echo "梱包ロール:$path" + tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" + done + + # ポート + local PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) + for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done + + # 環境変数 + local ENV_VARS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") + for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done + + # ボリュームマッピング + local VOL_ARGS="" + for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done + + # 鏡 + local IMAGE + IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") + + echo -e "\ n#復元コンテナ:$c" >> "$RESTORE_SCRIPT" + echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" + fi + done + + chmod +x "$RESTORE_SCRIPT" + echo -e "${GREEN}バックアップが完了しました:${BACKUP_DIR}${NC}" + echo -e "${GREEN}利用可能な復元スクリプト:${RESTORE_SCRIPT}${NC}" + } + + # ---------------------------- + # 削減 + # ---------------------------- + restore_docker() { + list_backups + read -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + + echo -e "${BLUE}復元操作を開始します...${NC}" + + install_docker + + # ------------------------------ + for f in "$BACKUP_DIR"/backup_type_*; do + [[ ! -f "$f" ]] && continue + if grep -q "compose" "$f"; then + project_name=$(basename "$f" | sed 's/backup_type_//') + path_file="$BACKUP_DIR/compose_path_${project_name}.txt" + [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" + [[ -z "$original_path" ]] && read -p "元のパスが見つかりませんでした。復元ディレクトリパスを入力してください。" original_path + + # Composeプロジェクトのコンテナがすでに実行されているかどうかを確認します + running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) + if [[ "$running_count" -gt 0 ]]; then + echo -e "${YELLOW}プロジェクトを作成する[$project_name]すでにコンテナが走っています、復元をスキップします...${NC}" + continue + fi + + read -p "Composeプロジェクトの復元を確認します[$project_name]パスへ[$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "新しい復元パスを入力してください:" original_path + + mkdir -p "$original_path" + tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" + echo -e "${GREEN}プロジェクトを作成する[$project_name]減圧:$original_path${NC}" + + cd "$original_path" || exit 1 + docker compose down || true + docker compose up -d + echo -e "${GREEN}プロジェクトを作成する[$project_name]復元が完了しました!${NC}" + fi + done + + # ------------------------------ + echo -e "${BLUE}通常のDockerコンテナを確認して復元します...${NC}" + local has_container=false + for json in "$BACKUP_DIR"/*_inspect.json; do + [[ ! -f "$json" ]] && continue + has_container=true + container=$(basename "$json" | sed 's/_inspect.json//') + echo -e "${GREEN}コンテナの処理:$container${NC}" + + # 容器が既に存在し、実行中かどうかを確認してください + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container]走っています、復元をスキップします...${NC}" + continue + fi + + IMAGE=$(jq -r '.[0].Config.Image' "$json") + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}ミラー情報は見つかりませんでした、スキップ:$container${NC}"; continue; } + + # ポートマッピング + PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") + for p in "${PORTS[@]}"; do + [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" + done + + # 環境変数 + ENV_ARGS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") + for e in "${ENVS[@]}"; do + ENV_ARGS="$ENV_ARGS -e \"$e\"" + done + + # ボリュームマッピング +ボリュームデータリカバリ + VOL_ARGS="" + mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") + for v in "${VOLS[@]}"; do + VOL_SRC=$(echo "$v" | cut -d':' -f1) + VOL_DST=$(echo "$v" | cut -d':' -f2) + mkdir -p "$VOL_SRC" + VOL_ARGS="$VOL_ARGS -v $VOL_SRC:$VOL_DST" + + VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" + if [[ -f "$VOL_FILE" ]]; then + echo "ボリュームデータの回復:$VOL_SRC" + tar -xzf "$VOL_FILE" -C / + fi + done + + # 既存のが実行されていないコンテナを削除します + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container]存在しますが、実行していません。古いコンテナを削除してください...${NC}" + docker rm -f "$container" + fi + + # コンテナを起動します + echo "restoreコマンドを実行します:docker run -d - name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + done + + [[ "$has_container" == false ]] && echo -e "${YELLOW}通常のコンテナのバックアップ情報は見つかりませんでした${NC}" + } + + + # ---------------------------- + # 移動します + # ---------------------------- + migrate_docker() { + ensure_jq + list_backups + read -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + + read -p "ターゲットサーバーIP:" TARGET_IP + read -p "ターゲットサーバーSSHユーザー名:" TARGET_USER + + LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + + echo -e "${YELLOW}バックアップを転送...${NC}" + if [[ -z "$TARGET_PASS" ]]; then + # キーでログインします + scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + fi + + } + + # ---------------------------- + # バックアップを削除します + # ---------------------------- + delete_backup() { + list_backups + read -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + rm -rf "$BACKUP_DIR" + echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" + } + + # ---------------------------- + # メインメニュー + # ---------------------------- + main_menu() { + + check_root + ensure_docker + ensure_jq + while true; do + clear + echo -e "\n${BLUE}-----------------------------------------${NC}" + echo -e "Dockerバックアップ/移行/復元ツールv1.4" + echo -e "${BLUE}-----------------------------------------${NC}" + list_backups + echo -e "\ n1。バックアップDockerプロジェクト" + echo -e "2。Dockerプロジェクトを移行します" + echo -e "3. Dockerプロジェクトを復元します" + echo -e "4. Dockerプロジェクトのバックアップファイルを削除します" + echo -e "0。メインメニュー /終了に戻ります" + read -p "選択してください:" choice + case $choice in + 1) backup_docker ;; + 2) migrate_docker ;; + 3) restore_docker ;; + 4) delete_backup ;; + 0) exit 0 ;; + *) echo -e "${RED}無効なオプション${NC}" ;; + esac + done + } + + main_menu +} + + + + + linux_docker() { while true; do @@ -6875,6 +7179,7 @@ linux_docker() { 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}19. ${gl_bai}Docker環境をバックアップ/復元/移行します" echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" @@ -7082,6 +7387,9 @@ linux_docker() { restart docker ;; + + + 11) clear send_stats "Docker V6が開いています" @@ -7094,6 +7402,11 @@ linux_docker() { docker_ipv6_off ;; + 19) + docker_ssh_migration + ;; + + 20) clear send_stats "Dockerアンインストール" @@ -7580,7 +7893,7 @@ linux_ldnmp() { 4) clear - # ケダオクラウドデスクトップ + # Kedao Cloudデスクトップ webname="可道云桌面" send_stats "インストール$webname" echo "展開を開始します$webname" @@ -7924,7 +8237,7 @@ linux_ldnmp() { ;; 2) echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8221,7 +8534,7 @@ linux_ldnmp() { case $dingshi in 1) check_crontab_installed - read -e -p "毎週のバックアップの曜日を選択します(0-6、0は日曜日を表します):" weekday + read -e -p "毎週のバックアップ(0-6、0は日曜日を表す)の曜日を選択します。" weekday (crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; 2) @@ -8805,7 +9118,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "郵便局を建設します" clear install telnet local app_id="9" @@ -8815,8 +9128,8 @@ while true; do check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," + echo -e "郵便局サービス$check_docker $update_status" + echo "Poste.ioはオープンソースメールサーバーソリューションです。" echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" @@ -9731,7 +10044,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoyaファミリーバケツ" + send_stats "Xiaoyaファミリーバケット" clear install_docker check_disk_space 1 @@ -9815,8 +10128,10 @@ while true; do docker_rum() { + ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d \ --name nexterm \ + -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ @@ -11331,7 +11646,6 @@ while true; do ;; - b) clear send_stats "すべてのアプリケーションバックアップ" @@ -11400,6 +11714,7 @@ while true; do ;; + 0) kejilion ;; @@ -11684,11 +11999,11 @@ linux_Settings() { 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 + read -e -p "インストールするPythonバージョン番号を入力します(Enter 0からExit):" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "スクリプトPy管理" break_end linux_Settings fi @@ -11751,7 +12066,7 @@ EOF local VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + send_stats "スイッチスクリプトPyバージョン" ;; @@ -12003,7 +12318,7 @@ EOF ;; 4) read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudo許可を削除します + # sudoersファイルからユーザーのsudoアクセス許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; @@ -12104,7 +12419,7 @@ EOF echo "15。オランダのユトレヒト時間16。スペインでのマドリード時間" echo "------------------------" echo "アメリカ" - echo "21. 美国西部时间 22. 美国东部时间" + echo "21。WesternTime22。東部時間" echo "23。カナダ時間24。メキシコの時間" echo "25。ブラジル時間26。アルゼンチン時間" echo "------------------------" @@ -12523,7 +12838,7 @@ EOF echo "TG-BOTモニタリングと早期警告機能" echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" echo "しきい値に達した後、ユーザーはユーザーに送信されます" echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" read -e -p "必ず続行しますか? (y/n):" choice @@ -12759,7 +13074,7 @@ EOF echo "プライバシーとセキュリティ" echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" + echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" echo "--------------------" @@ -12857,7 +13172,7 @@ linux_file() { echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1。ディレクトリを入力します2。ディレクトリを作成3。ディレクトリアクセス許可を変更する4。ディレクトリの名前を変更します" + echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" echo "------------------------" echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" @@ -12958,7 +13273,7 @@ linux_file() { continue fi - mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリは移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" + mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" send_stats "ファイルまたはディレクトリを移動します" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 114edc060..7ce8db11c 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.10" +sh_v="4.1.0" gl_hui='\e[37m' @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -1185,7 +1185,7 @@ iptables_panel() { 5) # IP 화이트리스트 - read -e -p "해제 할 IP 또는 IP 세그먼트를 입력하십시오." o_ip + read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip allow_ip $o_ip ;; 6) @@ -2121,7 +2121,7 @@ web_security() { 22) send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" echo "--------------" echo "CF 매개 변수 가져 오기 :" echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" @@ -4989,7 +4989,7 @@ elrepo_install() { linux_Settings fi # 감지 된 운영 체제 정보를 인쇄합니다 - echo "감지 된 운영 체제 :$os_name $os_version" + echo "운영 체제 감지 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." @@ -5845,7 +5845,7 @@ add_connection() { echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" local password_or_key="" while IFS= read -r line; do - # 입력이 비어 있고 키 컨텐츠에 이미 시작이 포함 된 경우 입력이 끝납니다. + # 입력이 비어 있고 키 컨텐츠에 이미 시작이 포함되어 있으면 입력이 끝납니다. if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi @@ -6617,7 +6617,7 @@ linux_tools() { install iftop clear iftop - send_stats "Iftop을 설치하십시오" + send_stats "iftop을 설치하십시오" ;; 7) clear @@ -6760,7 +6760,7 @@ linux_tools() { 32) clear - send_stats "모든 설치 (게임 및 스크린 세이버 제외)" + send_stats "모든 설치 (게임 및 화면 보호기 제외)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; @@ -6850,6 +6850,310 @@ linux_bbr() { +docker_ssh_migration() { + + GREEN='\033[0;32m' + RED='\033[0;31m' + YELLOW='\033[1;33m' + BLUE='\033[0;36m' + NC='\033[0m' + + BACKUP_ROOT="/tmp" + DATE_STR=$(date +%Y%m%d_%H%M%S) + + check_root() { + [[ "$EUID" -ne 0 ]] && { echo -e "${RED}루트 권한을 사용하여 스크립트를 실행하십시오!${NC}"; exit 1; } + } + + ensure_docker() { + command -v docker &>/dev/null || { echo -e "${RED}Docker가 설치되지 않았습니다!${NC}"; exit 1; } + } + + ensure_jq() { + command -v jq &>/dev/null || { echo -e "${RED}JQ가 설치되지 않았습니다!${NC}"; exit 1; } + } + + is_compose_container() { + local container=$1 + docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 + } + + list_backups() { + echo -e "${BLUE}현재 백업 목록 :${NC}" + ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음" + } + + + + # ---------------------------- + # 지원 + # ---------------------------- + backup_docker() { + echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" + read -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers + local TARGET_CONTAINERS=() + if [ -z "$containers" ]; then + mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') + else + read -ra TARGET_CONTAINERS <<< "$containers" + fi + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}컨테이너가 없습니다${NC}"; return; } + + local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" + mkdir -p "$BACKUP_DIR" + + local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" + echo "#!/bin/bash" > "$RESTORE_SCRIPT" + echo "set -e" >> "$RESTORE_SCRIPT" + echo "# 자동으로 생성 된 복원 스크립트" >> "$RESTORE_SCRIPT" + + # 중복 포장을 피하기 위해 패키지 작곡 프로젝트의 경로를 기록하십시오. + declare -A PACKED_COMPOSE_PATHS=() + + for c in "${TARGET_CONTAINERS[@]}"; do + echo -e "${GREEN}백업 컨테이너 :$c${NC}" + local inspect_file="${BACKUP_DIR}/${c}_inspect.json" + docker inspect "$c" > "$inspect_file" + + if is_compose_container "$c"; then + echo -e "${BLUE}감지$c예, Docker-compose 컨테이너${NC}" + local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') + local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') + + if [ -z "$project_dir" ]; then + read -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir + fi + + # Compose 프로젝트가 포장 된 경우 건너 뛰십시오 + if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then + echo -e "${YELLOW}작곡 프로젝트 [$project_name] 백업, 중복 포장을 건너 뛰십시오 ...${NC}" + continue + fi + + if [ -f "$project_dir/docker-compose.yml" ]; then + echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" + echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" + tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . + echo "# Docker-Compose Recovery :$project_name" >> "$RESTORE_SCRIPT" + echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" + PACKED_COMPOSE_PATHS["$project_dir"]=1 + echo -e "${GREEN}작곡 프로젝트 [$project_name] 포장 :${project_dir}${NC}" + else + echo -e "${RED}docker-compose.yml을 찾을 수 없고이 컨테이너를 건너 뛰십시오 ...${NC}" + fi + else + # 일반 컨테이너 백업 볼륨 + local VOL_PATHS + VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') + for path in $VOL_PATHS; do + echo "포장 롤 :$path" + tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" + done + + # 포트 + local PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) + for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done + + # 환경 변수 + local ENV_VARS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") + for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done + + # 볼륨 매핑 + local VOL_ARGS="" + for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done + + # 거울 + local IMAGE + IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") + + echo -e "\ n# 복원 컨테이너 :$c" >> "$RESTORE_SCRIPT" + echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" + fi + done + + chmod +x "$RESTORE_SCRIPT" + echo -e "${GREEN}백업이 완료되었습니다.${BACKUP_DIR}${NC}" + echo -e "${GREEN}사용 가능한 복원 스크립트 :${RESTORE_SCRIPT}${NC}" + } + + # ---------------------------- + # 절감 + # ---------------------------- + restore_docker() { + list_backups + read -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + + echo -e "${BLUE}복원 작업 시작 ...${NC}" + + install_docker + + # ----------------------------- + for f in "$BACKUP_DIR"/backup_type_*; do + [[ ! -f "$f" ]] && continue + if grep -q "compose" "$f"; then + project_name=$(basename "$f" | sed 's/backup_type_//') + path_file="$BACKUP_DIR/compose_path_${project_name}.txt" + [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" + [[ -z "$original_path" ]] && read -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path + + # Compose 프로젝트 용 컨테이너가 이미 실행 중인지 확인하십시오. + running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) + if [[ "$running_count" -gt 0 ]]; then + echo -e "${YELLOW}작곡 프로젝트 [$project_name] 이미 컨테이너가 실행 중입니다. 스킵 복원 ...${NC}" + continue + fi + + read -p "Compose 프로젝트 복원 확인 [$project_name] 경로로 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "새로운 복원 경로를 입력하십시오 :" original_path + + mkdir -p "$original_path" + tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" + echo -e "${GREEN}작곡 프로젝트 [$project_name] 압축 압축 : :$original_path${NC}" + + cd "$original_path" || exit 1 + docker compose down || true + docker compose up -d + echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원이 완료되었습니다!${NC}" + fi + done + + # ----------------------------- + echo -e "${BLUE}일반적인 도커 컨테이너를 확인하고 복원하십시오 ...${NC}" + local has_container=false + for json in "$BACKUP_DIR"/*_inspect.json; do + [[ ! -f "$json" ]] && continue + has_container=true + container=$(basename "$json" | sed 's/_inspect.json//') + echo -e "${GREEN}처리 컨테이너 :$container${NC}" + + # 컨테이너가 이미 존재하고 실행 중인지 확인하십시오 + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}컨테이너 [$container]는 실행 중입니다. 회복을 건너 뛰십시오 ...${NC}" + continue + fi + + IMAGE=$(jq -r '.[0].Config.Image' "$json") + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}거울 정보는 찾을 수 없었습니다.$container${NC}"; continue; } + + # 포트 매핑 + PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") + for p in "${PORTS[@]}"; do + [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" + done + + # 환경 변수 + ENV_ARGS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") + for e in "${ENVS[@]}"; do + ENV_ARGS="$ENV_ARGS -e \"$e\"" + done + + # 볼륨 매핑 + 볼륨 데이터 복구 + VOL_ARGS="" + mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") + for v in "${VOLS[@]}"; do + VOL_SRC=$(echo "$v" | cut -d':' -f1) + VOL_DST=$(echo "$v" | cut -d':' -f2) + mkdir -p "$VOL_SRC" + VOL_ARGS="$VOL_ARGS -v $VOL_SRC:$VOL_DST" + + VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" + if [[ -f "$VOL_FILE" ]]; then + echo "볼륨 데이터 복구 :$VOL_SRC" + tar -xzf "$VOL_FILE" -C / + fi + done + + # 기존이지만 실행되지 않은 컨테이너를 삭제하십시오 + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}컨테이너 [$container] 존재하지만 실행되지 않고 오래된 컨테이너를 삭제합니다 ...${NC}" + docker rm -f "$container" + fi + + # 컨테이너를 시작하십시오 + echo "복원 명령 실행 : docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + done + + [[ "$has_container" == false ]] && echo -e "${YELLOW}일반 컨테이너에 대한 백업 정보는 발견되지 않았습니다${NC}" + } + + + # ---------------------------- + # 마이그레이션 + # ---------------------------- + migrate_docker() { + ensure_jq + list_backups + read -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + + read -p "대상 서버 IP :" TARGET_IP + read -p "대상 서버 SSH 사용자 이름 :" TARGET_USER + + LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + + echo -e "${YELLOW}백업 전송 ...${NC}" + if [[ -z "$TARGET_PASS" ]]; then + # 키로 로그인하십시오 + scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + fi + + } + + # ---------------------------- + # 백업을 삭제하십시오 + # ---------------------------- + delete_backup() { + list_backups + read -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + rm -rf "$BACKUP_DIR" + echo -e "${GREEN}삭제 된 백업 :${BACKUP_DIR}${NC}" + } + + # ---------------------------- + # 메인 메뉴 + # ---------------------------- + main_menu() { + + check_root + ensure_docker + ensure_jq + while true; do + clear + echo -e "\n${BLUE}-----------------------------------------${NC}" + echo -e "도커 백업/마이그레이션/복원 도구 v1.4" + echo -e "${BLUE}-----------------------------------------${NC}" + list_backups + echo -e "\ n1. 백업 도커 프로젝트" + echo -e "2. Docker 프로젝트를 마이그레이션합니다" + echo -e "3. Docker 프로젝트를 복원하십시오" + echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" + echo -e "0. 메인 메뉴 / 종료로 돌아갑니다" + read -p "선택하십시오 :" choice + case $choice in + 1) backup_docker ;; + 2) migrate_docker ;; + 3) restore_docker ;; + 4) delete_backup ;; + 0) exit 0 ;; + *) echo -e "${RED}잘못된 옵션${NC}" ;; + esac + done + } + + main_menu +} + + + + + linux_docker() { while true; do @@ -6875,6 +7179,7 @@ linux_docker() { 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}19. ${gl_bai}백업/복원/Docker 환경을 마이그레이션합니다" echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경을 제거하십시오" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" @@ -7082,6 +7387,9 @@ linux_docker() { restart docker ;; + + + 11) clear send_stats "Docker V6 열기" @@ -7094,6 +7402,11 @@ linux_docker() { docker_ipv6_off ;; + 19) + docker_ssh_migration + ;; + + 20) clear send_stats "Docker는 제거합니다" @@ -7924,7 +8237,7 @@ linux_ldnmp() { ;; 2) echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download_db + read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -9815,8 +10128,10 @@ while true; do docker_rum() { + ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d \ --name nexterm \ + -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ @@ -11331,7 +11646,6 @@ while true; do ;; - b) clear send_stats "모든 응용 프로그램 백업" @@ -11400,6 +11714,7 @@ while true; do ;; + 0) kejilion ;; @@ -12758,7 +13073,7 @@ EOF fi echo "개인 정보 및 보안" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." echo "------------------------------------------------" echo -e "현재 상태 :$status_message" @@ -12954,7 +13269,7 @@ linux_file() { read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then echo "오류 : 대상 경로를 입력하십시오." - send_stats "이동 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." + send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." continue fi @@ -13443,7 +13758,7 @@ echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타 echo "도메인 이름 인증서 응용 프로그램 K SSL" echo "도메인 이름 인증서 만료 쿼리 K SSL PS" echo "도커 환경 설치 K 도커 설치 | K 도커 설치" -echo "Docker Container Management K Docker PS | K 도커 컨테이너" +echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" echo "Docker Image Management K Docker img | K Docker Image" echo "LDNMP 사이트 관리 K 웹" echo "LDNMP 캐시 정리 K 웹 캐시" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 61a4f8c73..46bf61d4d 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.0.10" +sh_v="4.1.0" gl_hui='\e[37m' @@ -6850,6 +6850,310 @@ linux_bbr() { +docker_ssh_migration() { + + GREEN='\033[0;32m' + RED='\033[0;31m' + YELLOW='\033[1;33m' + BLUE='\033[0;36m' + NC='\033[0m' + + BACKUP_ROOT="/tmp" + DATE_STR=$(date +%Y%m%d_%H%M%S) + + check_root() { + [[ "$EUID" -ne 0 ]] && { echo -e "${RED}請使用 root 權限運行腳本!${NC}"; exit 1; } + } + + ensure_docker() { + command -v docker &>/dev/null || { echo -e "${RED}Docker 未安裝!${NC}"; exit 1; } + } + + ensure_jq() { + command -v jq &>/dev/null || { echo -e "${RED}jq 未安裝!${NC}"; exit 1; } + } + + is_compose_container() { + local container=$1 + docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 + } + + list_backups() { + echo -e "${BLUE}當前備份列表:${NC}" + ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "無備份" + } + + + + # ---------------------------- + # 備份 + # ---------------------------- + backup_docker() { + echo -e "${YELLOW}正在備份 Docker 容器...${NC}" + read -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers + local TARGET_CONTAINERS=() + if [ -z "$containers" ]; then + mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') + else + read -ra TARGET_CONTAINERS <<< "$containers" + fi + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}沒有找到容器${NC}"; return; } + + local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" + mkdir -p "$BACKUP_DIR" + + local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" + echo "#!/bin/bash" > "$RESTORE_SCRIPT" + echo "set -e" >> "$RESTORE_SCRIPT" + echo "# 自動生成的還原腳本" >> "$RESTORE_SCRIPT" + + # 記錄已打包過的 Compose 項目路徑,避免重複打包 + declare -A PACKED_COMPOSE_PATHS=() + + for c in "${TARGET_CONTAINERS[@]}"; do + echo -e "${GREEN}備份容器:$c${NC}" + local inspect_file="${BACKUP_DIR}/${c}_inspect.json" + docker inspect "$c" > "$inspect_file" + + if is_compose_container "$c"; then + echo -e "${BLUE}檢測到$c是 docker-compose 容器${NC}" + local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') + local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') + + if [ -z "$project_dir" ]; then + read -p "未檢測到 compose 目錄,請手動輸入路徑:" project_dir + fi + + # 如果該 Compose 項目已經打包過,跳過 + if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then + echo -e "${YELLOW}Compose 項目 [$project_name] 已備份過,跳過重複打包...${NC}" + continue + fi + + if [ -f "$project_dir/docker-compose.yml" ]; then + echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" + echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" + tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . + echo "# docker-compose 恢復:$project_name" >> "$RESTORE_SCRIPT" + echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" + PACKED_COMPOSE_PATHS["$project_dir"]=1 + echo -e "${GREEN}Compose 項目 [$project_name] 已打包:${project_dir}${NC}" + else + echo -e "${RED}未找到 docker-compose.yml,跳過此容器...${NC}" + fi + else + # 普通容器備份卷 + local VOL_PATHS + VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') + for path in $VOL_PATHS; do + echo "打包卷:$path" + tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" + done + + # 端口 + local PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) + for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done + + # 環境變量 + local ENV_VARS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") + for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done + + # 卷映射 + local VOL_ARGS="" + for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done + + # 鏡像 + local IMAGE + IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") + + echo -e "\n# 還原容器:$c" >> "$RESTORE_SCRIPT" + echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" + fi + done + + chmod +x "$RESTORE_SCRIPT" + echo -e "${GREEN}備份完成:${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用還原腳本:${RESTORE_SCRIPT}${NC}" + } + + # ---------------------------- + # 還原 + # ---------------------------- + restore_docker() { + list_backups + read -p "請輸入要還原的備份目錄:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } + + echo -e "${BLUE}開始執行還原操作...${NC}" + + install_docker + + # --------- 優先還原 Compose 項目 --------- + for f in "$BACKUP_DIR"/backup_type_*; do + [[ ! -f "$f" ]] && continue + if grep -q "compose" "$f"; then + project_name=$(basename "$f" | sed 's/backup_type_//') + path_file="$BACKUP_DIR/compose_path_${project_name}.txt" + [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" + [[ -z "$original_path" ]] && read -p "未找到原始路徑,請輸入還原目錄路徑:" original_path + + # 檢查該 compose 項目的容器是否已經在運行 + running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) + if [[ "$running_count" -gt 0 ]]; then + echo -e "${YELLOW}Compose 項目 [$project_name] 已有容器在運行,跳過還原...${NC}" + continue + fi + + read -p "確認還原 Compose 項目 [$project_name] 到路徑 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "請輸入新的還原路徑:" original_path + + mkdir -p "$original_path" + tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" + echo -e "${GREEN}Compose 項目 [$project_name] 已解壓到:$original_path${NC}" + + cd "$original_path" || exit 1 + docker compose down || true + docker compose up -d + echo -e "${GREEN}Compose 項目 [$project_name] 還原完成!${NC}" + fi + done + + # --------- 繼續還原普通容器 --------- + echo -e "${BLUE}檢查並還原普通 Docker 容器...${NC}" + local has_container=false + for json in "$BACKUP_DIR"/*_inspect.json; do + [[ ! -f "$json" ]] && continue + has_container=true + container=$(basename "$json" | sed 's/_inspect.json//') + echo -e "${GREEN}處理容器:$container${NC}" + + # 檢查容器是否已經存在且正在運行 + if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container] 已在運行,跳過還原...${NC}" + continue + fi + + IMAGE=$(jq -r '.[0].Config.Image' "$json") + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到鏡像信息,跳過:$container${NC}"; continue; } + + # 端口映射 + PORT_ARGS="" + mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") + for p in "${PORTS[@]}"; do + [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" + done + + # 環境變量 + ENV_ARGS="" + mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") + for e in "${ENVS[@]}"; do + ENV_ARGS="$ENV_ARGS -e \"$e\"" + done + + # 卷映射 + 卷數據恢復 + VOL_ARGS="" + mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") + for v in "${VOLS[@]}"; do + VOL_SRC=$(echo "$v" | cut -d':' -f1) + VOL_DST=$(echo "$v" | cut -d':' -f2) + mkdir -p "$VOL_SRC" + VOL_ARGS="$VOL_ARGS -v $VOL_SRC:$VOL_DST" + + VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" + if [[ -f "$VOL_FILE" ]]; then + echo "恢復卷數據:$VOL_SRC" + tar -xzf "$VOL_FILE" -C / + fi + done + + # 刪除已存在但未運行的容器 + if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then + echo -e "${YELLOW}容器 [$container] 存在但未運行,刪除舊容器...${NC}" + docker rm -f "$container" + fi + + # 啟動容器 + echo "執行還原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + done + + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的備份信息${NC}" + } + + + # ---------------------------- + # 遷移 + # ---------------------------- + migrate_docker() { + ensure_jq + list_backups + read -p "請輸入要遷移的備份目錄:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } + + read -p "目標服務器IP:" TARGET_IP + read -p "目標服務器SSH用戶名:" TARGET_USER + + LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + + echo -e "${YELLOW}傳輸備份中...${NC}" + if [[ -z "$TARGET_PASS" ]]; then + # 使用密鑰登錄 + scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + fi + + } + + # ---------------------------- + # 刪除備份 + # ---------------------------- + delete_backup() { + list_backups + read -p "請輸入要刪除的備份目錄:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } + rm -rf "$BACKUP_DIR" + echo -e "${GREEN}已刪除備份:${BACKUP_DIR}${NC}" + } + + # ---------------------------- + # 主菜單 + # ---------------------------- + main_menu() { + + check_root + ensure_docker + ensure_jq + while true; do + clear + echo -e "\n${BLUE}-----------------------------------------${NC}" + echo -e "Docker 備份 / 遷移 / 還原 工具 v1.4" + echo -e "${BLUE}-----------------------------------------${NC}" + list_backups + echo -e "\n1. 備份docker項目" + echo -e "2. 遷移docker項目" + echo -e "3. 還原docker項目" + echo -e "4. 刪除docker項目的備份文件" + echo -e "0. 返回主菜單 / 退出" + read -p "請選擇:" choice + case $choice in + 1) backup_docker ;; + 2) migrate_docker ;; + 3) restore_docker ;; + 4) delete_backup ;; + 0) exit 0 ;; + *) echo -e "${RED}無效選項${NC}" ;; + esac + done + } + + main_menu +} + + + + + linux_docker() { while true; do @@ -6875,6 +7179,7 @@ linux_docker() { 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}19. ${gl_bai}備份/還原/遷移Docker環境" echo -e "${gl_kjlan}20. ${gl_bai}卸載Docker環境" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" @@ -7082,6 +7387,9 @@ linux_docker() { restart docker ;; + + + 11) clear send_stats "Docker v6 開" @@ -7094,6 +7402,11 @@ linux_docker() { docker_ipv6_off ;; + 19) + docker_ssh_migration + ;; + + 20) clear send_stats "Docker卸載" @@ -9815,8 +10128,10 @@ while true; do docker_rum() { + ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d \ --name nexterm \ + -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ --restart unless-stopped \ @@ -11331,7 +11646,6 @@ while true; do ;; - b) clear send_stats "全部應用備份" @@ -11400,6 +11714,7 @@ while true; do ;; + 0) kejilion ;; From 18e0297481d07189c2aa43a8370082f44ee37a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 15:43:33 +0800 Subject: [PATCH 099/553] Update kejilion.sh --- cn/kejilion.sh | 62 +++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 508ee0c6f..6e94b9d43 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6861,17 +6861,6 @@ docker_ssh_migration() { BACKUP_ROOT="/tmp" DATE_STR=$(date +%Y%m%d_%H%M%S) - check_root() { - [[ "$EUID" -ne 0 ]] && { echo -e "${RED}请使用 root 权限运行脚本!${NC}"; exit 1; } - } - - ensure_docker() { - command -v docker &>/dev/null || { echo -e "${RED}Docker 未安装!${NC}"; exit 1; } - } - - ensure_jq() { - command -v jq &>/dev/null || { echo -e "${RED}jq 未安装!${NC}"; exit 1; } - } is_compose_container() { local container=$1 @@ -6891,6 +6880,10 @@ docker_ssh_migration() { backup_docker() { echo -e "${YELLOW}正在备份 Docker 容器...${NC}" read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + + install tar jq gzip + install_docker + local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -6973,9 +6966,19 @@ docker_ssh_migration() { fi done + + # 备份 /home/docker 下的所有文件(不含子目录) + if [ -d "/home/docker" ]; then + echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + fi + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + + } # ---------------------------- @@ -6988,6 +6991,7 @@ docker_ssh_migration() { echo -e "${BLUE}开始执行还原操作...${NC}" + install tar jq gzip install_docker # --------- 优先还原 Compose 项目 --------- @@ -7013,7 +7017,7 @@ docker_ssh_migration() { tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" - cd "$original_path" || exit 1 + cd "$original_path" || return docker compose down || true docker compose up -d echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" @@ -7080,6 +7084,18 @@ docker_ssh_migration() { done [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + + # 还原 /home/docker 下的文件 + if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then + echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" + mkdir -p /home/docker + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C /home/docker/ + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" + else + echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" + fi + + } @@ -7120,28 +7136,28 @@ docker_ssh_migration() { # 主菜单 # ---------------------------- main_menu() { - - check_root - ensure_docker - ensure_jq while true; do clear - echo -e "\n${BLUE}-----------------------------------------${NC}" - echo -e "Docker 备份 / 迁移 / 还原 工具 v1.4" - echo -e "${BLUE}-----------------------------------------${NC}" + echo "------------------------" + echo -e "Docker备份/迁移/还原工具" + echo "------------------------" list_backups - echo -e "\n1. 备份docker项目" + echo -e "" + echo "------------------------" + echo -e "1. 备份docker项目" echo -e "2. 迁移docker项目" echo -e "3. 还原docker项目" echo -e "4. 删除docker项目的备份文件" - echo -e "0. 返回主菜单 / 退出" + echo "------------------------" + echo -e "0. 返回上一级菜单" + echo "------------------------" read -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; - 0) exit 0 ;; + 0) return ;; *) echo -e "${RED}无效选项${NC}" ;; esac done @@ -7179,7 +7195,7 @@ linux_docker() { 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}19. ${gl_bai}备份/还原/迁移Docker环境" + echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" From fdd6fd400d2476f4b3f146a7590b9f19dffccefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 15:44:09 +0800 Subject: [PATCH 100/553] Refactor backup and restore functions in kejilion.sh --- kejilion.sh | 62 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 9878c10a8..f2b4d8e2e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6861,17 +6861,6 @@ docker_ssh_migration() { BACKUP_ROOT="/tmp" DATE_STR=$(date +%Y%m%d_%H%M%S) - check_root() { - [[ "$EUID" -ne 0 ]] && { echo -e "${RED}请使用 root 权限运行脚本!${NC}"; exit 1; } - } - - ensure_docker() { - command -v docker &>/dev/null || { echo -e "${RED}Docker 未安装!${NC}"; exit 1; } - } - - ensure_jq() { - command -v jq &>/dev/null || { echo -e "${RED}jq 未安装!${NC}"; exit 1; } - } is_compose_container() { local container=$1 @@ -6891,6 +6880,10 @@ docker_ssh_migration() { backup_docker() { echo -e "${YELLOW}正在备份 Docker 容器...${NC}" read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + + install tar jq gzip + install_docker + local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -6973,9 +6966,19 @@ docker_ssh_migration() { fi done + + # 备份 /home/docker 下的所有文件(不含子目录) + if [ -d "/home/docker" ]; then + echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + fi + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + + } # ---------------------------- @@ -6988,6 +6991,7 @@ docker_ssh_migration() { echo -e "${BLUE}开始执行还原操作...${NC}" + install tar jq gzip install_docker # --------- 优先还原 Compose 项目 --------- @@ -7013,7 +7017,7 @@ docker_ssh_migration() { tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" - cd "$original_path" || exit 1 + cd "$original_path" || return docker compose down || true docker compose up -d echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" @@ -7080,6 +7084,18 @@ docker_ssh_migration() { done [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + + # 还原 /home/docker 下的文件 + if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then + echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" + mkdir -p /home/docker + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C /home/docker/ + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" + else + echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" + fi + + } @@ -7120,28 +7136,28 @@ docker_ssh_migration() { # 主菜单 # ---------------------------- main_menu() { - - check_root - ensure_docker - ensure_jq while true; do clear - echo -e "\n${BLUE}-----------------------------------------${NC}" - echo -e "Docker 备份 / 迁移 / 还原 工具 v1.4" - echo -e "${BLUE}-----------------------------------------${NC}" + echo "------------------------" + echo -e "Docker备份/迁移/还原工具" + echo "------------------------" list_backups - echo -e "\n1. 备份docker项目" + echo -e "" + echo "------------------------" + echo -e "1. 备份docker项目" echo -e "2. 迁移docker项目" echo -e "3. 还原docker项目" echo -e "4. 删除docker项目的备份文件" - echo -e "0. 返回主菜单 / 退出" + echo "------------------------" + echo -e "0. 返回上一级菜单" + echo "------------------------" read -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; - 0) exit 0 ;; + 0) return ;; *) echo -e "${RED}无效选项${NC}" ;; esac done @@ -7179,7 +7195,7 @@ linux_docker() { 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}19. ${gl_bai}备份/还原/迁移Docker环境" + echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" From ef7c9f7b365239d24cfbe7c7bcfccfa2c78704d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 16:10:31 +0800 Subject: [PATCH 101/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6e94b9d43..2796c8638 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -7089,7 +7089,7 @@ docker_ssh_migration() { if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" mkdir -p /home/docker - tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C /home/docker/ + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" From f334bc55c193dada50e26f3f49d6ef4db8ea35c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 16:10:54 +0800 Subject: [PATCH 102/553] Restore home_docker_files to root instead of /home/docker Change extraction path for home_docker_files backup. --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index f2b4d8e2e..196fcbb8c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -7089,7 +7089,7 @@ docker_ssh_migration() { if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" mkdir -p /home/docker - tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C /home/docker/ + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" From c1a8432d6a0012faab73c79ae69a8df414f0ea00 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 24 Aug 2025 08:41:10 +0000 Subject: [PATCH 103/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-24=2008:41:10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 62 +++++++++++++++++++++++++++++++------------------- jp/kejilion.sh | 62 +++++++++++++++++++++++++++++++------------------- kr/kejilion.sh | 62 +++++++++++++++++++++++++++++++------------------- tw/kejilion.sh | 62 +++++++++++++++++++++++++++++++------------------- 4 files changed, 156 insertions(+), 92 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 8b8f2673f..1c21c147f 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -6861,17 +6861,6 @@ docker_ssh_migration() { BACKUP_ROOT="/tmp" DATE_STR=$(date +%Y%m%d_%H%M%S) - check_root() { - [[ "$EUID" -ne 0 ]] && { echo -e "${RED}Please use root permissions to run the script!${NC}"; exit 1; } - } - - ensure_docker() { - command -v docker &>/dev/null || { echo -e "${RED}Docker not installed!${NC}"; exit 1; } - } - - ensure_jq() { - command -v jq &>/dev/null || { echo -e "${RED}jq not installed!${NC}"; exit 1; } - } is_compose_container() { local container=$1 @@ -6891,6 +6880,10 @@ docker_ssh_migration() { backup_docker() { echo -e "${YELLOW}Backing up Docker container...${NC}" read -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers + + install tar jq gzip + install_docker + local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -6973,9 +6966,19 @@ docker_ssh_migration() { fi done + + # Backup all files under /home/docker (excluding subdirectories) + if [ -d "/home/docker" ]; then + echo -e "${BLUE}Backup the files under /home/docker...${NC}" + find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + echo -e "${GREEN}The file under /home/docker has been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + fi + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}Backup is complete:${BACKUP_DIR}${NC}" echo -e "${GREEN}Available restore scripts:${RESTORE_SCRIPT}${NC}" + + } # ---------------------------- @@ -6988,6 +6991,7 @@ docker_ssh_migration() { echo -e "${BLUE}Start the restore operation...${NC}" + install tar jq gzip install_docker # ------------------------- @@ -7013,7 +7017,7 @@ docker_ssh_migration() { tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" echo -e "${GREEN}Compose project [$project_name] Decompressed to:$original_path${NC}" - cd "$original_path" || exit 1 + cd "$original_path" || return docker compose down || true docker compose up -d echo -e "${GREEN}Compose project [$project_name] Restore is complete!${NC}" @@ -7080,6 +7084,18 @@ docker_ssh_migration() { done [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for normal containers was found${NC}" + + # Restore the file under /home/docker + if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then + echo -e "${BLUE}Restore the file under /home/docker...${NC}" + mkdir -p /home/docker + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / + echo -e "${GREEN}The file under /home/docker has been restored${NC}" + else + echo -e "${YELLOW}No backup of the file under /home/docker was found, skip...${NC}" + fi + + } @@ -7120,28 +7136,28 @@ docker_ssh_migration() { # Main Menu # ---------------------------- main_menu() { - - check_root - ensure_docker - ensure_jq while true; do clear - echo -e "\n${BLUE}-----------------------------------------${NC}" - echo -e "Docker Backup/Migration/Restore Tool v1.4" - echo -e "${BLUE}-----------------------------------------${NC}" + echo "------------------------" + echo -e "Docker backup/migration/restore tool" + echo "------------------------" list_backups - echo -e "\n1. Backup docker project" + echo -e "" + echo "------------------------" + echo -e "1. Backup the docker project" echo -e "2. Migrate docker projects" echo -e "3. Restore the docker project" echo -e "4. Delete the backup file of the docker project" - echo -e "0. Return to main menu / Exit" + echo "------------------------" + echo -e "0. Return to the previous menu" + echo "------------------------" read -p "Please select:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; - 0) exit 0 ;; + 0) return ;; *) echo -e "${RED}Invalid option${NC}" ;; esac done @@ -7179,7 +7195,7 @@ linux_docker() { echo -e "${gl_kjlan}11. ${gl_bai}Enable Docker-ipv6 access" echo -e "${gl_kjlan}12. ${gl_bai}Close Docker-ipv6 access" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}Backup/restore/migrate Docker environment" + echo -e "${gl_kjlan}19. ${gl_bai}Backup/Migration/Restore Docker Environment" echo -e "${gl_kjlan}20. ${gl_bai}Uninstall the Docker environment" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index ba7180fb0..d2122269f 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -6861,17 +6861,6 @@ docker_ssh_migration() { BACKUP_ROOT="/tmp" DATE_STR=$(date +%Y%m%d_%H%M%S) - check_root() { - [[ "$EUID" -ne 0 ]] && { echo -e "${RED}ルートアクセス許可を使用してスクリプトを実行してください!${NC}"; exit 1; } - } - - ensure_docker() { - command -v docker &>/dev/null || { echo -e "${RED}Dockerがインストールされていません!${NC}"; exit 1; } - } - - ensure_jq() { - command -v jq &>/dev/null || { echo -e "${RED}JQがインストールされていません!${NC}"; exit 1; } - } is_compose_container() { local container=$1 @@ -6891,6 +6880,10 @@ docker_ssh_migration() { backup_docker() { echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}" read -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers + + install tar jq gzip + install_docker + local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -6973,9 +6966,19 @@ docker_ssh_migration() { fi done + + # /home /dockerのすべてのファイルをバックアップします(サブディレクトリを除く) + if [ -d "/home/docker" ]; then + echo -e "${BLUE}/home /dockerの下のファイルをバックアップ...${NC}" + find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + echo -e "${GREEN}/home /dockerの下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + fi + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}バックアップが完了しました:${BACKUP_DIR}${NC}" echo -e "${GREEN}利用可能な復元スクリプト:${RESTORE_SCRIPT}${NC}" + + } # ---------------------------- @@ -6988,6 +6991,7 @@ docker_ssh_migration() { echo -e "${BLUE}復元操作を開始します...${NC}" + install tar jq gzip install_docker # ------------------------------ @@ -7013,7 +7017,7 @@ docker_ssh_migration() { tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" echo -e "${GREEN}プロジェクトを作成する[$project_name]減圧:$original_path${NC}" - cd "$original_path" || exit 1 + cd "$original_path" || return docker compose down || true docker compose up -d echo -e "${GREEN}プロジェクトを作成する[$project_name]復元が完了しました!${NC}" @@ -7080,6 +7084,18 @@ docker_ssh_migration() { done [[ "$has_container" == false ]] && echo -e "${YELLOW}通常のコンテナのバックアップ情報は見つかりませんでした${NC}" + + # /home /dockerの下でファイルを復元します + if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then + echo -e "${BLUE}/home /dockerの下でファイルを復元します...${NC}" + mkdir -p /home/docker + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / + echo -e "${GREEN}/home /dockerの下のファイルが復元されました${NC}" + else + echo -e "${YELLOW}/home /dockerの下のファイルのバックアップは見つかりませんでした、スキップ...${NC}" + fi + + } @@ -7120,28 +7136,28 @@ docker_ssh_migration() { # メインメニュー # ---------------------------- main_menu() { - - check_root - ensure_docker - ensure_jq while true; do clear - echo -e "\n${BLUE}-----------------------------------------${NC}" - echo -e "Dockerバックアップ/移行/復元ツールv1.4" - echo -e "${BLUE}-----------------------------------------${NC}" + echo "------------------------" + echo -e "Dockerバックアップ/移行/復元ツール" + echo "------------------------" list_backups - echo -e "\ n1。バックアップDockerプロジェクト" + echo -e "" + echo "------------------------" + echo -e "1。Dockerプロジェクトをバックアップします" echo -e "2。Dockerプロジェクトを移行します" echo -e "3. Dockerプロジェクトを復元します" echo -e "4. Dockerプロジェクトのバックアップファイルを削除します" - echo -e "0。メインメニュー /終了に戻ります" + echo "------------------------" + echo -e "0。前のメニューに戻ります" + echo "------------------------" read -p "選択してください:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; - 0) exit 0 ;; + 0) return ;; *) echo -e "${RED}無効なオプション${NC}" ;; esac done @@ -7179,7 +7195,7 @@ linux_docker() { 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}19. ${gl_bai}Docker環境をバックアップ/復元/移行します" + echo -e "${gl_kjlan}19. ${gl_bai}バックアップ/移行/復元Docker環境" echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 7ce8db11c..33e749951 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -6861,17 +6861,6 @@ docker_ssh_migration() { BACKUP_ROOT="/tmp" DATE_STR=$(date +%Y%m%d_%H%M%S) - check_root() { - [[ "$EUID" -ne 0 ]] && { echo -e "${RED}루트 권한을 사용하여 스크립트를 실행하십시오!${NC}"; exit 1; } - } - - ensure_docker() { - command -v docker &>/dev/null || { echo -e "${RED}Docker가 설치되지 않았습니다!${NC}"; exit 1; } - } - - ensure_jq() { - command -v jq &>/dev/null || { echo -e "${RED}JQ가 설치되지 않았습니다!${NC}"; exit 1; } - } is_compose_container() { local container=$1 @@ -6891,6 +6880,10 @@ docker_ssh_migration() { backup_docker() { echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" read -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers + + install tar jq gzip + install_docker + local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -6973,9 +6966,19 @@ docker_ssh_migration() { fi done + + # /home /docker 아래의 모든 파일을 백업 (하위 디렉터 제외) + if [ -d "/home/docker" ]; then + echo -e "${BLUE}/home /docker 아래 파일을 백업 ...${NC}" + find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + echo -e "${GREEN}/home /docker의 파일은 다음과 같이 포장되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + fi + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}백업이 완료되었습니다.${BACKUP_DIR}${NC}" echo -e "${GREEN}사용 가능한 복원 스크립트 :${RESTORE_SCRIPT}${NC}" + + } # ---------------------------- @@ -6988,6 +6991,7 @@ docker_ssh_migration() { echo -e "${BLUE}복원 작업 시작 ...${NC}" + install tar jq gzip install_docker # ----------------------------- @@ -7013,7 +7017,7 @@ docker_ssh_migration() { tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" echo -e "${GREEN}작곡 프로젝트 [$project_name] 압축 압축 : :$original_path${NC}" - cd "$original_path" || exit 1 + cd "$original_path" || return docker compose down || true docker compose up -d echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원이 완료되었습니다!${NC}" @@ -7080,6 +7084,18 @@ docker_ssh_migration() { done [[ "$has_container" == false ]] && echo -e "${YELLOW}일반 컨테이너에 대한 백업 정보는 발견되지 않았습니다${NC}" + + # /home /docker에서 파일을 복원하십시오 + if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then + echo -e "${BLUE}/home /docker에서 파일을 복원 ...${NC}" + mkdir -p /home/docker + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / + echo -e "${GREEN}/home /docker의 파일이 복원되었습니다${NC}" + else + echo -e "${YELLOW}/home /docker 아래 파일의 백업이 발견되지 않았습니다.${NC}" + fi + + } @@ -7120,28 +7136,28 @@ docker_ssh_migration() { # 메인 메뉴 # ---------------------------- main_menu() { - - check_root - ensure_docker - ensure_jq while true; do clear - echo -e "\n${BLUE}-----------------------------------------${NC}" - echo -e "도커 백업/마이그레이션/복원 도구 v1.4" - echo -e "${BLUE}-----------------------------------------${NC}" + echo "------------------------" + echo -e "도커 백업/마이그레이션/복원 도구" + echo "------------------------" list_backups - echo -e "\ n1. 백업 도커 프로젝트" + echo -e "" + echo "------------------------" + echo -e "1. Docker 프로젝트를 백업하십시오" echo -e "2. Docker 프로젝트를 마이그레이션합니다" echo -e "3. Docker 프로젝트를 복원하십시오" echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" - echo -e "0. 메인 메뉴 / 종료로 돌아갑니다" + echo "------------------------" + echo -e "0. 이전 메뉴로 돌아갑니다" + echo "------------------------" read -p "선택하십시오 :" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; - 0) exit 0 ;; + 0) return ;; *) echo -e "${RED}잘못된 옵션${NC}" ;; esac done @@ -7179,7 +7195,7 @@ linux_docker() { 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}19. ${gl_bai}백업/복원/Docker 환경을 마이그레이션합니다" + echo -e "${gl_kjlan}19. ${gl_bai}백업/마이그레이션/복원 Docker 환경" echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경을 제거하십시오" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 46bf61d4d..ece6e3e4e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -6861,17 +6861,6 @@ docker_ssh_migration() { BACKUP_ROOT="/tmp" DATE_STR=$(date +%Y%m%d_%H%M%S) - check_root() { - [[ "$EUID" -ne 0 ]] && { echo -e "${RED}請使用 root 權限運行腳本!${NC}"; exit 1; } - } - - ensure_docker() { - command -v docker &>/dev/null || { echo -e "${RED}Docker 未安裝!${NC}"; exit 1; } - } - - ensure_jq() { - command -v jq &>/dev/null || { echo -e "${RED}jq 未安裝!${NC}"; exit 1; } - } is_compose_container() { local container=$1 @@ -6891,6 +6880,10 @@ docker_ssh_migration() { backup_docker() { echo -e "${YELLOW}正在備份 Docker 容器...${NC}" read -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers + + install tar jq gzip + install_docker + local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -6973,9 +6966,19 @@ docker_ssh_migration() { fi done + + # 備份 /home/docker 下的所有文件(不含子目錄) + if [ -d "/home/docker" ]; then + echo -e "${BLUE}備份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + echo -e "${GREEN}/home/docker 下的文件已打包到:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + fi + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}備份完成:${BACKUP_DIR}${NC}" echo -e "${GREEN}可用還原腳本:${RESTORE_SCRIPT}${NC}" + + } # ---------------------------- @@ -6988,6 +6991,7 @@ docker_ssh_migration() { echo -e "${BLUE}開始執行還原操作...${NC}" + install tar jq gzip install_docker # --------- 優先還原 Compose 項目 --------- @@ -7013,7 +7017,7 @@ docker_ssh_migration() { tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" echo -e "${GREEN}Compose 項目 [$project_name] 已解壓到:$original_path${NC}" - cd "$original_path" || exit 1 + cd "$original_path" || return docker compose down || true docker compose up -d echo -e "${GREEN}Compose 項目 [$project_name] 還原完成!${NC}" @@ -7080,6 +7084,18 @@ docker_ssh_migration() { done [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的備份信息${NC}" + + # 還原 /home/docker 下的文件 + if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then + echo -e "${BLUE}正在還原 /home/docker 下的文件...${NC}" + mkdir -p /home/docker + tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / + echo -e "${GREEN}/home/docker 下的文件已還原完成${NC}" + else + echo -e "${YELLOW}未找到 /home/docker 下文件的備份,跳過...${NC}" + fi + + } @@ -7120,28 +7136,28 @@ docker_ssh_migration() { # 主菜單 # ---------------------------- main_menu() { - - check_root - ensure_docker - ensure_jq while true; do clear - echo -e "\n${BLUE}-----------------------------------------${NC}" - echo -e "Docker 備份 / 遷移 / 還原 工具 v1.4" - echo -e "${BLUE}-----------------------------------------${NC}" + echo "------------------------" + echo -e "Docker備份/遷移/還原工具" + echo "------------------------" list_backups - echo -e "\n1. 備份docker項目" + echo -e "" + echo "------------------------" + echo -e "1. 備份docker項目" echo -e "2. 遷移docker項目" echo -e "3. 還原docker項目" echo -e "4. 刪除docker項目的備份文件" - echo -e "0. 返回主菜單 / 退出" + echo "------------------------" + echo -e "0. 返回上一級菜單" + echo "------------------------" read -p "請選擇:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; - 0) exit 0 ;; + 0) return ;; *) echo -e "${RED}無效選項${NC}" ;; esac done @@ -7179,7 +7195,7 @@ linux_docker() { 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}19. ${gl_bai}備份/還原/遷移Docker環境" + echo -e "${gl_kjlan}19. ${gl_bai}備份/遷移/還原Docker環境" echo -e "${gl_kjlan}20. ${gl_bai}卸載Docker環境" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" From c6f2838b32a05ff13313a7b08988791b1d99bb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 17:19:19 +0800 Subject: [PATCH 104/553] Update kejilion.sh --- cn/kejilion.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2796c8638..f52159593 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6869,7 +6869,7 @@ docker_ssh_migration() { list_backups() { echo -e "${BLUE}当前备份列表:${NC}" - ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } @@ -6878,7 +6878,9 @@ docker_ssh_migration() { # 备份 # ---------------------------- backup_docker() { + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + docker ps --format '{{.Names}}' read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip @@ -6985,7 +6987,6 @@ docker_ssh_migration() { # 还原 # ---------------------------- restore_docker() { - list_backups read -p "请输入要还原的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } @@ -7103,8 +7104,7 @@ docker_ssh_migration() { # 迁移 # ---------------------------- migrate_docker() { - ensure_jq - list_backups + install jq read -p "请输入要迁移的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } From 3fa8c4873c91dd2693c5505ece3d14fc78fbc846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 17:19:55 +0800 Subject: [PATCH 105/553] Fix backup listing and improve Docker commands --- kejilion.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 196fcbb8c..ce66c8c40 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6869,7 +6869,7 @@ docker_ssh_migration() { list_backups() { echo -e "${BLUE}当前备份列表:${NC}" - ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } @@ -6878,7 +6878,9 @@ docker_ssh_migration() { # 备份 # ---------------------------- backup_docker() { + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + docker ps --format '{{.Names}}' read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip @@ -6985,7 +6987,6 @@ docker_ssh_migration() { # 还原 # ---------------------------- restore_docker() { - list_backups read -p "请输入要还原的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } @@ -7103,8 +7104,7 @@ docker_ssh_migration() { # 迁移 # ---------------------------- migrate_docker() { - ensure_jq - list_backups + install jq read -p "请输入要迁移的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } From 4d4ab6b62ed36abb367fee91b201f0d2fd7f39b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 17:26:30 +0800 Subject: [PATCH 106/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f52159593..614148815 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -7125,7 +7125,6 @@ docker_ssh_migration() { # 删除备份 # ---------------------------- delete_backup() { - list_backups read -p "请输入要删除的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" @@ -7160,6 +7159,7 @@ docker_ssh_migration() { 0) return ;; *) echo -e "${RED}无效选项${NC}" ;; esac + break_end done } From 689b41fa0d8ad029ed1e722066b7ebea7d99b2a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 17:27:10 +0800 Subject: [PATCH 107/553] Remove list_backups call from delete_backup Removed the call to list_backups in delete_backup function. --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index ce66c8c40..ed85aa4cf 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -7125,7 +7125,6 @@ docker_ssh_migration() { # 删除备份 # ---------------------------- delete_backup() { - list_backups read -p "请输入要删除的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" @@ -7160,6 +7159,7 @@ docker_ssh_migration() { 0) return ;; *) echo -e "${RED}无效选项${NC}" ;; esac + break_end done } From bbfb7ce9c44a271bc7e761875a5f91be3a477c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 17:37:33 +0800 Subject: [PATCH 108/553] Fix tar command to use -T instead of --files-from --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index ed85aa4cf..945d42223 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6972,10 +6972,10 @@ docker_ssh_migration() { # 备份 /home/docker 下的所有文件(不含子目录) if [ -d "/home/docker" ]; then echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" - find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi - + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" From 44a86ad82d9892683242d50a4350535af92b32bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 24 Aug 2025 17:38:04 +0800 Subject: [PATCH 109/553] Fix tar command to use -T option for file list --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 614148815..daab6b3b7 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6972,10 +6972,10 @@ docker_ssh_migration() { # 备份 /home/docker 下的所有文件(不含子目录) if [ -d "/home/docker" ]; then echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" - find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - + find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi - + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" From 565ec3f2417fb42b9cc43119033d8822bd9d5504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 25 Aug 2025 10:23:07 +0800 Subject: [PATCH 110/553] Update kejilion.sh --- cn/kejilion.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index daab6b3b7..1717e479a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6878,6 +6878,7 @@ docker_ssh_migration() { # 备份 # ---------------------------- backup_docker() { + send_stats "Docker备份" echo -e "${YELLOW}正在备份 Docker 容器...${NC}" docker ps --format '{{.Names}}' @@ -6975,7 +6976,7 @@ docker_ssh_migration() { find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi - + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" @@ -6987,6 +6988,8 @@ docker_ssh_migration() { # 还原 # ---------------------------- restore_docker() { + + send_stats "Docker还原" read -p "请输入要还原的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } @@ -7104,6 +7107,7 @@ docker_ssh_migration() { # 迁移 # ---------------------------- migrate_docker() { + send_stats "Docker迁移" install jq read -p "请输入要迁移的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } @@ -7125,6 +7129,7 @@ docker_ssh_migration() { # 删除备份 # ---------------------------- delete_backup() { + send_stats "Docker备份文件删除" read -p "请输入要删除的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" @@ -7135,6 +7140,7 @@ docker_ssh_migration() { # 主菜单 # ---------------------------- main_menu() { + send_stats "Docker备份迁移还原" while true; do clear echo "------------------------" From 64c48165c89084184e9f175d429a5bf7e68e43fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 25 Aug 2025 10:23:38 +0800 Subject: [PATCH 111/553] Add send_stats calls for Docker operations --- kejilion.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 945d42223..672fa0e1b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6878,6 +6878,7 @@ docker_ssh_migration() { # 备份 # ---------------------------- backup_docker() { + send_stats "Docker备份" echo -e "${YELLOW}正在备份 Docker 容器...${NC}" docker ps --format '{{.Names}}' @@ -6975,7 +6976,7 @@ docker_ssh_migration() { find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi - + chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" @@ -6987,6 +6988,8 @@ docker_ssh_migration() { # 还原 # ---------------------------- restore_docker() { + + send_stats "Docker还原" read -p "请输入要还原的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } @@ -7104,6 +7107,7 @@ docker_ssh_migration() { # 迁移 # ---------------------------- migrate_docker() { + send_stats "Docker迁移" install jq read -p "请输入要迁移的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } @@ -7125,6 +7129,7 @@ docker_ssh_migration() { # 删除备份 # ---------------------------- delete_backup() { + send_stats "Docker备份文件删除" read -p "请输入要删除的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" @@ -7135,6 +7140,7 @@ docker_ssh_migration() { # 主菜单 # ---------------------------- main_menu() { + send_stats "Docker备份迁移还原" while true; do clear echo "------------------------" From 27da8bb5e46119d9f805cd56362f6d33b527718a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 25 Aug 2025 12:03:39 +0800 Subject: [PATCH 112/553] Update kejilion.sh --- cn/kejilion.sh | 112 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 1717e479a..a39befbd3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.0" +sh_v="4.1.1" gl_hui='\e[37m' @@ -8872,6 +8872,8 @@ while true; do echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11667,6 +11669,114 @@ while true; do ;; + 93|dufs) + + local app_id="93" + local docker_name="dufs" + local docker_img="sigoden/dufs" + local docker_port=8093 + + docker_rum() { + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}:/data \ + -p ${docker_port}:5000 \ + ${docker_img} /data -A + + } + + local docker_describe="Dufs 极简静态文件服务器,支持上传下载" + local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 94|gopeed) + + local app_id="94" + local docker_name="gopeed" + local docker_img="liwei2633/gopeed" + local docker_port=8094 + + docker_rum() { + + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}/downloads:/app/Downloads \ + -v /home/docker/${docker_name}/storage:/app/storage \ + -p ${docker_port}:9999 \ + ${docker_img} -u ${app_use} -p ${app_passwd} + + } + + local docker_describe="Gopeed 分布式高速下载工具,支持多种协议" + local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 95|paperless) + + local app_id="95" + + local app_name="paperless文档管理平台" + local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" + local app_url="视频介绍: https://docs.paperless-ngx.com/" + local docker_name="paperless-webserver-1" + local docker_port="8095" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/paperless + mkdir -p /home/docker/paperless/export + mkdir -p /home/docker/paperless/consume + cd /home/docker/paperless + + curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml + curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml + cd /home/docker/paperless + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/paperless/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/paperless/ && docker compose down --rmi all + rm -rf /home/docker/paperless + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + b) clear From 961eb960104423e6054435340e9fb29f2af469e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 25 Aug 2025 12:04:16 +0800 Subject: [PATCH 113/553] Update version and add new applications to script --- kejilion.sh | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 672fa0e1b..30e374169 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.0" +sh_v="4.1.1" gl_hui='\e[37m' @@ -8872,6 +8872,8 @@ while true; do echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11667,6 +11669,114 @@ while true; do ;; + 93|dufs) + + local app_id="93" + local docker_name="dufs" + local docker_img="sigoden/dufs" + local docker_port=8093 + + docker_rum() { + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}:/data \ + -p ${docker_port}:5000 \ + ${docker_img} /data -A + + } + + local docker_describe="Dufs 极简静态文件服务器,支持上传下载" + local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 94|gopeed) + + local app_id="94" + local docker_name="gopeed" + local docker_img="liwei2633/gopeed" + local docker_port=8094 + + docker_rum() { + + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}/downloads:/app/Downloads \ + -v /home/docker/${docker_name}/storage:/app/storage \ + -p ${docker_port}:9999 \ + ${docker_img} -u ${app_use} -p ${app_passwd} + + } + + local docker_describe="Gopeed 分布式高速下载工具,支持多种协议" + local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 95|paperless) + + local app_id="95" + + local app_name="paperless文档管理平台" + local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" + local app_url="视频介绍: https://docs.paperless-ngx.com/" + local docker_name="paperless-webserver-1" + local docker_port="8095" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/paperless + mkdir -p /home/docker/paperless/export + mkdir -p /home/docker/paperless/consume + cd /home/docker/paperless + + curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml + curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml + cd /home/docker/paperless + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/paperless/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/paperless/ && docker compose down --rmi all + rm -rf /home/docker/paperless + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + b) clear From 10ae667b075dadd905989d45e4ad4a66f26bc18c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 25 Aug 2025 12:06:51 +0800 Subject: [PATCH 114/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 8cce2f0e0..0def2dff2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1283,4 +1283,10 @@ LDNMP建站flarum论坛安装时增加插件市场的安装,后期可以在后 docker管理增加全局备份还原迁移功能。 修复部分应用的部署不成功问题, ------------------------ +2025-08-25 v4.1.1 +应用市场新增Dufs极简静态文件服务器的安装及使用。 +应用市场新增gopeed分布式高速下载工具的安装及使用。 +应用市场新增paperless文档管理平台的安装及使用。 + +------------------------ From 3e894c9a8fe8196c5aa69f949d90c0e4b4b90dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 25 Aug 2025 12:07:28 +0800 Subject: [PATCH 115/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 0def2dff2..e700d4f8f 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1287,6 +1287,4 @@ docker管理增加全局备份还原迁移功能。 应用市场新增Dufs极简静态文件服务器的安装及使用。 应用市场新增gopeed分布式高速下载工具的安装及使用。 应用市场新增paperless文档管理平台的安装及使用。 - ------------------------ - From 40becc2cb287c9525f2986c021e0492e230552e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 26 Aug 2025 17:59:45 +0800 Subject: [PATCH 116/553] Update kejilion.sh --- cn/kejilion.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index a39befbd3..04423c9e9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8874,6 +8874,7 @@ while true; do echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -8998,6 +8999,9 @@ while true; do docker_rum() { + mkdir -p /home/docker/openlist + chmod -R 777 /home/docker/openlist + docker run -d \ --restart=always \ -v /home/docker/openlist:/opt/openlist/data \ @@ -10977,9 +10981,9 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear @@ -11687,7 +11691,7 @@ while true; do } - local docker_describe="Dufs 极简静态文件服务器,支持上传下载" + local docker_describe="极简静态文件服务器,支持上传下载" local docker_url="官网介绍: https://github.com/sigoden/dufs" local docker_use="" local docker_passwd="" @@ -11718,7 +11722,7 @@ while true; do } - local docker_describe="Gopeed 分布式高速下载工具,支持多种协议" + local docker_describe="分布式高速下载工具,支持多种协议" local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" local docker_use="" local docker_passwd="" @@ -11776,6 +11780,77 @@ while true; do ;; + 97|wgs|wireguard) + + local app_id="97" + local docker_name="wireguard" + local docker_img="lscr.io/linuxserver/wireguard:latest" + local docker_port=51820 + + docker_rum() { + + read -p "请输入组网的客户端数量 (默认 5): " COUNT + COUNT=${COUNT:-5} + + PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + + ip_address + docker run -d \ + --name=wireguard \ + --network host \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e SERVERURL=${ipv4_address} \ + -e SERVERPORT=${docker_port} \ + -e PEERS=${PEERS} \ + -e INTERNAL_SUBNET=10.13.13.0 \ + -e ALLOWEDIPS=10.13.13.0/24 \ + -e PERSISTENTKEEPALIVE_PEERS=all \ + -e SERVER_ALLOWEDIPS_PEER_myPhone="192.168.1.0/24,192.168.2.0/24,192.168.100.0/24" \ + -e LOG_CONFS=true \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules \ + --restart unless-stopped \ + lscr.io/linuxserver/wireguard:latest + + + sleep 5 + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + for f in "$d"/*.conf; do + grep -q "^PersistentKeepalive *= *25$" "$f" || \ + sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + done + done + ' + + docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + sleep 3 + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + sleep 3 + echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" + echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) From 34193e4f6b34a10dfff5d654b1893fbf64fb00a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 26 Aug 2025 18:00:52 +0800 Subject: [PATCH 117/553] Add WireGuard setup and configuration options --- kejilion.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 30e374169..7a111b4f1 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8874,6 +8874,7 @@ while true; do echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -8998,6 +8999,9 @@ while true; do docker_rum() { + mkdir -p /home/docker/openlist + chmod -R 777 /home/docker/openlist + docker run -d \ --restart=always \ -v /home/docker/openlist:/opt/openlist/data \ @@ -10977,9 +10981,9 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear @@ -11687,7 +11691,7 @@ while true; do } - local docker_describe="Dufs 极简静态文件服务器,支持上传下载" + local docker_describe="极简静态文件服务器,支持上传下载" local docker_url="官网介绍: https://github.com/sigoden/dufs" local docker_use="" local docker_passwd="" @@ -11718,7 +11722,7 @@ while true; do } - local docker_describe="Gopeed 分布式高速下载工具,支持多种协议" + local docker_describe="分布式高速下载工具,支持多种协议" local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" local docker_use="" local docker_passwd="" @@ -11776,6 +11780,77 @@ while true; do ;; + 97|wgs|wireguard) + + local app_id="97" + local docker_name="wireguard" + local docker_img="lscr.io/linuxserver/wireguard:latest" + local docker_port=51820 + + docker_rum() { + + read -p "请输入组网的客户端数量 (默认 5): " COUNT + COUNT=${COUNT:-5} + + PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + + ip_address + docker run -d \ + --name=wireguard \ + --network host \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e SERVERURL=${ipv4_address} \ + -e SERVERPORT=${docker_port} \ + -e PEERS=${PEERS} \ + -e INTERNAL_SUBNET=10.13.13.0 \ + -e ALLOWEDIPS=10.13.13.0/24 \ + -e PERSISTENTKEEPALIVE_PEERS=all \ + -e SERVER_ALLOWEDIPS_PEER_myPhone="192.168.1.0/24,192.168.2.0/24,192.168.100.0/24" \ + -e LOG_CONFS=true \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules \ + --restart unless-stopped \ + lscr.io/linuxserver/wireguard:latest + + + sleep 5 + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + for f in "$d"/*.conf; do + grep -q "^PersistentKeepalive *= *25$" "$f" || \ + sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + done + done + ' + + docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + sleep 3 + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + sleep 3 + echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" + echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) From 533eaef84ef653e2acae644cb9573fc90ffb2b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 26 Aug 2025 20:59:23 +0800 Subject: [PATCH 118/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 04423c9e9..916ca615f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10981,8 +10981,8 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d From 5c984f5fbea761410174b1c9bf070e24893d2ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 26 Aug 2025 20:59:54 +0800 Subject: [PATCH 119/553] Reorder sed command for admin replacement --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 7a111b4f1..cf59cec96 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10981,8 +10981,8 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d From a29b5fd861eb7e8538ddd65aafaa50ae1e3b918d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:18:49 +0800 Subject: [PATCH 120/553] Update kejilion.sh --- cn/kejilion.sh | 73 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 916ca615f..b756fd8a8 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.1" +sh_v="4.1.2" gl_hui='\e[37m' @@ -11780,7 +11780,7 @@ while true; do ;; - 97|wgs|wireguard) + 97|wgs) local app_id="97" local docker_name="wireguard" @@ -11817,7 +11817,7 @@ while true; do lscr.io/linuxserver/wireguard:latest - sleep 5 + sleep 3 docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' docker exec wireguard sh -c ' for d in /config/peer_*; do @@ -11851,6 +11851,73 @@ while true; do ;; + 98|wgc) + + local app_id="98" + local docker_name="wireguardc" + local docker_img="kjlion/wireguard:alpine" + local docker_port=51820 + + docker_rum() { + + mkdir -p /home/docker/wireguard/config/ + + local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CONFIG_FILE")" + + echo "请粘贴你的客户端配置,连续按两次回车保存:" + + # 初始化变量 + input="" + empty_line_count=0 + + # 逐行读取用户输入 + while IFS= read -r line; do + if [[ -z "$line" ]]; then + ((empty_line_count++)) + if [[ $empty_line_count -ge 2 ]]; then + break + fi + else + empty_line_count=0 + input+="$line"$'\n' + fi + done + + # 写入配置文件 + echo "$input" > "$CONFIG_FILE" + + echo "客户端配置已保存到 $CONFIG_FILE" + + docker run -d \ + --name wireguardc \ + --network host \ + --cap-add NET_ADMIN \ + --cap-add SYS_MODULE \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules:ro \ + --restart always \ + kjlion/wireguard:alpine + + sleep 3 + + docker logs wireguardc + + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + b) From 578279d323c6d6bf60ed01afda8a4f715e68a51a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:19:28 +0800 Subject: [PATCH 121/553] Update wireguard version and add wireguardc support --- kejilion.sh | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index cf59cec96..35261dd18 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.1" +sh_v="4.1.2" gl_hui='\e[37m' @@ -11780,7 +11780,7 @@ while true; do ;; - 97|wgs|wireguard) + 97|wgs) local app_id="97" local docker_name="wireguard" @@ -11817,7 +11817,7 @@ while true; do lscr.io/linuxserver/wireguard:latest - sleep 5 + sleep 3 docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' docker exec wireguard sh -c ' for d in /config/peer_*; do @@ -11851,6 +11851,73 @@ while true; do ;; + 98|wgc) + + local app_id="98" + local docker_name="wireguardc" + local docker_img="kjlion/wireguard:alpine" + local docker_port=51820 + + docker_rum() { + + mkdir -p /home/docker/wireguard/config/ + + local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CONFIG_FILE")" + + echo "请粘贴你的客户端配置,连续按两次回车保存:" + + # 初始化变量 + input="" + empty_line_count=0 + + # 逐行读取用户输入 + while IFS= read -r line; do + if [[ -z "$line" ]]; then + ((empty_line_count++)) + if [[ $empty_line_count -ge 2 ]]; then + break + fi + else + empty_line_count=0 + input+="$line"$'\n' + fi + done + + # 写入配置文件 + echo "$input" > "$CONFIG_FILE" + + echo "客户端配置已保存到 $CONFIG_FILE" + + docker run -d \ + --name wireguardc \ + --network host \ + --cap-add NET_ADMIN \ + --cap-add SYS_MODULE \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules:ro \ + --restart always \ + kjlion/wireguard:alpine + + sleep 3 + + docker logs wireguardc + + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + b) From 2cb43e2209bdd125b69f26543f81741fef507d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:22:11 +0800 Subject: [PATCH 122/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e700d4f8f..4b6de42ef 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1288,3 +1288,6 @@ docker管理增加全局备份还原迁移功能。 应用市场新增gopeed分布式高速下载工具的安装及使用。 应用市场新增paperless文档管理平台的安装及使用。 ------------------------ +2025-08-27 v4.1.2 +应用市场新增WireGuard异地隧道组网工具的安装及使用。 +------------------------ From 42927bdf4dd45d6053d99c85d961aea04aa9cd35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:14:48 +0800 Subject: [PATCH 123/553] Update kejilion.sh --- cn/kejilion.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b756fd8a8..1acdb1219 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11828,10 +11828,21 @@ while true; do done ' + docker exec -it wireguard bash -c ' + for d in /config/peer_*; do + cd "$d" || continue + conf_file=$(ls *.conf) + base_name="${conf_file%.conf}" + echo "生成二维码: $base_name.png" + qrencode -o "$base_name.png" < "$conf_file" + done + ' + + sleep 2 docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' - sleep 3 + sleep 2 docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' - sleep 3 + sleep 2 echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" From efcb06f7212e48fcd9a09b3d62c7c5c37f1e868d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:15:15 +0800 Subject: [PATCH 124/553] Update kejilion.sh --- kejilion.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 35261dd18..af6611e1d 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11828,10 +11828,21 @@ while true; do done ' + docker exec -it wireguard bash -c ' + for d in /config/peer_*; do + cd "$d" || continue + conf_file=$(ls *.conf) + base_name="${conf_file%.conf}" + echo "生成二维码: $base_name.png" + qrencode -o "$base_name.png" < "$conf_file" + done + ' + + sleep 2 docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' - sleep 3 + sleep 2 docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' - sleep 3 + sleep 2 echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" From b4bd58927e11267eee805e62de55ae73abbeab21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:56:11 +0800 Subject: [PATCH 125/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 1acdb1219..2edf92098 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8874,7 +8874,7 @@ while true; do echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" - echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" From 1cef7452110783d854876f786b9f6b121b9a4966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:57:13 +0800 Subject: [PATCH 126/553] Remove SERVER_ALLOWEDIPS_PEER_myPhone variable --- cn/kejilion.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2edf92098..d4ec53511 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11809,7 +11809,6 @@ while true; do -e INTERNAL_SUBNET=10.13.13.0 \ -e ALLOWEDIPS=10.13.13.0/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ - -e SERVER_ALLOWEDIPS_PEER_myPhone="192.168.1.0/24,192.168.2.0/24,192.168.100.0/24" \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ @@ -14285,4 +14284,3 @@ else ;; esac fi - From cc2b0ba25254d525413cb89f4ec2a7b5d227ea8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 14:57:59 +0800 Subject: [PATCH 127/553] Fix formatting and cleanup in kejilion.sh --- kejilion.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index af6611e1d..f77a9c71b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8874,7 +8874,7 @@ while true; do echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" - echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11809,7 +11809,6 @@ while true; do -e INTERNAL_SUBNET=10.13.13.0 \ -e ALLOWEDIPS=10.13.13.0/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ - -e SERVER_ALLOWEDIPS_PEER_myPhone="192.168.1.0/24,192.168.2.0/24,192.168.100.0/24" \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ @@ -14285,4 +14284,3 @@ else ;; esac fi - From 253672ae1a8172876ae54f9d0a773700e87b1266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:01:55 +0800 Subject: [PATCH 128/553] Update kejilion.sh --- cn/kejilion.sh | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index d4ec53511..6a3ca736e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -349,22 +349,21 @@ kejilion() { -check_port() { +stop_containers_or_kill_process() { + local port=$1 + local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) install lsof + 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() { - 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 - } +check_port() { stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } @@ -11794,6 +11793,8 @@ while true; do PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + stop_containers_or_kill_process 51820 &>/dev/null + ip_address docker run -d \ --name=wireguard \ From 9602d5bcc73f0dd7740c2b53c1d4f98ea34b62de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:03:00 +0800 Subject: [PATCH 129/553] Refactor port handling functions in kejilion.sh --- kejilion.sh | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index f77a9c71b..663577f40 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -349,22 +349,21 @@ kejilion() { -check_port() { +stop_containers_or_kill_process() { + local port=$1 + local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) install lsof + 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() { - 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 - } +check_port() { stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } @@ -11794,6 +11793,8 @@ while true; do PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + stop_containers_or_kill_process 51820 &>/dev/null + ip_address docker run -d \ --name=wireguard \ From f51a8826775b6280728f513d29bf080eaff0ad0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:10:49 +0800 Subject: [PATCH 130/553] Change SERVERPORT to a fixed value of 51820 --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6a3ca736e..bf1361ecf 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11805,7 +11805,7 @@ while true; do -e PGID=1000 \ -e TZ=Etc/UTC \ -e SERVERURL=${ipv4_address} \ - -e SERVERPORT=${docker_port} \ + -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ -e INTERNAL_SUBNET=10.13.13.0 \ -e ALLOWEDIPS=10.13.13.0/24 \ From c3a784790ca2baf95d47936a6bd1959a43346673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:11:26 +0800 Subject: [PATCH 131/553] Change SERVERPORT environment variable to 51820 --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 663577f40..f70cab559 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11805,7 +11805,7 @@ while true; do -e PGID=1000 \ -e TZ=Etc/UTC \ -e SERVERURL=${ipv4_address} \ - -e SERVERPORT=${docker_port} \ + -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ -e INTERNAL_SUBNET=10.13.13.0 \ -e ALLOWEDIPS=10.13.13.0/24 \ From fc5a789c1cfbef5201b5d1abed45401dd62362af Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 27 Aug 2025 10:38:13 +0000 Subject: [PATCH 132/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-27=2010:38:13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 4986 +++++++++++++++++++++++++----------------------- jp/kejilion.sh | 4974 ++++++++++++++++++++++++----------------------- kr/kejilion.sh | 4986 +++++++++++++++++++++++++----------------------- tw/kejilion.sh | 4762 +++++++++++++++++++++++---------------------- 4 files changed, 10390 insertions(+), 9318 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 1c21c147f..cab3eb64a 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.0" +sh_v="4.1.2" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# Define a function to execute commands +# 定义一个函数来执行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# Functions that collect function buried point information, record the current script version number, usage time, system version, CPU architecture, the country of the machine and the function name used by the user. They absolutely do not involve any sensitive information, please rest assured! Please believe me! -# Why do we need to design this function? The purpose is to better understand the functions that users like to use, and further optimize the functions to launch more functions that meet user needs. -# For the full text, you can search for the send_stats function call location, transparent and open source, and you can refuse to use it if you have any concerns. +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# Prompt the user to agree to the terms +# 提示用户同意条款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Welcome to the Tech lion script toolbox${gl_bai}" - echo "For the first time using the script, please read and agree to the user license agreement." - echo "User License Agreement: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" + echo "首次使用脚本,请先阅读并同意用户许可协议。" + echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "Do you agree to the above terms? (y/n):" user_input + read -r -p "是否同意以上条款?(y/n): " user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "License consent" + 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 "Rejection of permission" + send_stats "许可拒绝" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "Package parameters are not provided!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}Installing$package...${gl_bai}" + echo -e "${gl_huang}正在安装 $package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "Unknown package manager!" + echo "未知的包管理器!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { available_space_mb=$(df -m / | awk 'NR==2 {print $4}') if [ $available_space_mb -lt $required_space_mb ]; then - echo -e "${gl_huang}hint:${gl_bai}Insufficient disk space!" - echo "Current available space: $((available_space_mb/1024))G" - echo "Minimum demand space:${required_gb}G" - echo "The installation cannot be continued. Please clean the disk space and try again." - send_stats "Insufficient disk space" + echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" + echo "当前可用空间: $((available_space_mb/1024))G" + echo "最小需求空间: ${required_gb}G" + echo "无法继续安装,请清理磁盘空间后重试。" + send_stats "磁盘空间不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "Package parameters are not provided!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}Uninstalling$package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "Unknown package manager!" + echo "未知的包管理器!" return 1 fi done } -# Universal systemctl function, suitable for various distributions +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# Restart the service +# 重启服务 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1The service has been restarted." + echo "$1 服务已重启。" else - echo "Error: Restart$1Service failed." + echo "错误:重启 $1 服务失败。" fi } -# Start the service +# 启动服务 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1The service has been started." + echo "$1 服务已启动。" else - echo "Error: Start$1Service failed." + echo "错误:启动 $1 服务失败。" fi } -# Stop service +# 停止服务 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1Service has been stopped." + echo "$1 服务已停止。" else - echo "Error: Stop$1Service failed." + echo "错误:停止 $1 服务失败。" fi } -# Check service status +# 查看服务状态 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1The service status is displayed." + echo "$1 服务状态已显示。" else - echo "Error: Unable to display$1Service status." + echo "错误:无法显示 $1 服务状态。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAMESet to power on." + echo "$SERVICE_NAME 已设置为开机自启。" } break_end() { - echo -e "${gl_lv}Operation completed${gl_bai}" - echo "Press any key to continue..." + echo -e "${gl_lv}操作完成${gl_bai}" + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -349,22 +349,21 @@ kejilion() { -check_port() { +stop_containers_or_kill_process() { + local port=$1 + local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) install lsof + 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() { - 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 - } +check_port() { stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } @@ -425,7 +424,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Installing docker environment...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -500,63 +499,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker container management" - echo "Docker container list" + send_stats "Docker容器管理" + echo "Docker容器列表" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "Container operation" + echo "容器操作" echo "------------------------" - echo "1. Create a new container" + echo "1. 创建新的容器" echo "------------------------" - echo "2. Start the specified container 6. Start all containers" - echo "3. Stop the specified container 7. Stop all containers" - echo "4. Delete the specified container 8. Delete all containers" - echo "5. Restart the specified container 9. Restart all containers" + echo "2. 启动指定容器 6. 启动所有容器" + echo "3. 停止指定容器 7. 停止所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11. Enter the specified container 12. View the container log" - echo "13. View container network 14. View container occupancy" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15. Turn on container port access 16. Turn off container port access" + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Create a new container" - read -e -p "Please enter the creation command:" dockername + send_stats "新建容器" + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "Start the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) - send_stats "Stop the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + send_stats "停止指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "Delete the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "Restart the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + send_stats "重启指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker restart $dockername ;; 6) - send_stats "Start all containers" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) - send_stats "Stop all containers" + send_stats "停止所有容器" docker stop $(docker ps -q) ;; 8) - send_stats "Delete all containers" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +564,28 @@ while true; do [Nn]) ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "Restart all containers" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "Enter the container" - read -e -p "Please enter the container name:" dockername + send_stats "进入容器" + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "View container log" - read -e -p "Please enter the container name:" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "View container network" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +603,14 @@ while true; do break_end ;; 14) - send_stats "View container occupancy" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "Allow container port access" - read -e -p "Please enter the container name:" docker_name + send_stats "允许容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +619,8 @@ while true; do ;; 16) - send_stats "Block container port access" - read -e -p "Please enter the container name:" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +639,44 @@ done docker_image() { while true; do clear - send_stats "Docker image management" - echo "Docker image list" + send_stats "Docker镜像管理" + echo "Docker镜像列表" docker image ls echo "" - echo "Mirror operation" + echo "镜像操作" echo "------------------------" - echo "1. Get the specified image 3. Delete the specified image" - echo "2. Update the specified image 4. Delete all images" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Pull the mirror" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}Getting the image:$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "Update the image" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}Updated image:$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "Delete the mirror" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "Delete all images" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +685,7 @@ while true; do [Nn]) ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +753,16 @@ install_crontab() { service cron start ;; *) - echo "Unsupported distributions:$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "The operating system cannot be determined." + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}crontab is installed and the cron service is running.${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +774,27 @@ docker_ipv6_on() { local CONFIG_FILE="/etc/docker/daemon.json" local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}' - # Check if the configuration file exists, create the file and write the default settings if it does not exist + # 检查配置文件是否存在,如果不存在则创建文件并写入默认设置 if [ ! -f "$CONFIG_FILE" ]; then echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE" restart docker else - # Use jq to handle updates of configuration files + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # Check whether the current configuration already has ipv6 settings + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # Update configuration and enable IPv6 + # 更新配置,开启 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 - # Comparing original configuration with new configuration + # 对比原始配置与新配置 if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then - echo -e "${gl_huang}IPv6 access is currently enabled${gl_bai}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +809,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # Check if the configuration file exists + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}The configuration file does not exist${gl_bai}" + echo -e "${gl_hong}配置文件不存在${gl_bai}" return fi - # Read the current configuration + # 读取当前配置 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # Use jq to handle updates of configuration files + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # Check the current ipv6 status + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # Comparing original configuration with new configuration + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6 access is currently closed${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6 access has been successfully closed${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,117 +869,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "Please provide at least one port number" + echo "请提供至少一个端口号" return 1 fi install iptables for port in "${ports[@]}"; do - # Delete existing closing rules + # 删除已存在的关闭规则 iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null - # Add Open Rules + # 添加打开规则 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 "The port has been opened$port" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "The port has been opened" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "Please provide at least one port number" + echo "请提供至少一个端口号" return 1 fi install iptables for port in "${ports[@]}"; do - # Delete existing open rules + # 删除已存在的打开规则 iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add a close rule + # 添加关闭规则 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 closed$port" + echo "已关闭端口 $port" fi done - # Delete existing rules (if any) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # Insert new rules to first + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "Port closed" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "Please provide at least one IP address or IP segment" + echo "请提供至少一个IP地址或IP段" return 1 fi install iptables for ip in "${ips[@]}"; do - # Delete existing blocking rules + # 删除已存在的阻止规则 iptables -D INPUT -s $ip -j DROP 2>/dev/null - # Add allow rules + # 添加允许规则 if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "Released IP$ip" + echo "已放行IP $ip" fi done save_iptables_rules - send_stats "Released IP" + send_stats "已放行IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "Please provide at least one IP address or IP segment" + echo "请提供至少一个IP地址或IP段" return 1 fi install iptables for ip in "${ips[@]}"; do - # Delete existing allow rules + # 删除已存在的允许规则 iptables -D INPUT -s $ip -j ACCEPT 2>/dev/null - # Add blocking rules + # 添加阻止规则 if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then iptables -I INPUT 1 -s $ip -j DROP - echo "IP blocked$ip" + echo "已阻止IP $ip" fi done save_iptables_rules - send_stats "IP blocked" + send_stats "已阻止IP" } @@ -990,7 +989,7 @@ block_ip() { enable_ddos_defense() { - # Turn on defense DDoS + # 开启防御 DDoS 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 @@ -1000,12 +999,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "Turn on DDoS defense" + send_stats "开启DDoS防御" } -# Turn off DDoS Defense +# 关闭DDoS防御 disable_ddos_defense() { - # Turn off defense DDoS + # 关闭防御 DDoS 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 @@ -1015,14 +1014,14 @@ disable_ddos_defense() { 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 "Turn off DDoS Defense" + send_stats "关闭DDoS防御" } -# Functions that manage national IP rules +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1032,73 @@ manage_country_rules() { case "$action" in block) - # Create if ipset does not exist + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # Download IP area file + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "Error: Download$country_codeIP zone file failed" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # Add IP to ipset + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # Block IP with iptables + # 使用 iptables 阻止 IP 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 "Blocked successfully$country_codeIP address" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # Create an ipset for allowed countries (if not exist) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # Download IP area file + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "Error: Download$country_codeIP zone file failed" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # Delete existing national rules + # 删除现有的国家规则 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" - # Add IP to ipset + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # Only IPs in designated countries are allowed + # 仅允许指定国家的 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 "Successfully only allowed$country_codeIP address" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # Delete the iptables rules for the country + # 删除国家的 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 - # Destroy ipset + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "Successfully lifted$country_codeIP address restrictions" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1115,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "Advanced Firewall Management" - send_stats "Advanced Firewall Management" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "Firewall Management" + echo "防火墙管理" echo "------------------------" - echo "1. Open the specified port 2. Close the specified port" - echo "3. Open all ports 4. Close all ports" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5. IP whitelist 6. IP blacklist" - echo "7. Clear the specified IP" + echo "5. IP白名单 6. IP黑名单" + echo "7. 清除指定IP" echo "------------------------" - echo "11. Allow PING 12. Disable PING" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13. Start DDOS Defense 14. Turn off DDOS Defense" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15. Block specified country IP 16. Only specified country IPs are allowed" - echo "17. Release IP restrictions in designated countries" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "Please enter the open port number:" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "Open a specified port" + send_stats "开放指定端口" ;; 2) - read -e -p "Please enter the closed port number:" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "Close the specified port" + send_stats "关闭指定端口" ;; 3) - # Open all ports + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1163,10 @@ iptables_panel() { 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 "Open all ports" + send_stats "开放所有端口" ;; 4) - # Close all ports + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1179,40 @@ iptables_panel() { 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 "Close all ports" + send_stats "关闭所有端口" ;; 5) - # IP whitelist - read -e -p "Please enter the IP or IP segment to release:" o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IP blacklist - read -e -p "Please enter the blocked IP or IP segment:" c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) - # Clear the specified IP - read -e -p "Please enter the cleared IP:" d_ip + # 清除指定 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 "Clear the specified IP" + send_stats "清除指定IP" ;; 11) - # Allow PING + # 允许 PING 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 "Allow PING" + send_stats "允许PING" ;; 12) - # Disable PING + # 禁用 PING 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 "Disable PING" + send_stats "禁用PING" ;; 13) enable_ddos_defense @@ -1223,20 +1222,20 @@ iptables_panel() { ;; 15) - read -e -p "Please enter the blocked country code (such as CN, US, JP):" country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "Allowed countries$country_codeIP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "Please enter the allowed country code (such as CN, US, JP):" country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "Block the country$country_codeIP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "Please enter the cleared country code (such as CN, US, JP):" country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "Clear the country$country_codeIP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1256,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # Get all swap partitions in the current system + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # Iterate over and delete all swap partitions + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # Make sure /swapfile is no longer used + # 确保 /swapfile 不再被使用 swapoff /swapfile - # Delete the old /swapfile + # 删除旧的 /swapfile rm -f /swapfile - # Create a new swap partition + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1287,7 @@ add_swap() { rc-update add local fi - echo -e "The virtual memory size has been resized to${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1297,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# Determine whether virtual memory needs to be created +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1313,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # Get nginx version + # 获取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}" - # Get the mysql version + # 获取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}" - # Get the php version + # 获取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}" - # Get the redis version + # 获取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}" @@ -1341,7 +1340,7 @@ ldnmp_v() { install_ldnmp_conf() { - # Create necessary directories and files + # 创建必要的目录和文件 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 @@ -1350,11 +1349,11 @@ install_ldnmp_conf() { default_server_ssl - # Download the docker-compose.yml file and replace it + # 下载 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) - # Replace in docker-compose.yml file + # 在 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 @@ -1399,7 +1398,7 @@ install_ldnmp() { clear - echo "LDNMP environment has been installed" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1415,7 @@ install_certbot() { 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 "Renewal task has been updated" + echo "续签任务已更新" } @@ -1453,15 +1452,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yumingPublic key information${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yumingPrivate key information${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}Certificate storage path${gl_bai}" - echo "Public key: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "Private key: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1469,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}Quickly apply for an SSL certificate, automatically renew your signature before expiration${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1485,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}The expiration of the applied certificate${gl_bai}" - echo "Site information Certificate expiration time" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1525,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "Successful application for domain name certificate" + send_stats "域名证书申请成功" else - send_stats "Application for domain name certificate failed" - echo -e "${gl_hong}Notice:${gl_bai}The certificate application failed. Please check the following possible reasons and try again:" - echo -e "1. Domain name spelling error ➠ Please check whether the domain name is entered correctly" - echo -e "2. DNS resolution problem ➠ Confirm that the domain name has been correctly resolved to this server IP" - echo -e "3. Network configuration issues ➠ If you use Cloudflare Warp and other virtual networks, please temporarily shut down" - echo -e "4. Firewall restrictions ➠ Check whether port 80/443 is open to ensure verification is accessible" - echo -e "5. The number of applications exceeds the limit ➠ Let's Encrypt has a weekly limit (5 times/domain name/week)" - echo -e "6. Domestic registration restrictions ➠ Please confirm whether the domain name is registered in mainland China" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "Please try deploying again$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1549,7 +1548,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "Domain name reuse" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1557,8 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "Please enter your IP or the resolved domain name:" yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1623,8 +1622,8 @@ nginx_upgrade() { docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi docker restart $ldnmp_pods > /dev/null 2>&1 - send_stats "renew$ldnmp_pods" - echo "renew${ldnmp_pods}Finish" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" } @@ -1643,11 +1642,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "Login information:" - echo "username:$dbuse" - echo "password:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "start up$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1657,29 +1656,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # Check if the configuration file exists + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # Read API_TOKEN and zone_id from configuration files + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # Convert ZONE_IDS to an array + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # Prompt the user whether to clean the cache - read -e -p "Need to clean Cloudflare's cache? (y/n):" answer + # 提示用户是否清理缓存 + read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer if [[ "$answer" == "y" ]]; then - echo "CF information is saved in$CONFIG_FILE, you can modify CF information later" - read -e -p "Please enter your API_TOKEN:" API_TOKEN - read -e -p "Please enter your CF username:" EMAIL - read -e -p "Please enter zone_id (multiple separated by spaces):" -a ZONE_IDS + 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 - # Loop through each zone_id and execute the clear cache command + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "Clearing cache for zone_id:$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1687,13 +1686,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "The cache clear request has been sent." + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "Clean up site cache" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1702,28 @@ web_cache() { web_del() { - send_stats "Delete site data" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "To delete site data, please enter your domain name (multiple domain names are separated by spaces):" yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "Deleting the domain name:$yuming" + 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 - # Convert domain name to database name + # 将域名转换为数据库名 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:]') - # Check whether the database exists before deleting it to avoid errors - echo "Deleting the database:$dbname" + # 删除数据库前检查是否存在,避免报错 + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1739,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to the mode parameter + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # Turn on WAF: Remove comments + # 开启 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 - # Close WAF: Add Comments + # 关闭 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 "Invalid parameter: Use 'on' or 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Check nginx images and handle them according to the situation + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1802,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # Delete old definition + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # Insert a new definition before the line with "Happy publishing" + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1829,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # Delete old definition + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # Insert a new definition before the line with "Happy publishing" + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1857,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Turn on Brotli: Remove comments + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1871,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Close Brotli: Add comments + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1887,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "Invalid parameter: Use 'on' or 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Check nginx images and handle them according to the situation + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1913,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # Turn on Zstd: Remove comments + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1928,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # Close Zstd: Add comments + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1944,11 @@ nginx_zstd() { else - echo "Invalid parameter: Use 'on' or 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Check nginx images and handle them according to the situation + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1975,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "Invalid parameter: Use 'on' or 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1990,7 +1989,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP environment defense" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2003,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "Server website defense program${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. Install the defense program" + echo "1. 安装防御程序" echo "------------------------" - echo "5. View SSH interception record 6. View website interception record" - echo "7. View the list of defense rules 8. View real-time monitoring of logs" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. Configure intercept parameters 12. Clear all blocked IPs" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. cloudflare mode 22. High load on 5 seconds shield" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31. Turn on WAF 32. Turn off WAF" - echo "33. Turn on DDOS Defense 34. Turn off DDOS Defense" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9. Uninstall the defense program" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2081,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban defense program has been uninstalled" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2097,11 +2096,11 @@ web_security() { ;; 21) - send_stats "cloudflare mode" - echo "Go to the upper right corner of the cf background, select the API token on the left, and obtain the Global API Key" + send_stats "cloudflare模式" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "Enter CF account number:" cfuser - read -e -p "Enter the Global API Key for CF:" cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2116,21 +2115,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "Cloudflare mode is configured to view intercept records in the cf background, site-security-events" + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "Get CF parameters:" - echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" - echo -e "Go to the bottom right of the cf background domain name summary page to get${gl_huang}Region ID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "Enter CF account number:" cfuser - read -e -p "Enter the Global API Key for CF:" cftoken - read -e -p "Enter the region ID of the domain name in CF:" cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2147,23 +2146,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "High load automatic shield opening script has been added" + echo "高负载自动开盾脚本已添加" else - echo "Automatic shield script already exists, no need to add it" + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "Site WAF is enabled" - send_stats "Site WAF is enabled" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "Site WAF has been closed" - send_stats "Site WAF has been closed" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2189,10 +2188,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# Get the current worker_processes setting value +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# Set mode information according to value +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2207,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # Check whether zstd is enabled and not commented (the whole line starts with zstd on;) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Check if brotli is enabled and not commented + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # Check if gzip is enabled and not commented + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2237,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "Optimize LDNMP environment" - echo -e "Optimize LDNMP environment${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. Standard mode 2. High performance mode (recommended 2H4G or above)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3. Turn on gzip compression 4. Turn off gzip compression" - echo "5. Turn on br compression 6. Turn off br compression" - echo "7. Turn on zstd compression 8. Turn off zstd compression" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Site standard mode" + send_stats "站点标准模式" - # nginx tuning + # 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 tuning + # 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 tuning + # 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 @@ -2276,7 +2275,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql tuning + # 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 @@ -2288,23 +2287,23 @@ web_optimization() { optimize_balanced - echo "LDNMP environment has been set to standard mode" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "Site high performance mode" + send_stats "站点高性能模式" - # nginx tuning + # 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 tuning + # 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 tuning + # 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 @@ -2316,7 +2315,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql tuning + # 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 @@ -2326,7 +2325,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP environment has been set to high performance mode" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2386,9 +2385,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}${gl_bai} installed" +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker="${gl_hui}${gl_bai} is not installed" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2396,7 +2395,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "Access address:" +echo "访问地址:" ip_address @@ -2434,31 +2433,31 @@ check_docker_image_update() { return fi - # Get the container creation time and image name + # 获取容器的创建时间和镜像名称 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) - # Extract mirror warehouses and tags + # 提取镜像仓库和标签 local image_repo=${image_name%%:*} local image_tag=${image_name##*:} - # The default label is latest + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # Add support for official images + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Get image publishing time from Docker Hub API + # 从 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) - # Verify the time of acquisition + # 验证获取的时间 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) - # Compare timestamps + # 比较时间戳 if [[ $container_created_ts -lt $last_updated_ts ]]; then update_status="${gl_huang}发现新版本!${gl_bai}" else @@ -2477,7 +2476,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # Get the IP address of the container + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2486,34 @@ block_container_port() { install iptables - # Check and block all other IPs + # 检查并封禁其他所有 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 - # Check and release the specified IP + # 检查并放行指定 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 - # Check and release the local network 127.0.0.0/8 + # 检查并放行本地网络 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 - # Check and block all other IPs + # 检查并封禁其他所有 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 - # Check and release the specified IP + # 检查并放行指定 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 - # Check and release the local network 127.0.0.0/8 + # 检查并放行本地网络 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 @@ -2524,7 +2523,7 @@ block_container_port() { fi - echo "IP+ ports have been blocked from accessing the service" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2535,7 +2534,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # Get the IP address of the container + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2544,17 @@ clear_container_rules() { install iptables - # Clear rules that block all other IPs + # 清除封禁其他所有 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 - # Clear the rules for releasing the specified IP + # 清除放行指定 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 - # Clear the rules for release local network 127.0.0.0/8 + # 清除放行本地网络 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 @@ -2564,17 +2563,17 @@ clear_container_rules() { - # Clear rules that block all other IPs + # 清除封禁其他所有 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 - # Clear the rules for releasing the specified IP + # 清除放行指定 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 - # Clear the rules for release local network 127.0.0.0/8 + # 清除放行本地网络 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 @@ -2585,7 +2584,7 @@ clear_container_rules() { fi - echo "IP+ports have been allowed to access the service" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2599,25 +2598,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "Error: Please provide the port number and the IP that is allowed to access." - echo "Usage: block_host_port " + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # Denied all other IP access + # 拒绝其他所有 IP 访问 if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -j DROP fi - # Allow specified IP access + # 允许指定 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 - # Allow local access + # 允许本机访问 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 @@ -2626,27 +2625,27 @@ block_host_port() { - # Denied all other IP access + # 拒绝其他所有 IP 访问 if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi - # Allow specified IP access + # 允许指定 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 - # Allow local access + # 允许本机访问 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 - # Allow traffic for established and related connections + # 允许已建立和相关连接的流量 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+ ports have been blocked from accessing the service" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2658,47 +2657,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "Error: Please provide the port number and the IP that is allowed to access." - echo "Usage: clear_host_port_rules " + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # Clear rules that block all other IP access + # 清除封禁所有其他 IP 访问的规则 if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi - # Clear rules that allow native access + # 清除允许本机访问的规则 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 - # Clear rules that allow specified IP access + # 清除允许指定 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 - # Clear rules that block all other IP access + # 清除封禁所有其他 IP 访问的规则 if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi - # Clear rules that allow native access + # 清除允许本机访问的规则 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 - # Clear rules that allow specified IP access + # 清除允许指定 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+ports have been allowed to access the service" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2727,7 +2726,7 @@ grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker docker_app() { -send_stats "${docker_name}manage" +send_stats "${docker_name}管理" while true; do clear @@ -2747,18 +2746,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. Install 2. Update 3. Uninstall" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. Add domain name access 6. Delete domain name access" - echo "7. Allow IP+ port access 8. Block IP+ port access" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2770,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_nameInstalled" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "Install$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2785,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_nameInstalled" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "renew$docker_name" + send_stats "更新$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2799,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" - send_stats "uninstall$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}Domain access settings" - send_stats "${docker_name}Domain access settings" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "Domain name format example.com does not come with https://" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "Allow IP access${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "Block IP access${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2859,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. Install 2. Update 3. Uninstall" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. Add domain name access 6. Delete domain name access" - echo "7. Allow IP+ port access 8. Block IP+ port access" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2894,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}Domain access settings" - send_stats "${docker_name}Domain access settings" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "Domain name format example.com does not come with https://" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "Allow IP access${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "Block IP access${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2994,17 @@ tmux_run_d() { local base_name="tmuxd" local tmuxd_ID=1 -# Functions that check whether the session exists +# 检查会话是否存在的函数 session_exists() { tmux has-session -t $1 2>/dev/null } -# Loop until a non-existent session name is found +# 循环直到找到一个不存在的会话名称 while session_exists "$base_name-$tmuxd_ID"; do local tmuxd_ID=$((tmuxd_ID + 1)) done -# Create a new tmux session +# 创建新的 tmux 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3079,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "Restarted" + echo "已重启" reboot ;; *) - echo "Canceled" + echo "已取消" ;; esac @@ -3127,8 +3126,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "Unable to install LDNMP environment again" - echo -e "${gl_huang}hint:${gl_bai}The website construction environment is installed. No need to install again!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3138,10 +3137,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "Install LDNMP environment" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}The LDNMP environment is not installed, start installing the LDNMP environment...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3154,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Install nginx environment" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}nginx is not installed, start installing nginx environment...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3168,8 @@ 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 has been installed" -echo -e "Current version:${gl_huang}v$nginx_version${gl_bai}" +echo "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3180,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "Please install the LDNMP environment first" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3191,7 +3190,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "Please install nginx environment first" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3202,16 +3201,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "Yours$webnameBuilt!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webnameThe installation information is as follows:" + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "Yours$webnameBuilt!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3223,8 +3222,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3263,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "Please enter your anti-generation IP:" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "Please enter your anti-generation port:" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3297,14 +3296,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "Please enter your multiple anti-generation IP+ ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3357,12 +3356,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP site management" - echo "LDNMP environment" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - echo -e "Site:${output}Certificate expiration time" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3374,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "database:${db_output}" + 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 "Site Directory" + echo "站点目录" echo "------------------------" - echo -e "data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" + 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 "operate" + echo "操作" echo "------------------------" - echo "1. Apply for/update the domain name certificate 2. Change the site domain name" - echo "3. Clean up the site cache 4. Create an associated site" - echo "5. View access log 6. View error log" - echo "7. Edit global configuration 8. Edit site configuration" - echo "9. Manage site database 10. View site analysis report" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" + echo "5. 查看访问日志 6. 查看错误日志" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20. Delete the specified site data" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Apply for a domain name certificate" - read -e -p "Please enter your domain name:" yuming + 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 @@ -3412,15 +3411,15 @@ ldnmp_web_status() { ;; 2) - send_stats "Change the site domain name" - echo -e "${gl_hong}Highly recommended:${gl_bai}First back up the entire site data and then change the site domain name!" - read -e -p "Please enter the old domain name:" oddyuming - read -e -p "Please enter the new domain name:" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # mysql replacement + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3437,7 @@ ldnmp_web_status() { done done - # Website directory replacement + # 网站目录替换 mv /home/web/html/$oddyuming /home/web/html/$yuming find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} + @@ -3459,10 +3458,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "Create an associated site" - echo -e "Associate a new domain name for the existing site for access" - read -e -p "Please enter the existing domain name:" oddyuming - read -e -p "Please enter the new domain name:" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3476,25 +3475,25 @@ ldnmp_web_status() { ;; 5) - send_stats "View access log" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "View error log" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "Edit global configuration" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "Edit site configuration" - read -e -p "To edit the site configuration, please enter the domain name you want to edit:" yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3503,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "View site data" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3535,21 +3534,21 @@ fi install_panel() { -send_stats "${panelname}manage" +send_stats "${panelname}管理" while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}It is a popular and powerful operation and maintenance management panel nowadays." - echo "Official website introduction:$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1. Install 2. Management 3. Uninstall" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3557,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}Install" + send_stats "${panelname}安装" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}control" + send_stats "${panelname}控制" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}uninstall" + send_stats "${panelname}卸载" ;; *) break @@ -3615,8 +3614,8 @@ donlond_frp() { generate_frps_config() { - send_stats "Install the frp server" - # Generate random ports and credentials + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3636,17 @@ EOF donlond_frp frps - # Output generated information + # 输出生成的信息 ip_address echo "------------------------" - echo "Parameters required for client deployment" - echo "Service IP:$ipv4_address" + echo "客户端部署时需要用的参数" + echo "服务IP: $ipv4_address" echo "token: $token" echo - echo "FRP panel information" - echo "FRP panel address: http://$ipv4_address:$dashboard_port" - echo "FRP panel username:$dashboard_user" - echo "FRP panel password:$dashboard_pwd" + echo "FRP面板信息" + echo "FRP面板地址: http://$ipv4_address:$dashboard_port" + echo "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3656,9 @@ EOF configure_frpc() { - send_stats "Install the frp client" - read -e -p "Please enter the external network docking IP:" server_addr - read -e -p "Please enter the external network docking token:" token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3679,17 +3678,17 @@ EOF } add_forwarding_service() { - send_stats "Add FRP intranet service" - # Prompt the user to enter the service name and forwarding information - read -e -p "Please enter the service name:" service_name - read -e -p "Please enter the forwarding type (tcp/udp) [Enter default tcp]:" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "Please enter the intranet IP [Enter default 127.0.0.1]:" local_ip + read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip local local_ip=${local_ip:-127.0.0.1} - read -e -p "Please enter the intranet port:" local_port - read -e -p "Please enter the external network port:" remote_port + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # Write user input to configuration file + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3698,8 @@ remote_port = ${remote_port} EOF - # Output generated information - echo "Serve$service_nameAdded successfully to frpc.toml" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3711,12 +3710,12 @@ EOF delete_forwarding_service() { - send_stats "Delete the frp intranet service" - # Prompt the user to enter the service name that needs to be deleted - read -e -p "Please enter the service name that needs to be deleted:" service_name - # Use sed to delete the service and its related configurations + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "Serve$service_nameDeleted successfully from frpc.toml" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3726,7 +3725,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # Print the header + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3746,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # If there is service information, print the current service before processing the new service + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3755,11 @@ list_forwarding_services() { type } - # Update the current service name + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # Clear the previous value + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3789,7 +3788,7 @@ list_forwarding_services() { } END { - # Print the information for the last service + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3801,17 @@ list_forwarding_services() { -# Get the FRP server port +# 获取 FRP 服务端端口 get_frp_ports() { mapfile -t ports < <(ss -tulnape | grep frps | awk '{print $5}' | awk -F':' '{print $NF}' | sort -u) } -# Generate access address +# 生成访问地址 generate_access_urls() { - # Get all ports first + # 首先获取所有端口 get_frp_ports - # Check if there are ports other than 8055/8056 + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3820,18 @@ generate_access_urls() { fi done - # Show title and content only when there is a valid port + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRP service external access address:" + echo "FRP服务对外访问地址:" - # Process IPv4 address + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # Process IPv6 addresses (if present) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3840,7 @@ generate_access_urls() { done fi - # Handling HTTPS configuration + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3867,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP server" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3875,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP server$check_frp $update_status" - echo "Build an FRP intranet penetration service environment to expose devices without public IP to the Internet" - echo "Official website introduction: https://github.com/fatedier/frp/" - echo "Video teaching: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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. Install 2. Update 3. Uninstall" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. Domain name access for intranet service 6. Delete domain name access" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. Allow IP+ port access 8. Block IP+ port access" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00. Refresh service status 0. Return to the previous menu" + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3902,7 +3901,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "The FRP server has been installed" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3911,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "The FRP server has been updated" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3922,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "应用已卸载" ;; 5) - echo "Reverse intranet penetration service into domain name access" - send_stats "FRP access to external domain names" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "Please enter your intranet penetration service port:" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "Domain name format example.com does not come with https://" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "Allow IP access" - read -e -p "Please enter the port to be released:" frps_port + send_stats "允许IP访问" + read -e -p "请输入需要放行的端口: " frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; 8) - send_stats "Block IP access" - echo "If you have accessed the anti-generation domain name, you can use this function to block IP+ port access, which is more secure." - read -e -p "Please enter the port you need to block:" frps_port + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "Refresh the FRP service status" - echo "FRP service status has been refreshed" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3966,7 +3965,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP Client" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3973,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP Client$check_frp $update_status" - echo "Docking with the server, after docking, you can create intranet penetration service to the Internet access" - echo "Official website introduction: https://github.com/fatedier/frp/" - echo "Video teaching: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3984,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. Install 2. Update 3. Uninstall" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4. Add external services 5. Delete external services 6. Configure services manually" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3999,7 +3998,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "The FRP client has been installed" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4008,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "The FRP client has been updated" + echo "FRP客户端已经更新完成" ;; 3) @@ -4020,7 +4019,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "应用已卸载" ;; 4) @@ -4066,68 +4065,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp download tool" + send_stats "yt-dlp 下载工具" echo -e "yt-dlp $YTDLP_STATUS" - echo -e "yt-dlp is a powerful video download tool that supports thousands of sites including YouTube, Bilibili, Twitter, etc." - echo -e "Official website address: https://github.com/yt-dlp/yt-dlp" + echo -e "yt-dlp 是一个功能强大的视频下载工具,支持 YouTube、Bilibili、Twitter 等数千站点。" + echo -e "官网地址:https://github.com/yt-dlp/yt-dlp" echo "-------------------------" - echo "Downloaded video list:" - ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(None yet)" + echo "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1. Install 2. Update 3. Uninstall" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5. Single video download 6. Batch video download 7. Custom parameter download" - echo "8. Download as MP3 audio 9. Delete the video directory 10. Cookie management (under development)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "Please enter the option number:" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "Installing yt-dlp..." - echo "Installing yt-dlp..." + send_stats "正在安装 yt-dlp..." + echo "正在安装 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "The installation is complete. Press any key to continue..." + echo "安装完成。按任意键继续..." read ;; 2) - send_stats "Update yt-dlp..." - echo "Update yt-dlp..." + send_stats "正在更新 yt-dlp..." + echo "正在更新 yt-dlp..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "Update completed. Press any key to continue..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "Uninstalling yt-dlp..." - echo "Uninstalling yt-dlp..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "Uninstall is complete. Press any key to continue..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "Single video download" - read -e -p "Please enter the video link:" url + 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 "After the download is complete, press any key to continue..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "Batch video download" + send_stats "批量视频下载" install nano if [ ! -f "$URL_FILE" ]; then - echo -e "# Enter multiple video link addresses\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "Now start batch download..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4134,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "The batch download is completed, press any key to continue..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "Custom video download" - read -e -p "Please enter the full yt-dlp parameter (excluding yt-dlp):" custom + 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 "After the execution is completed, press any key to continue..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3 download" - read -e -p "Please enter the video link:" url + 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 "The audio download is completed, press any key to continue..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "Delete video" - read -e -p "Please enter the name of the delete video:" rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4194,7 @@ set_timedate() { -# Fix dpkg interrupt problem +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4203,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}System update...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4222,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "Unknown package manager!" + echo "未知的包管理器!" return fi } @@ -4231,7 +4230,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}Cleaning up the system...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4259,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "Clean the package manager cache..." + echo "清理包管理器缓存..." apk cache clean - echo "Delete the system log..." + echo "删除系统日志..." rm -rf /var/log/* - echo "Delete APK cache..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "Delete temporary files..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4283,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "Delete the system log..." + echo "删除系统日志..." rm -rf /var/log/* - echo "Delete temporary files..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "Clean up unused dependencies..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "Clean the package manager cache..." + echo "清理包管理器缓存..." pkg clean -y - echo "Delete the system log..." + echo "删除系统日志..." rm -rf /var/log/* - echo "Delete temporary files..." + echo "删除临时文件..." rm -rf /tmp/* else - echo "Unknown package manager!" + echo "未知的包管理器!" return fi return @@ -4340,26 +4339,26 @@ fi set_dns_ui() { root_use -send_stats "Optimize DNS" +send_stats "优化DNS" while true; do clear - echo "Optimize DNS address" + echo "优化DNS地址" echo "------------------------" - echo "Current DNS address" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. Foreign DNS optimization:" + 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. Domestic DNS optimization:" + echo "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. Manually edit DNS configuration" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4366,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "Foreign DNS optimization" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4374,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "Domestic DNS optimization" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "Manually edit DNS configuration" + send_stats "手动编辑DNS配置" ;; *) break @@ -4403,13 +4402,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # If PasswordAuthentication is found, set to yes + # 如果找到 PasswordAuthentication 设置为 yes 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 - # If found PubkeyAuthentication is set to yes + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4417,7 +4416,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # If neither PasswordAuthentication nor PubkeyAuthentication matches, set the default value + # 如果 PasswordAuthentication 和 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" @@ -4428,7 +4427,7 @@ correct_ssh_config() { new_ssh_port() { - # Backup SSH configuration files + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4440,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "The SSH port has been modified to:$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4459,7 +4458,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "The private key information has been generated. Be sure to copy and save it.${gl_huang}${ipv4_address}_ssh.key${gl_bai}File for future SSH login" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4470,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT private key login is enabled, ROOT password login has been closed, reconnection will take effect${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "Please enter your SSH public key contents (usually starting with 'ssh-rsa' or 'ssh-ed25519'):" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}Error: The public key content was not entered.${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4499,7 +4498,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}The public key has been successfully imported, the ROOT private key login has been enabled, the ROOT password login has been closed, and the reconnection will take effect${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4508,26 +4507,26 @@ import_sshkey() { add_sshpasswd() { -echo "Set your ROOT password" +echo "设置你的ROOT密码" 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}ROOT login is set up!${gl_bai}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "Reinstall the system" + 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 @@ -4538,41 +4537,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "Initial username after reinstallation:${gl_huang}root${gl_bai}Initial password:${gl_huang}LeitboGi0ro${gl_bai}Initial port:${gl_huang}22${gl_bai}" - echo -e "Press any key to continue..." + 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 "Initial username after reinstallation:${gl_huang}Administrator${gl_bai}Initial password:${gl_huang}Teddysun.com${gl_bai}Initial port:${gl_huang}3389${gl_bai}" - echo -e "Press any key to continue..." + 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 "Initial username after reinstallation:${gl_huang}root${gl_bai}Initial password:${gl_huang}123@@@${gl_bai}Initial port:${gl_huang}22${gl_bai}" - echo -e "Press any key to continue..." + 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 "Initial username after reinstallation:${gl_huang}Administrator${gl_bai}Initial password:${gl_huang}123@@@${gl_bai}Initial port:${gl_huang}3389${gl_bai}" - echo -e "Press any key to continue..." + 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 "Reinstall the system" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." - echo -e "${gl_hui}Thanks to the script support of leitbogioro and bin456789!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4587,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos Feiniu public beta version" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please select the system to reinstall:" sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "Reinstall debian 13" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4609,49 @@ dd_xitong() { ;; 2) - send_stats "Reinstall debian 12" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Reinstall debian 11" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Reinstall debian 10" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "Reinstall ubuntu 24.04" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "Reinstall ubuntu 22.04" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Reinstall ubuntu 20.04" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "Reinstall ubuntu 18.04" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4660,7 @@ dd_xitong() { 21) - send_stats "Reinstall rockylinux10" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4668,7 @@ dd_xitong() { ;; 22) - send_stats "Reinstall rockylinux9" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4676,7 @@ dd_xitong() { ;; 23) - send_stats "Reinstall alma10" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4684,7 @@ dd_xitong() { ;; 24) - send_stats "Reinstall alma9" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4692,7 @@ dd_xitong() { ;; 25) - send_stats "Reinstall oracle10" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4700,7 @@ dd_xitong() { ;; 26) - send_stats "Reinstall oracle9" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4708,7 @@ dd_xitong() { ;; 27) - send_stats "Reinstall fedora42" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4716,7 @@ dd_xitong() { ;; 28) - send_stats "Reinstall fedora41" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4724,7 @@ dd_xitong() { ;; 29) - send_stats "Reinstall centos10" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4732,7 @@ dd_xitong() { ;; 30) - send_stats "Reinstall centos9" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4740,7 @@ dd_xitong() { ;; 31) - send_stats "Reinstall alpine" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4748,7 @@ dd_xitong() { ;; 32) - send_stats "Reinstall arch" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4756,7 @@ dd_xitong() { ;; 33) - send_stats "Reinstall kali" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4764,7 @@ dd_xitong() { ;; 34) - send_stats "Reinstall openeuler" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4772,7 @@ dd_xitong() { ;; 35) - send_stats "Reinstall opensuse" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4780,7 @@ dd_xitong() { ;; 36) - send_stats "Reload flying cow" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4789,7 @@ dd_xitong() { 41) - send_stats "Reinstall windows11" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4797,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "Reinstall Windows 10" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Reinstall Windows 7" + send_stats "重装windows7" 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 @@ -4812,21 +4811,21 @@ dd_xitong() { ;; 44) - send_stats "Reinstall windows server 22" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "Reinstall windows server 19" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "Reinstall windows server 16" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4833,7 @@ dd_xitong() { ;; 47) - send_stats "Reinstall windows11 ARM" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4850,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3 management" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4863,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "You have installed xanmod's BBRv3 kernel" - echo "Current kernel version:$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "Kernel Management" + echo "内核管理" echo "------------------------" - echo "1. Update the BBRv3 kernel 2. Uninstall the BBRv3 kernel" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4884,7 +4883,7 @@ bbrv3() { # 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 - # Step 3: Add a repository + # 步骤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+') @@ -4893,7 +4892,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "The XanMod kernel has been updated. Take effect after restart" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4902,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "The XanMod kernel is uninstalled. Take effect after restart" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4916,13 +4915,13 @@ bbrv3() { else clear - echo "Set up BBR3 acceleration" - echo "Video introduction: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "Only support Debian/Ubuntu" - echo "Please back up the data and will enable BBR3 for you to upgrade the Linux kernel." + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "Are you sure to continue? (Y/N):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4930,12 +4929,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "The current environment does not support it, only supports Debian and Ubuntu systems" + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "Unable to determine the operating system type" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4946,7 +4945,7 @@ bbrv3() { # 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 - # Step 3: Add a repository + # 步骤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+') @@ -4957,17 +4956,17 @@ bbrv3() { bbr_on - echo "XanMod kernel is installed and BBR3 is enabled successfully. Take effect after restart" + echo "XanMod内核安装并BBR3启用成功。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot ;; [Nn]) - echo "Canceled" + echo "已取消" ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4976,40 +4975,40 @@ bbrv3() { elrepo_install() { - # Import ELRepo GPG public key - echo "Import the ELRepo GPG public key..." + # 导入 ELRepo GPG 公钥 + echo "导入 ELRepo GPG 公钥..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - # Detect system version + # 检测系统版本 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) - # Make sure we run on a supported operating system + # 确保我们在一个支持的操作系统上运行 if [[ "$os_name" != *"Red Hat"* && "$os_name" != *"AlmaLinux"* && "$os_name" != *"Rocky"* && "$os_name" != *"Oracle"* && "$os_name" != *"CentOS"* ]]; then - echo "Unsupported operating systems:$os_name" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # Print detected operating system information - echo "Operating system detected:$os_name $os_version" - # Install the corresponding ELRepo warehouse configuration according to the system version + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "Install ELRepo repository configuration (version 8)..." + echo "安装 ELRepo 仓库配置 (版本 8)..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm elif [[ "$os_version" == 9 ]]; then - echo "Install ELRepo repository configuration (version 9)..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Install ELRepo repository configuration (version 10)..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "Unsupported system versions:$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # Enable the ELRepo kernel repository and install the latest mainline kernel - echo "Enable the ELRepo kernel repository and install the latest mainline kernel..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "The ELRepo repository configuration is installed and updated to the latest mainline kernel." + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5017,37 +5016,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat Kernel Management" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "You have installed the elrepo kernel" - echo "Current kernel version:$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "Kernel Management" + echo "内核管理" echo "------------------------" - echo "1. Update the elrepo kernel 2. Uninstall the elrepo kernel" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + 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 "Update the Red Hat kernel" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "The elrepo kernel is uninstalled. Take effect after restart" - send_stats "Uninstall the Red Hat kernel" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5060,26 +5059,26 @@ elrepo() { else clear - echo "Please back up the data and will upgrade the Linux kernel for you" - echo "Video introduction: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "Only support Red Hat series distributions CentOS/RedHat/Alma/Rocky/oracle" - echo "Upgrading the Linux kernel can improve system performance and security. It is recommended to try it if conditions permit and upgrade the production environment with caution!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "Are you sure to continue? (Y/N):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Upgrade the Red Hat kernel" + send_stats "升级红帽内核" server_reboot ;; [Nn]) - echo "Canceled" + echo "已取消" ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5090,7 +5089,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}Update the virus database...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5099,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "Please specify the directory to scan." + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}Scanning directory $@...${gl_bai}" + echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" - # Build mount parameters + # 构建 mount 参数 local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # Build clamscan command parameters + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5120,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Execute Docker commands + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5129,8 @@ clamav_scan() { clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS - echo -e "${gl_lv}$@ Scan is completed, virus report is stored${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" - echo -e "${gl_lv}If there is a virus, please${gl_huang}scan.log${gl_lv}Search for FOUND keyword in the file to confirm the location of the virus${gl_bai}" + 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}" } @@ -5143,23 +5142,23 @@ clamav_scan() { clamav() { root_use - send_stats "Virus Scan Management" + send_stats "病毒扫描管理" while true; do clear - echo "clamav virus scanning tool" - echo "Video introduction: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "It is an open source antivirus software tool, mainly used to detect and remove various types of malware." - echo "Including viruses, Trojan horses, spyware, malicious scripts and other harmful software." + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1. Full disk scan${gl_bai} ${gl_huang}2. Scan the important directory${gl_bai} ${gl_kjlan}3. Custom directory scanning${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Full disk scan" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5167,7 @@ clamav() { ;; 2) - send_stats "Important directory scan" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5175,8 @@ clamav() { break_end ;; 3) - send_stats "Custom directory scanning" - read -e -p "Please enter the directory to scan, separated by spaces (for example: /etc /var /usr /home /root):" directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5193,21 @@ clamav() { -# High-performance mode optimization function +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}Switch to${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}Optimize virtual memory...${gl_bai}" + 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}Optimize network settings...${gl_bai}" + 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 @@ -5220,36 +5219,36 @@ optimize_high_performance() { 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}Optimize cache management...${gl_bai}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}Optimize CPU settings...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}Other optimizations...${gl_bai}" - # Disable large transparent pages to reduce latency + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # Disable NUMA balancing + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# Equalization mode optimization function +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}Switch to equalization mode...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}Optimize virtual memory...${gl_bai}" + 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}Optimize network settings...${gl_bai}" + 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 @@ -5261,36 +5260,36 @@ optimize_balanced() { 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}Optimize cache management...${gl_bai}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}Optimize CPU settings...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}Other optimizations...${gl_bai}" - # Restore transparent page + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # Restore NUMA balancing + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# Restore the default settings function +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}Restore to default settings...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}Restore file descriptor...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}Restore virtual memory...${gl_bai}" + 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}Restore network settings...${gl_bai}" + 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 @@ -5302,37 +5301,37 @@ restore_defaults() { 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}Restore cache management...${gl_bai}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}Restore CPU settings...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}Restore other optimizations...${gl_bai}" - # Restore transparent page + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # Restore NUMA balancing + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# Website building optimization function +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}Switch to the website building optimization mode...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}Optimize virtual memory...${gl_bai}" + 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}Optimize network settings...${gl_bai}" + 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 @@ -5344,16 +5343,16 @@ optimize_web_server() { 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}Optimize cache management...${gl_bai}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}Optimize CPU settings...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}Other optimizations...${gl_bai}" - # Disable large transparent pages to reduce latency + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # Disable NUMA balancing + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5363,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux kernel tuning management" - echo "Optimization of kernel parameters in Linux system" - echo "Video introduction: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "A variety of system parameter tuning modes are provided, and users can choose and switch according to their own usage scenarios." - echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in the production environment!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1. High-performance optimization mode: Maximize system performance and optimize file descriptors, virtual memory, network settings, cache management and CPU settings." - echo "2. Balanced optimization mode: Balance between performance and resource consumption, suitable for daily use." - echo "3. Website optimization mode: Optimize for the website server to improve concurrent connection processing capabilities, response speed and overall performance." - echo "4. Live broadcast optimization mode: Optimize the special needs of live broadcast streaming to reduce latency and improve transmission performance." - echo "5. Game server optimization mode: Optimize for game servers to improve concurrent processing capabilities and response speed." - echo "6. Restore the default settings: Restore the system settings to the default configuration." + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "High performance mode optimization" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "Balanced mode optimization" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "Live streaming optimization" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "Game server optimization" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "Restore default settings" + send_stats "还原默认设置" ;; *) break @@ -5446,7 +5445,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}The system language has been modified to:$langReconnecting SSH takes effect.${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5455,17 +5454,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}The system language has been modified to:$langReconnecting SSH takes effect.${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "Unsupported systems:$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "Unsupported systems, system type cannot be recognized." + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5475,29 +5474,29 @@ update_locale() { linux_language() { root_use -send_stats "Switch system language" +send_stats "切换系统语言" while true; do clear - echo "Current system language:$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1. English 2. Simplified Chinese 3. Traditional Chinese" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "Switch to English" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "Switch to Simplified Chinese" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "Switch to Traditional Chinese" + send_stats "切换到繁体中文" ;; *) break @@ -5519,7 +5518,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}Change is completed. Reconnect SSH to view changes!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5530,10 +5529,10 @@ break_end shell_bianse() { root_use - send_stats "Command line beautification tool" + send_stats "命令行美化工具" while true; do clear - echo "Command line beautification tool" + 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}#" @@ -5543,9 +5542,9 @@ shell_bianse() { echo -e "6. \033[1;33mroot \033[1;34mlocalhost \033[1;35m~ \033[0m${gl_bai}#" echo -e "7. root localhost ~ #" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5590,7 +5589,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "System Recycling Station" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5604,17 @@ linux_trash() { fi clear - echo -e "Current recycling bin${trash_status}" - echo -e "After enabling, the files deleted by rm will first enter the recycling bin to prevent the mistaken deletion of important files!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "The recycling bin is empty" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1. Enable the Recycle Bin 2. Close the Recycle Bin" - echo "3. Restore content 4. Clear the recycling bin" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5623,7 +5622,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "The Recycle Bin is enabled and deleted files will be moved to the Recycle Bin." + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5631,23 +5630,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "The recycling bin is closed and the file will be deleted directly." + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "Enter the file name to restore:" file_to_restore + read -e -p "输入要还原的文件名: " file_to_restore if [ -e "$TRASH_DIR/$file_to_restore" ]; then mv "$TRASH_DIR/$file_to_restore" "$HOME/" - echo "$file_to_restoreRestored to the home directory." + echo "$file_to_restore 已还原到主目录。" else - echo "The file does not exist." + echo "文件不存在。" fi ;; 4) - read -e -p "Confirm to clear the recycling bin? [y/n]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "The recycling bin has been cleared." + echo "回收站已清空。" fi ;; *) @@ -5658,23 +5657,23 @@ linux_trash() { } linux_fav() { -send_stats "Command Favorites" +send_stats "命令收藏夹" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# Create a backup +# 创建备份 create_backup() { - send_stats "Create a backup" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # Prompt the user to enter the backup directory - echo "Create a backup example:" - echo "- Backup a single directory: /var/www" - echo "- Backup multiple directories: /etc /home /var/log" - echo "- Direct Enter will use the default directory (/etc /usr /home)" - read -r -p "Please enter the directory to back up (multiple directories are separated by spaces, and if you enter directly, use the default directory):" input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # If the user does not enter a directory, use the default directory + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5681,119 @@ create_backup() { "/home" # 用户数据 ) else - # Separate the directory entered by the user into an array by spaces + # 将用户输入的目录按空格分隔成数组 IFS=' ' read -r -a BACKUP_PATHS <<< "$input" fi - # Generate backup file prefix + # 生成备份文件前缀 local PREFIX="" for path in "${BACKUP_PATHS[@]}"; do - # Extract directory name and remove slashes + # 提取目录名称并去除斜杠 dir_name=$(basename "$path") PREFIX+="${dir_name}_" done - # Remove the last underscore + # 去除最后一个下划线 local PREFIX=${PREFIX%_} - # Generate backup file name + # 生成备份文件名 local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" - # Print the directory selected by the user - echo "The backup directory you selected is:" + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # Create a backup - echo "Creating a backup$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # Check if the command is successful + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "The backup was created successfully:$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "Backup creation failed!" + echo "备份创建失败!" exit 1 fi } -# Restore backup +# 恢复备份 restore_backup() { - send_stats "Restore backup" - # Select the backup you want to restore - read -e -p "Please enter the backup file name to restore:" BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # Check if the backup file exists + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "The backup file does not exist!" + echo "备份文件不存在!" exit 1 fi - echo "Recovering backup$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "Backup and restore successfully!" + echo "备份恢复成功!" else - echo "Backup recovery failed!" + echo "备份恢复失败!" exit 1 fi } -# List backups +# 列出备份 list_backups() { - echo "Available backups:" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# Delete backup +# 删除备份 delete_backup() { - send_stats "Delete backup" + send_stats "删除备份" - read -e -p "Please enter the backup file name to delete:" BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # Check if the backup file exists + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "The backup file does not exist!" + echo "备份文件不存在!" exit 1 fi - # Delete backup + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "The backup was deleted successfully!" + echo "备份删除成功!" else - echo "Backup deletion failed!" + echo "备份删除失败!" exit 1 fi } -# Backup main menu +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "System backup function" - echo "System backup function" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1. Create a backup 2. Restore a backup 3. Delete the backup" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "Press Enter to continue..." + read -e -p "按回车键继续..." done } @@ -5806,56 +5805,56 @@ linux_backup() { -# Show connection list +# 显示连接列表 list_connections() { - echo "Saved connection:" + echo "已保存的连接:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" } -# Add a new connection +# 添加新连接 add_connection() { - send_stats "Add a new connection" - echo "Example to create a new connection:" - echo "- Connection name: my_server" - echo "- IP address: 192.168.1.100" - echo "- Username: root" - echo "- Port: 22" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "Please enter the connection name:" name - read -e -p "Please enter your IP address:" ip - read -e -p "Please enter the username (default: root):" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "Please enter the port number (default: 22):" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "Please select the authentication method:" - echo "1. Password" - echo "2. Key" - read -e -p "Please enter the selection (1/2):" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "Please enter your password:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "Please paste the key content (press press Enter twice after pasting):" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # If the input is empty and the key content already contains the beginning, the input ends + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or the key content has been entered, continue to add + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi done - # Check if it is the key content + # 检查是否是密钥内容 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" @@ -5864,89 +5863,89 @@ add_connection() { fi ;; *) - echo "Invalid choice!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "The connection is saved!" + echo "连接已保存!" } -# Delete a connection +# 删除连接 delete_connection() { - send_stats "Delete a connection" - read -e -p "Please enter the connection number to delete:" num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "Error: The corresponding connection was not found." + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - # If the connection is using a key file, delete the key file + # 如果连接使用的是密钥文件,则删除该密钥文件 if [[ "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi sed -i "${num}d" "$CONFIG_FILE" - echo "The connection has been deleted!" + echo "连接已删除!" } -# Use connection +# 使用连接 use_connection() { - send_stats "Use connection" - read -e -p "Please enter the connection number to use:" num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "Error: The corresponding connection was not found." + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "Connecting to$name ($ip)..." + echo "正在连接到 $name ($ip)..." if [[ -f "$password_or_key" ]]; then - # Connect with a key + # 使用密钥连接 ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then - echo "Connection failed! Please check the following:" - echo "1. Is the key file path correct?$password_or_key" - echo "2. Whether the key file permissions are correct (should be 600)." - echo "3. Whether the target server allows login using the key." + echo "连接失败!请检查以下内容:" + echo "1. 密钥文件路径是否正确:$password_or_key" + echo "2. 密钥文件权限是否正确(应为 600)。" + echo "3. 目标服务器是否允许使用密钥登录。" fi else - # Connect with a password + # 使用密码连接 if ! command -v sshpass &> /dev/null; then - echo "Error: sshpass is not installed, please install sshpass first." - echo "Installation method:" + 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 "Connection failed! Please check the following:" - echo "1. Whether the username and password are correct." - echo "2. Whether the target server allows password login." - echo "3. Whether the SSH service of the target server is running normally." + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "ssh remote connection tool" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # Check if the configuration file and key directory exist, and if it does not exist, create it + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5957,21 @@ ssh_manager() { while true; do clear - echo "SSH Remote Connection Tool" - echo "Can connect to other Linux systems via SSH" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1. Create a new connection 2. Use a connection 3. Delete a connection" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "Invalid selection, please try again." ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5988,156 +5987,156 @@ ssh_manager() { -# List available hard disk partitions +# 列出可用的硬盘分区 list_partitions() { - echo "Available hard disk partitions:" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# Mount the partition +# 挂载分区 mount_partition() { - send_stats "Mount the partition" - read -e -p "Please enter the partition name to be mounted (for example, sda1):" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # Check if the partition exists + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "The partition does not exist!" + echo "分区不存在!" return fi - # Check if the partition is already mounted + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "The partition is already mounted!" + echo "分区已经挂载!" return fi - # Create a mount point + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # Mount the partition + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "Partition mount successfully:$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "Partition mount failed!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# Uninstall the partition +# 卸载分区 unmount_partition() { - send_stats "Uninstall the partition" - read -e -p "Please enter the partition name (for example, sda1):" PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # Check if the partition is already mounted + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "The partition is not mounted!" + echo "分区未挂载!" return fi - # Uninstall the partition + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "Partition uninstallation successfully:$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "Partition uninstallation failed!" + echo "分区卸载失败!" fi } -# List mounted partitions +# 列出已挂载的分区 list_mounted_partitions() { - echo "Mounted partition:" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# Format partition +# 格式化分区 format_partition() { - send_stats "Format partition" - read -e -p "Please enter the partition name to format (for example, sda1):" PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # Check if the partition exists + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "The partition does not exist!" + echo "分区不存在!" return fi - # Check if the partition is already mounted + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "The partition has been mounted, please uninstall it first!" + echo "分区已经挂载,请先卸载!" return fi - # Select a file system type - echo "Please select the file system type:" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "Please enter your selection:" FS_CHOICE + 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 "Invalid choice!"; return ;; + *) echo "无效的选择!"; return ;; esac - # Confirm formatting - read -e -p "Confirm formatting partition /dev/$PARTITIONfor$FS_TYPEIs it? (y/n):" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "The operation has been cancelled." + echo "操作已取消。" return fi - # Format partition - echo "Formatting partition /dev/$PARTITIONfor$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "The partition format was successful!" + echo "分区格式化成功!" else - echo "Partition formatting failed!" + echo "分区格式化失败!" fi } -# Check partition status +# 检查分区状态 check_partition() { - send_stats "Check partition status" - read -e -p "Please enter the partition name to check (for example sda1):" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # Check if the partition exists + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "The partition does not exist!" + echo "分区不存在!" return fi - # Check partition status - echo "Check partition /dev/$PARTITIONStatus:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# Main Menu +# 主菜单 disk_manager() { - send_stats "Hard disk management function" + send_stats "硬盘管理功能" while true; do clear - echo "Hard disk partition management" - echo -e "${gl_huang}This function is internally tested during the test period, please do not use it in the production environment.${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. Mount the partition 2. Uninstall the partition 3. View mounted partition" - echo "4. Format the partition 5. Check the partition status" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6145,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Press Enter to continue..." + read -e -p "按回车键继续..." done } -# Show task list +# 显示任务列表 list_tasks() { - echo "Saved synchronization tasks:" + echo "已保存的同步任务:" echo "---------------------------------" awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE" echo "---------------------------------" } -# Add a new task +# 添加新任务 add_task() { - send_stats "Add a new synchronization task" - echo "Create a new synchronization task example:" - echo "- Task name: backup_www" - echo "- Local Directory: /var/www" - echo "- Remote address: user@192.168.1.100" - echo "- Remote Directory: /backup/www" - echo "- Port number (default 22)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/www" + echo " - 端口号 (默认 22)" echo "---------------------------------" - read -e -p "Please enter the task name:" name - read -e -p "Please enter the local directory:" local_path - read -e -p "Please enter the remote directory:" remote_path - read -e -p "Please enter the remote user @IP:" remote - read -e -p "Please enter the SSH port (default 22):" port + 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 "Please select the authentication method:" - echo "1. Password" - echo "2. Key" - read -e -p "Please select (1/2):" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "Please enter your password:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "Please paste the key content (press press Enter twice after pasting):" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # If the input is empty and the key content already contains the beginning, the input ends + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or the key content has been entered, continue to add + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi done - # Check if it is the key content + # 检查是否是密钥内容 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" @@ -6211,63 +6210,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "Invalid key content!" + echo "无效的密钥内容!" return fi ;; *) - echo "Invalid choice!" + echo "无效的选择!" return ;; esac - echo "Please select the synchronization mode:" - echo "1. Standard mode (-avz)" - echo "2. Delete the target file (-avz --delete)" - read -e -p "Please select (1/2):" mode + 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 "Invalid selection, use default -avz"; options="-avz" ;; + *) 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 "Task saved!" + echo "任务已保存!" } -# Delete a task +# 删除任务 delete_task() { - send_stats "Delete synchronization tasks" - read -e -p "Please enter the task number to delete:" num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "Error: The corresponding task was not found." + echo "错误:未找到对应的任务。" return fi IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" - # If the task is using a key file, delete the key file + # 如果任务使用的是密钥文件,则删除该密钥文件 if [[ "$auth_method" == "key" && "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi sed -i "${num}d" "$CONFIG_FILE" - echo "Task deleted!" + echo "任务已删除!" } run_task() { - send_stats "Perform synchronization tasks" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # Analyze parameters + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6277,51 @@ run_task() { num="$1" fi - # If there is no incoming task number, prompt the user to enter + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "Please enter the task number to be executed:" num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "Error: The task was not found!" + echo "错误: 未找到该任务!" return fi IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" - # Adjust source and target path according to synchronization direction + # 根据同步方向调整源和目标路径 if [[ "$direction" == "pull" ]]; then - echo "Pulling synchronization to local:$remote:$local_path -> $remote_path" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "Push synchronization to the remote end:$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # Add SSH connection common parameters + # 添加 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 "Error: sshpass is not installed, please install sshpass first." - echo "Installation method:" + 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 - # Check whether the key file exists and whether the permissions are correct + # 检查密钥文件是否存在和权限是否正确 if [[ ! -f "$password_or_key" ]]; then - echo "Error: The key file does not exist:$password_or_key" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "Warning: The key file permissions are incorrect, and are being repaired..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6330,32 +6329,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "Synchronization is complete!" + echo "同步完成!" else - echo "Synchronization failed! Please check the following:" - echo "1. Is the network connection normal?" - echo "2. Is the remote host accessible?" - echo "3. Is the authentication information correct?" - echo "4. Do local and remote directories have correct access permissions" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# Create a timed task +# 创建定时任务 schedule_task() { - send_stats "Add synchronization timing tasks" + send_stats "添加同步定时任务" - read -e -p "Please enter the task number to be synchronized regularly:" num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "Error: Please enter a valid task number!" + echo "错误: 请输入有效的任务编号!" return fi - echo "Please select the timed execution interval:" - echo "1) Execute once an hour" - echo "2) Perform once a day" - echo "3) Execute once a week" - read -e -p "Please enter options (1/2/3):" interval + 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="" @@ -6363,66 +6362,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "Error: Please enter a valid option!" ; return ;; + *) echo "错误: 请输入有效的选项!" ; return ;; esac local cron_job="$cron_time k rsync_run $num" local cron_job="$cron_time k rsync_run $num" - # Check if the same task already exists + # 检查是否已存在相同任务 if crontab -l | grep -q "k rsync_run $num"; then - echo "Error: The timing synchronization of this task already exists!" + echo "错误: 该任务的定时同步已存在!" return fi - # Create a crontab to the user + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "The timing task has been created:$cron_job" + echo "定时任务已创建: $cron_job" } -# View scheduled tasks +# 查看定时任务 view_tasks() { - echo "Current timing tasks:" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# Delete timing tasks +# 删除定时任务 delete_task_schedule() { - send_stats "Delete synchronization timing tasks" - read -e -p "Please enter the task number to delete:" num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "Error: Please enter a valid task number!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "Deleted task number$numTiming tasks" + echo "已删除任务编号 $num 的定时任务" } -# Task Management Main Menu +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync remote synchronization tool" - echo "Synchronization between remote directories supports incremental synchronization, efficient and stable." + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. Create a new task 2. Delete a task" - echo "3. Perform local synchronization to the remote end 4. Perform remote synchronization to the local end" - echo "5. Create a timing task 6. Delete a timing task" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6430,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "Invalid selection, please try again." ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "Press Enter to continue..." + read -e -p "按回车键继续..." done } @@ -6448,7 +6447,7 @@ rsync_manager() { linux_ps() { clear - send_stats "System information query" + send_stats "系统信息查询" ip_address @@ -6498,41 +6497,41 @@ linux_ps() { echo "" - echo -e "System information query" + echo -e "系统信息查询" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Host Name:${gl_bai}$hostname" - echo -e "${gl_kjlan}System version:${gl_bai}$os_info" - echo -e "${gl_kjlan}Linux version:${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${gl_bai}$kernel_version" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}CPU architecture:${gl_bai}$cpu_arch" - echo -e "${gl_kjlan}CPU model:${gl_bai}$cpu_info" - echo -e "${gl_kjlan}Number of CPU cores:${gl_bai}$cpu_cores" - echo -e "${gl_kjlan}CPU frequency:${gl_bai}$cpu_freq" + 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 occupancy:${gl_bai}$cpu_usage_percent%" - echo -e "${gl_kjlan}System load:${gl_bai}$load" - echo -e "${gl_kjlan}Physical memory:${gl_bai}$mem_info" - echo -e "${gl_kjlan}Virtual memory:${gl_bai}$swap_info" - echo -e "${gl_kjlan}Hard disk occupation:${gl_bai}$disk_info" + 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}Total Receive:${gl_bai}$rx" - echo -e "${gl_kjlan}Total send:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Network algorithm:${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Operator:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4 address:${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6 address:${gl_bai}$ipv6_address" + echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" fi - echo -e "${gl_kjlan}DNS address:${gl_bai}$dns_addresses" - echo -e "${gl_kjlan}Geographical location:${gl_bai}$country $city" - echo -e "${gl_kjlan}System time:${gl_bai}$timezone $current_time" + 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}Runtime:${gl_bai}$runtime" + echo -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6545,111 +6544,111 @@ linux_tools() { while true; do clear - # send_stats "Basic Tools" - echo -e "Basic tools" + # send_stats "基础工具" + echo -e "基础工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo super management permission tool${gl_kjlan}4. ${gl_bai}socat communication connection tool" - echo -e "${gl_kjlan}5. ${gl_bai}htop system monitoring tool${gl_kjlan}6. ${gl_bai}iftop network traffic monitoring tool" - echo -e "${gl_kjlan}7. ${gl_bai}unzip ZIP compression decompression tool${gl_kjlan}8. ${gl_bai}tar GZ compression decompression tool" - echo -e "${gl_kjlan}9. ${gl_bai}tmux multi-channel background running tool${gl_kjlan}10. ${gl_bai}ffmpeg video encoding live streaming tool" + echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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 modern monitoring tools${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}range file management tool" - echo -e "${gl_kjlan}13. ${gl_bai}ncdu disk occupation viewing tool${gl_kjlan}14. ${gl_bai}fzf global search tool" - echo -e "${gl_kjlan}15. ${gl_bai}vim text editor${gl_kjlan}16. ${gl_bai}nano text editor${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git version control system" + echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}The Matrix Screen Guarantee${gl_kjlan}22. ${gl_bai}Train screen security" - echo -e "${gl_kjlan}26. ${gl_bai}Tetris game${gl_kjlan}27. ${gl_bai}Snake-eating game" - echo -e "${gl_kjlan}28. ${gl_bai}Space Invader Game" + 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}Install all${gl_kjlan}32. ${gl_bai}All installations (excluding screen savers and games)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${gl_bai}Uninstall all" + 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}Install the specified tool${gl_kjlan}42. ${gl_bai}Uninstall the specified tool" + echo -e "${gl_kjlan}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" curl --help - send_stats "Install curl" + send_stats "安装curl" ;; 2) clear install wget clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" wget --help - send_stats "Install wget" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" sudo --help - send_stats "Install sudo" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" socat -h - send_stats "Install socat" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "Install htop" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "Install iftop" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" unzip - send_stats "Install unzip" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" tar --help - send_stats "Install tar" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" tmux --help - send_stats "Install tmux" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "The tool has been installed and the usage method is as follows:" + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "Install ffmpeg" + send_stats "安装ffmpeg" ;; 11) @@ -6657,7 +6656,7 @@ linux_tools() { install btop clear btop - send_stats "Install btop" + send_stats "安装btop" ;; 12) clear @@ -6666,7 +6665,7 @@ linux_tools() { clear ranger cd ~ - send_stats "Install ranger" + send_stats "安装ranger" ;; 13) clear @@ -6675,7 +6674,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "Install ncdu" + send_stats "安装ncdu" ;; 14) clear @@ -6684,7 +6683,7 @@ linux_tools() { clear fzf cd ~ - send_stats "Install fzf" + send_stats "安装fzf" ;; 15) clear @@ -6693,7 +6692,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "Install vim" + send_stats "安装vim" ;; 16) clear @@ -6702,7 +6701,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "Install nano" + send_stats "安装nano" ;; @@ -6713,7 +6712,7 @@ linux_tools() { clear git --help cd ~ - send_stats "Install git" + send_stats "安装git" ;; 21) @@ -6721,67 +6720,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "Install cmatrix" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "Install sl" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "Install bastet" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "Install nsnake" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "Install ninvaders" + send_stats "安装ninvaders" ;; 31) clear - send_stats "Install all" + 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 all (excluding games and screen savers)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "Uninstall all" + send_stats "全部卸载" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git ;; 41) clear - read -e -p "Please enter the installed tool name (wget curl sudo htop):" installname + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "Install the specified software" + send_stats "安装指定软件" ;; 42) clear - read -e -p "Please enter the uninstalled tool name (htop ufw tmux cmatrix):" removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "Uninstall the specified software" + send_stats "卸载指定软件" ;; 0) @@ -6789,7 +6788,7 @@ linux_tools() { ;; *) - echo "Invalid input!" + echo "无效的输入!" ;; esac break_end @@ -6803,27 +6802,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr management" + 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 "Current TCP blocking algorithm:$congestion_algorithm $queue_algorithm" + echo "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" - echo "BBR Management" + echo "BBR管理" echo "------------------------" - echo "1. Turn on BBRv3 2. Turn off BBRv3 (restarts)" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "Alpine enable bbr3" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6868,18 +6867,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}Current backup list:${NC}" - ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "No backup" + echo -e "${BLUE}当前备份列表:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } # ---------------------------- - # Backup + # 备份 # ---------------------------- backup_docker() { - echo -e "${YELLOW}Backing up Docker container...${NC}" - read -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers + send_stats "Docker备份" + + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + docker ps --format '{{.Names}}' + read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip install_docker @@ -6890,7 +6892,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}No container found${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6898,28 +6900,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# Automatically generated restore script" >> "$RESTORE_SCRIPT" + echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" - # Record the path of the packaged Compose project to avoid duplicate packaging + # 记录已打包过的 Compose 项目路径,避免重复打包 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}Backup container:$c${NC}" + echo -e "${GREEN}备份容器: $c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}Detected$cYes docker-compose container${NC}" + echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "The compose directory is not detected, please enter the path manually:" project_dir + read -p "未检测到 compose 目录,请手动输入路径: " project_dir fi - # If the Compose project has been packaged, skip it + # 如果该 Compose 项目已经打包过,跳过 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose project [$project_name] Backed up, skip duplicate packaging...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6927,136 +6929,137 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose recovery:$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose project [$project_name] Packed:${project_dir}${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" else - echo -e "${RED}docker-compose.yml not found, skip this container...${NC}" + echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" fi else - # Normal container backup volume + # 普通容器备份卷 local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "Packing rolls:$path" + echo "打包卷: $path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done - # port + # 端口 local PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # Environment variables + # 环境变量 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # Volume Mapping + # 卷映射 local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # Mirror + # 镜像 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\n# Restore container:$c" >> "$RESTORE_SCRIPT" + echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # Backup all files under /home/docker (excluding subdirectories) + # 备份 /home/docker 下的所有文件(不含子目录) if [ -d "/home/docker" ]; then - echo -e "${BLUE}Backup the files under /home/docker...${NC}" - find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - - echo -e "${GREEN}The file under /home/docker has been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - + echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}Backup is complete:${BACKUP_DIR}${NC}" - echo -e "${GREEN}Available restore scripts:${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # reduction + # 还原 # ---------------------------- restore_docker() { - list_backups - read -p "Please enter the backup directory to restore:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } - echo -e "${BLUE}Start the restore operation...${NC}" + send_stats "Docker还原" + read -p "请输入要还原的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + echo -e "${BLUE}开始执行还原操作...${NC}" install tar jq gzip install_docker - # ------------------------- + # --------- 优先还原 Compose 项目 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "The original path was not found, please enter the restore directory path:" original_path + [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path - # Check if the container for the compose project is already running + # 检查该 compose 项目的容器是否已经在运行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose project [$project_name] There is already a container running, skip restore...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" continue fi - read -p "Confirm restoring the Compose project [$project_name] to path [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "Please enter a new restore path:" original_path + read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose project [$project_name] Decompressed to:$original_path${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose project [$project_name] Restore is complete!${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" fi done - # ------------------------- - echo -e "${BLUE}Check and restore a normal Docker container...${NC}" + # --------- 继续还原普通容器 --------- + echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}Processing container:$container${NC}" + echo -e "${GREEN}处理容器: $container${NC}" - # Check if the container already exists and is running + # 检查容器是否已经存在且正在运行 if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}Container [$container] is running, skip restore...${NC}" + echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information was not found, skip:$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } - # Port Mapping + # 端口映射 PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # Environment variables + # 环境变量 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # Volume Mapping + Volume Data Recovery + # 卷映射 + 卷数据恢复 VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7067,32 +7070,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "Recover volume data:$VOL_SRC" + echo "恢复卷数据: $VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # Delete existing but not running containers + # 删除已存在但未运行的容器 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}Container [$container] Exist but not running, delete the old container...${NC}" + echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" docker rm -f "$container" fi - # Start the container - echo "Execute the restore command: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # 启动容器 + echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for normal containers was found${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" - # Restore the file under /home/docker + # 还原 /home/docker 下的文件 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}Restore the file under /home/docker...${NC}" + echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}The file under /home/docker has been restored${NC}" + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else - echo -e "${YELLOW}No backup of the file under /home/docker was found, skip...${NC}" + echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" fi @@ -7100,66 +7103,68 @@ docker_ssh_migration() { # ---------------------------- - # migrate + # 迁移 # ---------------------------- migrate_docker() { - ensure_jq - list_backups - read -p "Please enter the backup directory to migrate:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } + send_stats "Docker迁移" + install jq + read -p "请输入要迁移的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } - read -p "Target server IP:" TARGET_IP - read -p "Target server SSH username:" TARGET_USER + read -p "目标服务器IP: " TARGET_IP + read -p "目标服务器SSH用户名: " TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}Transfer backup...${NC}" + echo -e "${YELLOW}传输备份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in with a key + # 使用密钥登录 scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # Delete backup + # 删除备份 # ---------------------------- delete_backup() { - list_backups - read -p "Please enter the backup directory to delete:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } + send_stats "Docker备份文件删除" + read -p "请输入要删除的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}Deleted backup:${BACKUP_DIR}${NC}" + echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" } # ---------------------------- - # Main Menu + # 主菜单 # ---------------------------- main_menu() { + send_stats "Docker备份迁移还原" while true; do clear echo "------------------------" - echo -e "Docker backup/migration/restore tool" + echo -e "Docker备份/迁移/还原工具" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. Backup the docker project" - echo -e "2. Migrate docker projects" - echo -e "3. Restore the docker project" - echo -e "4. Delete the backup file of the docker project" + echo -e "1. 备份docker项目" + echo -e "2. 迁移docker项目" + echo -e "3. 还原docker项目" + echo -e "4. 删除docker项目的备份文件" echo "------------------------" - echo -e "0. Return to the previous menu" + echo -e "0. 返回上一级菜单" echo "------------------------" - read -p "Please select:" choice + read -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}Invalid option${NC}" ;; + *) echo -e "${RED}无效选项${NC}" ;; esac + break_end done } @@ -7174,38 +7179,38 @@ linux_docker() { while true; do clear - # send_stats "docker management" - echo -e "Docker Management" + # send_stats "docker管理" + echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Install and update Docker environment${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}View Docker global status${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker container management${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker image management" - echo -e "${gl_kjlan}5. ${gl_bai}Docker Network Management" - echo -e "${gl_kjlan}6. ${gl_bai}Docker volume management" + echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}Clean useless docker containers and mirror network data volumes" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}8. ${gl_bai}Replace Docker source" - echo -e "${gl_kjlan}9. ${gl_bai}Edit daemon.json file" + 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}Enable Docker-ipv6 access" - echo -e "${gl_kjlan}12. ${gl_bai}Close Docker-ipv6 access" + 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}19. ${gl_bai}Backup/Migration/Restore Docker Environment" - echo -e "${gl_kjlan}20. ${gl_bai}Uninstall the Docker environment" + echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "Install docker environment" + send_stats "安装docker环境" install_add_docker ;; @@ -7216,22 +7221,22 @@ linux_docker() { 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 "Docker global status" - echo "Docker version" + send_stats "docker全局状态" + echo "Docker版本" docker -v docker compose version echo "" - echo -e "Docker image:${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker container:${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker volume:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker Network:${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7246,8 +7251,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker Network Management" - echo "Docker network list" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7271,36 +7276,36 @@ linux_docker() { done echo "" - echo "Network operation" + echo "网络操作" echo "------------------------" - echo "1. Create a network" - echo "2. Join the Internet" - echo "3. Exit the network" - echo "4. Delete the network" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Create a network" - read -e -p "Set a new network name:" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "Join the Internet" - read -e -p "Join the network name:" dockernetwork - read -e -p "Those containers are added to the network (multiple container names are separated by spaces):" dockernames + send_stats "加入网络" + read -e -p "加入网络名: " dockernetwork + read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network connect $dockernetwork $dockername done ;; 3) - send_stats "Join the Internet" - read -e -p "Exit network name:" dockernetwork - read -e -p "Those containers exit the network (multiple container names are separated by spaces):" dockernames + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7309,8 +7314,8 @@ linux_docker() { ;; 4) - send_stats "Delete the network" - read -e -p "Please enter the network name to delete:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7324,29 +7329,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker volume management" - echo "Docker volume list" + send_stats "Docker卷管理" + echo "Docker卷列表" docker volume ls echo "" - echo "Volume operation" + echo "卷操作" echo "------------------------" - echo "1. Create a new volume" - echo "2. Delete the specified volume" - echo "3. Delete all volumes" + echo "1. 创建新卷" + echo "2. 删除指定卷" + echo "3. 删除所有卷" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "Create a new volume" - read -e -p "Set the new volume name:" dockerjuan + send_stats "新建卷" + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "Enter the delete volume name (please separate multiple volume names with spaces):" dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7355,7 +7360,7 @@ linux_docker() { ;; 3) - send_stats "Delete all volumes" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7364,7 +7369,7 @@ linux_docker() { [Nn]) ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7377,7 +7382,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker cleaning" + send_stats "Docker清理" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7386,13 +7391,13 @@ linux_docker() { [Nn]) ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear - send_stats "Docker source" + send_stats "Docker源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7408,13 +7413,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 open" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 level" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7425,7 +7430,7 @@ linux_docker() { 20) clear - send_stats "Docker uninstall" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7437,7 +7442,7 @@ linux_docker() { [Nn]) ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7446,7 +7451,7 @@ linux_docker() { kejilion ;; *) - echo "Invalid input!" + echo "无效的输入!" ;; esac break_end @@ -7463,151 +7468,151 @@ linux_test() { while true; do clear - # send_stats "Test script collection" - echo -e "Test script collection" + # send_stats "测试脚本合集" + echo -e "测试脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}IP and unlock status detection" - echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT Unlock Status Detection" - echo -e "${gl_kjlan}2. ${gl_bai}Region streaming media unlock test" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu streaming media unlock detection" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP quality physical examination script${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}Network speed measurement" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace three network backhaul delay routing test" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace Three-network backhaul line test" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed three-net speed measurement" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace Specifies IP backhaul test script" - echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three-network line test" - echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunction speed test script" - echo -e "${gl_kjlan}18. ${gl_bai}NetQuality Network Quality Physical Examination Script${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}网络线路测速" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}Hardware performance testing" - echo -e "${gl_kjlan}21. ${gl_bai}yabs performance testing" - echo -e "${gl_kjlan}22. ${gl_bai}iicu/gb5 CPU performance test script" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}Comprehensive test" - echo -e "${gl_kjlan}31. ${gl_bai}bench performance test" - echo -e "${gl_kjlan}32. ${gl_bai}Spiritysdx Fusion Monster Review${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}综合性测试" + echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" + echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT unlock status detection" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region streaming media unlock test" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu streaming media unlock detection" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP quality physical examination script" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "Besttrace three network backhaul delay routing test" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace three network return line test" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed three-net speed measurement" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace fast backhaul test script" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace specifies IP backhaul test script" - echo "List of IPs that can be referenced" + send_stats "nxtrace指定IP回程测试脚本" + echo "可参考的IP列表" echo "------------------------" - echo "Beijing Telecom: 219.141.136.12" - echo "Beijing Unicom: 202.106.50.1" - echo "Beijing Mobile: 221.179.155.161" - echo "Shanghai Telecom: 202.96.209.133" - echo "Shanghai Unicom: 210.22.97.1" - echo "Shanghai Mobile: 211.136.112.200" - echo "Guangzhou Telecom: 58.60.188.222" - echo "Guangzhou Unicom: 210.21.196.6" - echo "Guangzhou Mobile: 120.196.165.24" - echo "Chengdu Telecom: 61.139.2.69" - echo "Chengdu Unicom: 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 "北京电信: 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "Enter a specified IP:" testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020 three-network line test" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc multifunction speed test script" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "Network quality test script" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs performance testing" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "iicu/gb5 CPU performance test script" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench performance test" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "Spiritysdx Fusion Monster Review" + 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 ;; @@ -7617,7 +7622,7 @@ linux_test() { ;; *) - echo "Invalid input!" + echo "无效的输入!" ;; esac break_end @@ -7633,51 +7638,51 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud Script Collection" - echo -e "Oracle Cloud Script Collection" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Install idle machine active script" - echo -e "${gl_kjlan}2. ${gl_bai}Uninstall idle machine active script" + 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 reinstall system script" - echo -e "${gl_kjlan}4. ${gl_bai}Detective R start script" - echo -e "${gl_kjlan}5. ${gl_bai}Turn on ROOT password login mode" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6 recovery tool" + echo -e "${gl_kjlan}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "Active script: CPU occupies 10-20% memory occupies 20%" - read -e -p "Are you sure to install it? (Y/N):" choice + echo "活跃脚本: CPU占用10-20% 内存占用20% " + read -e -p "确定安装吗?(Y/N): " choice case "$choice" in [Yy]) install_docker - # Set default values + # 设置默认值 local DEFAULT_CPU_CORE=1 local DEFAULT_CPU_UTIL="10-20" local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # Prompt the user to enter the number of CPU cores and occupancy percentage, and if entered, use the default value. - read -e -p "Please enter the number of CPU cores [default:$DEFAULT_CPU_CORE]: " cpu_core + # 提示用户输入CPU核心数和占用百分比,如果回车则使用默认值 + read -e -p "请输入CPU核心数 [默认: $DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} - read -e -p "Please enter the CPU usage percentage range (for example, 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util + read -e -p "请输入CPU占用百分比范围(例如10-20) [默认: $DEFAULT_CPU_UTIL]: " cpu_util local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL} - read -e -p "Please enter the memory usage percentage [default:$DEFAULT_MEM_UTIL]: " mem_util + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "Please enter the Speedtest interval time (seconds) [default:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # Run Docker container + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7685,14 +7690,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloud Installation Active Script" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7700,20 +7705,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloud Uninstall Active Script" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "Reinstall the system" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." - read -e -p "Are you sure to continue? (Y/N):" choice + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) while true; do - read -e -p "Please select the system to reinstall: 1. Debian12 | 2. Ubuntu20.04:" sys_choice + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7725,28 +7730,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "Invalid selection, please re-enter." + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "Please enter your reinstalled password:" vpspasswd + 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 Reinstall System Script" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) - echo "Canceled" + echo "已取消" ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "This feature is in the development stage, so stay tuned!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7756,15 +7761,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "This function is provided by the master jhb, thanks to him!" - send_stats "ipv6 fix" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "Invalid input!" + echo "无效的输入!" ;; esac break_end @@ -7785,7 +7790,7 @@ docker_tato() { if command -v docker &> /dev/null; then echo -e "${gl_kjlan}------------------------" - echo -e "${gl_lv}The environment has been installed${gl_bai}container:${gl_lv}$container_count${gl_bai}Mirror:${gl_lv}$image_count${gl_bai}network:${gl_lv}$network_count${gl_bai}roll:${gl_lv}$volume_count${gl_bai}" + 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 } @@ -7806,7 +7811,7 @@ 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}The environment is installed${gl_bai}Site:$outputdatabase:$db_output" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7834,31 +7839,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP website building" - echo -e "${gl_huang}LDNMP website building" + # send_stats "LDNMP建站" + echo -e "${gl_huang}LDNMP建站" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}Install LDNMP environment${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}Install WordPress${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Install Discuz Forum${gl_huang}4. ${gl_bai}Install the Kadao Cloud Desktop" - echo -e "${gl_huang}5. ${gl_bai}Install Apple CMS Film and Television Station${gl_huang}6. ${gl_bai}Install a Unicorn Digital Card Network" - echo -e "${gl_huang}7. ${gl_bai}Install the flarum forum website${gl_huang}8. ${gl_bai}Install typecho lightweight blog website" - echo -e "${gl_huang}9. ${gl_bai}Install LinkStack Shared Link Platform${gl_huang}20. ${gl_bai}Customize dynamic site" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" - echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy - domain name" - echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" - echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" - echo -e "${gl_huang}30. ${gl_bai}Customize static site" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" + echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up the entire site data" - echo -e "${gl_huang}33. ${gl_bai}Timed remote backup${gl_huang}34. ${gl_bai}Restore the entire site data" + 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}Protect LDNMP environment${gl_huang}36. ${gl_bai}Optimize LDNMP environment" - echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall LDNMP environment" + 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}Return to main menu" + echo -e "${gl_huang}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7872,10 +7877,10 @@ linux_ldnmp() { 3) clear - # Discuz Forum + # Discuz论坛 webname="Discuz论坛" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,21 +7903,21 @@ linux_ldnmp() { ldnmp_web_on - echo "Database address: mysql" - echo "Database name:$dbname" - echo "username:$dbuse" - echo "password:$dbusepasswd" - echo "Table prefix: discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; 4) clear - # Kedao Cloud Desktop + # 可道云桌面 webname="可道云桌面" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,20 +7939,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "Database address: mysql" - echo "username:$dbuse" - echo "password:$dbusepasswd" - echo "Database name:$dbname" - echo "redis host: redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # Apple CMS + # 苹果CMS webname="苹果CMS" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7978,24 @@ linux_ldnmp() { ldnmp_web_on - echo "Database address: mysql" - echo "Database port: 3306" - echo "Database name:$dbname" - echo "username:$dbuse" - echo "password:$dbusepasswd" - echo "Database prefix: mac_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "Log in to the background address after installation is successful" + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # One-legged counting card + # 独脚数卡 webname="独脚数卡" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,34 +8016,34 @@ linux_ldnmp() { ldnmp_web_on - echo "Database address: mysql" - echo "Database port: 3306" - echo "Database name:$dbname" - echo "username:$dbuse" - echo "password:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" - echo "redis address: redis" - echo "Redis password: Not filled in by default" - echo "Redis port: 6379" + echo "redis地址: redis" + echo "redis密码: 默认不填写" + echo "redis端口: 6379" echo "" - echo "Website url: https://$yuming" - echo "Background login path: /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "Username: admin" - echo "Password: admin" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "If red error0 appears in the upper right corner when logging in, please use the following command:" - echo "I am also very angry that the unicorn number card is so troublesome, and there will be such problems!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # Flarum Forum + # flarum论坛 webname="flarum论坛" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8080,12 @@ linux_ldnmp() { ldnmp_web_on - echo "Database address: mysql" - echo "Database name:$dbname" - echo "username:$dbuse" - echo "password:$dbusepasswd" - echo "Table prefix: flarum_" - echo "Administrator information is set by yourself" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -8088,8 +8093,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8113,11 +8118,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "Database prefix: typecho_" - echo "Database address: mysql" - echo "username:$dbuse" - echo "password:$dbusepasswd" - echo "Database name:$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -8126,8 +8131,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,18 +8157,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "Database address: mysql" - echo "Database port: 3306" - echo "Database name:$dbname" - echo "username:$dbuse" - echo "password:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8180,10 +8185,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] Upload PHP source code" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" - read -e -p "You can also enter the download link to remotely download the source code package. Directly press Enter to skip remote download:" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8198,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] The path where index.php is located" + 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 "Please enter the path of index.php, similar to (/home/web/html/$yuming/wordpress/): " index_lujing + 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}] Please select the PHP version" + echo -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1. The latest version of php | 2. php7.4:" pho_v + 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 @@ -8217,15 +8222,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "Invalid selection, please re-enter." + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] Install the specified extension" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "Installed extensions" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8235,25 +8240,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] Edit site configuration" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - echo "Press any key to continue, and you can set the site configuration in detail, such as pseudo-static contents, etc." + 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}] Database Management" + echo -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1. I build a new site 2. I build an old site and have a database backup:" use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8263,10 +8268,10 @@ linux_ldnmp() { 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 "Database import table data" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "Database import completed" + echo "数据库导入完成" ;; *) echo @@ -8278,12 +8283,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "Database address: mysql" - echo "Database name:$dbname" - echo "username:$dbuse" - echo "password:$dbusepasswd" - echo "Table prefix:$prefix" - echo "Administrator login information is set by yourself" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -8296,10 +8301,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "Please enter the jump domain name:" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -8321,7 +8326,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ ports have been blocked from accessing the service" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8332,11 +8337,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "Domain name format:${gl_huang}google.com${gl_bai}" - read -e -p "Please enter your anti-generation domain name:" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8356,8 +8361,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8379,8 +8384,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8397,8 +8402,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8431,8 +8436,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "Install$webname" - echo "Start deployment$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8449,10 +8454,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] Upload static source code" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" - read -e -p "You can also enter the download link to remotely download the source code package. Directly press Enter to skip remote download:" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8462,12 +8467,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] The path where index.html is located" + 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 "Please enter the path to index.html, similar to (/home/web/html/$yuming/index/): " index_lujing + 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 @@ -8492,21 +8497,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP environment backup" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}Backing up$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "The backup file has been created: /home/$backup_filename" - read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "Please enter the remote server IP:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "Error: Please enter the remote server IP." + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8514,9 +8519,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "The file has been transferred to the remote server home directory." + echo "文件已传送至远程服务器home目录。" else - echo "The file to be transferred was not found." + echo "未找到要传送的文件。" fi break ;; @@ -8524,7 +8529,7 @@ linux_ldnmp() { break ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8532,9 +8537,9 @@ linux_ldnmp() { 33) clear - send_stats "Timed remote backup" - read -e -p "Enter the remote server IP:" useip - read -e -p "Enter the remote server password:" usepasswd + 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 @@ -8544,18 +8549,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. Weekly backup 2. Daily backup" - read -e -p "Please enter your selection:" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "Select the day of the week for your weekly backup (0-6, 0 represents Sunday):" weekday + 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 "Select the time for daily backup (hours, 0-23):" hour + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8569,19 +8574,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP environment restoration" - echo "Available site backups" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename if [ "$filename" == "0" ]; then break_end linux_ldnmp fi - # If the user does not enter the file name, use the latest compressed package + # 如果用户没有输入文件名,使用最新的压缩包 if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8591,7 +8596,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8600,7 +8605,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "No compression package was found." + echo "没有找到压缩包。" fi ;; @@ -8618,11 +8623,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "Update LDNMP environment" - echo "Update LDNMP environment" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "Discover new version of components" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8642,13 +8647,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. Update nginx 2. Update mysql 3. Update php 4. Update redis" + echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5. Update the complete environment" + echo "5. 更新完整环境" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8657,7 +8662,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "Please enter${ldnmp_pods}Version number (such as: 8.0 8.3 8.4 9.0) (Enter to get the latest version):" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8668,13 +8673,13 @@ linux_ldnmp() { 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 "renew$ldnmp_pods" - echo "renew${ldnmp_pods}Finish" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 3) local ldnmp_pods="php" - read -e -p "Please enter${ldnmp_pods}Version number (such as: 7.4 8.0 8.1 8.2 8.3) (Enter to get the latest version):" version + 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 @@ -8707,8 +8712,8 @@ linux_ldnmp() { docker restart $ldnmp_pods > /dev/null 2>&1 cp /home/web/docker-compose1.yml /home/web/docker-compose.yml - send_stats "renew$ldnmp_pods" - echo "renew${ldnmp_pods}Finish" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 4) @@ -8719,15 +8724,15 @@ linux_ldnmp() { docker compose up -d --force-recreate $ldnmp_pods docker restart $ldnmp_pods > /dev/null 2>&1 restart_redis - send_stats "renew$ldnmp_pods" - echo "renew${ldnmp_pods}Finish" + 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 "Completely update the LDNMP environment" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8753,7 +8758,7 @@ linux_ldnmp() { 38) root_use - send_stats "Uninstall LDNMP environment" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8767,7 +8772,7 @@ linux_ldnmp() { ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8777,7 +8782,7 @@ linux_ldnmp() { ;; *) - echo "Invalid input!" + echo "无效的输入!" esac break_end @@ -8797,12 +8802,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "Application Market" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # Set the color with loop + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8811,67 +8816,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Official version of Baota Panel${gl_kjlan}2. ${color2}aaPanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager Visual Panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" - echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB Offline BT Magnetic Download Panel" - echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multiplayer online chat system" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendao project management software${gl_kjlan}12. ${color12}Qinglong Panel Timed Task Management Platform" - echo -e "${gl_kjlan}13. ${color13}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}Simple picture bed picture management program" - echo -e "${gl_kjlan}15. ${color15}emby multimedia management system${gl_kjlan}16. ${color16}Speedtest speed test panel" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome Adware${gl_kjlan}18. ${color18}onlyoffice online office OFFICE" - echo -e "${gl_kjlan}19. ${color19}Thunder Pool WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" - echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop Remote Desktop Web Edition${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed ​​Speed ​​Test Tool" - echo -e "${gl_kjlan}29. ${color29}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF tool collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel Navigation Panel${gl_kjlan}34. ${color34}Pingvin-Share file sharing platform" - echo -e "${gl_kjlan}35. ${color35}Minimalist circle of friends${gl_kjlan}36. ${color36}LobeChatAI Chat Aggregation Website" - echo -e "${gl_kjlan}37. ${color37}MyIP Toolbox${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist family bucket" - echo -e "${gl_kjlan}39. ${color39}Bililive live broadcast recording tool${gl_kjlan}40. ${color40}webssh web version SSH connection tool" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}Mouse Management Panel${gl_kjlan}42. ${color42}Nexte remote connection tool" - echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk Remote Desk (Relay)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}Prometheus Monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tool" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE Chicken Panel${gl_kjlan}52. ${color52}DPanel Container Management Panel" - echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" - echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" - echo -e "${gl_kjlan}65. ${color65}n8n Automation Workflow Platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" - echo -e "${gl_kjlan}67. ${color67}ddns-go Dynamic DNS Management Tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL Certificate Management Platform" - echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot Chat Robot Framework" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome Private Music Server${gl_kjlan}72. ${color72}bitwarden Password Manager${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV Private Film and Television${gl_kjlan}74. ${color74}MoonTV Private Movie" - echo -e "${gl_kjlan}75. ${color75}Melody Music Elf${gl_kjlan}76. ${color76}Online DOS old games" - echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki Intelligent Document Management System" - echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" - echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tools" - echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" - echo -e "${gl_kjlan}87. ${color87}SyncTV movie watching artifact${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser File Manager" + echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice fi case $sub_choice in @@ -8990,6 +8998,9 @@ while true; do docker_rum() { + mkdir -p /home/docker/openlist + chmod -R 777 /home/docker/openlist + docker run -d \ --restart=always \ -v /home/docker/openlist:/opt/openlist/data \ @@ -9021,8 +9032,8 @@ while true; do docker_rum() { - read -e -p "Set login username:" admin - read -e -p "Set the login user password:" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9055,7 +9066,7 @@ while true; do ;; 7|nezha) clear - send_stats "Build Nezha" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9064,20 +9075,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezha Monitoring$check_docker $update_status" - echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" - echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. Use" + echo "1. 使用" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9134,7 +9145,7 @@ while true; do ;; 9|mail) - send_stats "Build a post office" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9144,43 +9155,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "Post Office Services$check_docker $update_status" - echo "poste.io is an open source mail server solution." - echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - echo "Port detection" + echo "端口检测" port=25 timeout=3 if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then - echo -e "${gl_lv}port$portCurrently available${gl_bai}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}port$portNot currently available${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "Access address:" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1. Install 2. Update 3. Uninstall" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "Please set the email domain name, for example, mail.yuming.com:" yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "Parse these DNS records first" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9190,7 +9201,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "Press any key to continue..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9209,9 +9220,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io has been installed" + echo "poste.io已经安装完成" echo "------------------------" - echo "You can access poste.io using the following address:" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -9234,9 +9245,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io has been installed" + echo "poste.io已经安装完成" echo "------------------------" - echo "You can access poste.io using the following address:" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -9247,7 +9258,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "应用已卸载" ;; *) @@ -9281,7 +9292,7 @@ while true; do clear ip_address - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -9291,7 +9302,7 @@ while true; do 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 has been installed" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -9301,7 +9312,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -9385,7 +9396,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -9399,7 +9410,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -9544,7 +9555,7 @@ while true; do ;; 19|safeline) - send_stats "Build a Thunder Pool" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9552,20 +9563,20 @@ while true; do while true; do check_docker_app clear - echo -e "Thunder Pool Service$check_docker" - echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." - echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. Install 2. Update 3. Reset Password 4. Uninstall" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9575,7 +9586,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "The Thunder Pool WAF panel has been installed" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9588,7 +9599,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Thunder Pool WAF panel has been updated" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9599,7 +9610,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9718,8 +9729,8 @@ while true; do docker_rum() { - read -e -p "Set login username:" admin - read -e -p "Set the login user password:" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10007,7 +10018,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="Official website introduction:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10060,7 +10071,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya Family Bucket" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10264,9 +10275,9 @@ while true; do prometheus_install clear ip_address - echo "Installed" + echo "已经安装完成" check_docker_app_ip - echo "The initial username and password are: admin" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10284,7 +10295,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -10371,7 +10382,7 @@ while true; do 51|pve) clear - send_stats "PVE Chicken" + send_stats "PVE开小鸡" 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 ;; @@ -10491,7 +10502,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -10506,7 +10517,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -10534,7 +10545,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -10549,7 +10560,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -10557,7 +10568,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -10578,17 +10589,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip - echo "Initial username: admin" - echo "Initial password: ChangeMe" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "The app has been updated" + echo "应用已更新" } @@ -10598,7 +10609,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -10645,7 +10656,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -10661,7 +10672,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -10923,7 +10934,7 @@ while true; do docker_rum() { - read -e -p "Set the LibreTV login password:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10957,9 +10968,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "Set login username:" admin - read -e -p "Set the login user password:" admin_password - read -e -p "Enter the authorization code:" shouquanma + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password + read -e -p "输入授权码: " shouquanma mkdir -p /home/docker/moontv @@ -10969,13 +10980,13 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -10989,7 +11000,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -11062,8 +11073,8 @@ while true; do docker_rum() { - read -e -p "Set login username:" app_use - read -e -p "Set login password:" app_passwd + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -11160,11 +11171,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # Download the official docker-compose and env files + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # Generate random keys and passwords + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11173,17 +11184,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # Add administrator account information + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # Start the container + # 启动容器 docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -11193,7 +11204,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # Keep the original variable + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11210,7 +11221,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -11260,7 +11271,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -11278,7 +11289,7 @@ while true; do docker_rum() { - read -e -p "set up${docker_name}The login key (sk-staring letters and numbers combinations) such as: sk-159kejilionyyds163:" app_passwd + read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11382,7 +11393,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -11395,7 +11406,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -11556,7 +11567,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "Create an initial user or administrator. Please set the following username and password and whether you are an administrator." + echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11608,7 +11619,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "Installed" + echo "已经安装完成" check_docker_app_ip } @@ -11622,7 +11633,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "The app has been uninstalled" + echo "应用已卸载" } docker_app_plus @@ -11661,24 +11672,282 @@ while true; do ;; + 93|dufs) + + local app_id="93" + local docker_name="dufs" + local docker_img="sigoden/dufs" + local docker_port=8093 + + docker_rum() { + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}:/data \ + -p ${docker_port}:5000 \ + ${docker_img} /data -A + + } + + local docker_describe="极简静态文件服务器,支持上传下载" + local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 94|gopeed) + + local app_id="94" + local docker_name="gopeed" + local docker_img="liwei2633/gopeed" + local docker_port=8094 + + docker_rum() { + + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}/downloads:/app/Downloads \ + -v /home/docker/${docker_name}/storage:/app/storage \ + -p ${docker_port}:9999 \ + ${docker_img} -u ${app_use} -p ${app_passwd} + + } + + local docker_describe="分布式高速下载工具,支持多种协议" + local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 95|paperless) + + local app_id="95" + + local app_name="paperless文档管理平台" + local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" + local app_url="视频介绍: https://docs.paperless-ngx.com/" + local docker_name="paperless-webserver-1" + local docker_port="8095" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/paperless + mkdir -p /home/docker/paperless/export + mkdir -p /home/docker/paperless/consume + cd /home/docker/paperless + + curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml + curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml + cd /home/docker/paperless + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/paperless/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/paperless/ && docker compose down --rmi all + rm -rf /home/docker/paperless + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + 97|wgs) + + local app_id="97" + local docker_name="wireguard" + local docker_img="lscr.io/linuxserver/wireguard:latest" + local docker_port=51820 + + docker_rum() { + + read -p "请输入组网的客户端数量 (默认 5): " COUNT + COUNT=${COUNT:-5} + + PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + + stop_containers_or_kill_process 51820 &>/dev/null + + ip_address + docker run -d \ + --name=wireguard \ + --network host \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e SERVERURL=${ipv4_address} \ + -e SERVERPORT=51820 \ + -e PEERS=${PEERS} \ + -e INTERNAL_SUBNET=10.13.13.0 \ + -e ALLOWEDIPS=10.13.13.0/24 \ + -e PERSISTENTKEEPALIVE_PEERS=all \ + -e LOG_CONFS=true \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules \ + --restart unless-stopped \ + lscr.io/linuxserver/wireguard:latest + + + sleep 3 + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + for f in "$d"/*.conf; do + grep -q "^PersistentKeepalive *= *25$" "$f" || \ + sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + done + done + ' + + docker exec -it wireguard bash -c ' + for d in /config/peer_*; do + cd "$d" || continue + conf_file=$(ls *.conf) + base_name="${conf_file%.conf}" + echo "生成二维码: $base_name.png" + qrencode -o "$base_name.png" < "$conf_file" + done + ' + + sleep 2 + docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + sleep 2 + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + sleep 2 + echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" + echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 98|wgc) + + local app_id="98" + local docker_name="wireguardc" + local docker_img="kjlion/wireguard:alpine" + local docker_port=51820 + + docker_rum() { + + mkdir -p /home/docker/wireguard/config/ + + local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CONFIG_FILE")" + + echo "请粘贴你的客户端配置,连续按两次回车保存:" + + # 初始化变量 + input="" + empty_line_count=0 + + # 逐行读取用户输入 + while IFS= read -r line; do + if [[ -z "$line" ]]; then + ((empty_line_count++)) + if [[ $empty_line_count -ge 2 ]]; then + break + fi + else + empty_line_count=0 + input+="$line"$'\n' + fi + done + + # 写入配置文件 + echo "$input" > "$CONFIG_FILE" + + echo "客户端配置已保存到 $CONFIG_FILE" + + docker run -d \ + --name wireguardc \ + --network host \ + --cap-add NET_ADMIN \ + --cap-add SYS_MODULE \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules:ro \ + --restart always \ + kjlion/wireguard:alpine + + sleep 3 + + docker logs wireguardc + + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear - send_stats "All applications backup" + send_stats "全部应用备份" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}Backing up$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "The backup file has been created: /$backup_filename" - read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice + echo "备份文件已创建: /$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "Please enter the remote server IP:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "Error: Please enter the remote server IP." + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11686,14 +11955,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "The file has been transferred to the remote server/root directory." + echo "文件已传送至远程服务器/根目录。" else - echo "The file to be transferred was not found." + echo "未找到要传送的文件。" fi break ;; *) - echo "Note: Currently, the backup only includes docker projects, and does not include data backup of website building panels such as Pagoda and 1panel." + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -11703,29 +11972,29 @@ while true; do r) root_use - send_stats "All applications restore" - echo "Available app backups" + send_stats "全部应用还原" + echo "可用的应用备份" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # If the user does not enter the file name, use the latest compressed package + # 如果用户没有输入文件名,使用最新的压缩包 if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "The application data has been restored. Please manually enter the specified application menu and update the application to restore the application." + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" else - echo "No compression package was found." + echo "没有找到压缩包。" fi ;; @@ -11748,35 +12017,35 @@ linux_work() { while true; do clear - send_stats "Backend workspace" - echo -e "Backend workspace" - echo -e "The system will provide you with a workspace that can be run on the backend, which you can use to perform long-term tasks." - echo -e "Even if you disconnect SSH, tasks in the workspace will not be interrupted, and tasks in the background will be resident." - echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and press d alone to exit the workspace!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "List of currently existing workspaces" + echo "当前已存在的工作区列表" echo -e "${gl_kjlan}------------------------" tmux list-sessions echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Workspace No. 1" - echo -e "${gl_kjlan}2. ${gl_bai}Workspace No. 2" - echo -e "${gl_kjlan}3. ${gl_bai}Workspace No. 3" - echo -e "${gl_kjlan}4. ${gl_bai}Workspace No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" - echo -e "${gl_kjlan}6. ${gl_bai}Workspace No. 6" - echo -e "${gl_kjlan}7. ${gl_bai}Workspace No. 7" - echo -e "${gl_kjlan}8. ${gl_bai}Workspace No. 8" - echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}Workspace No. 10" + 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 resident mode${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}22. ${gl_bai}Create/enter the workspace" - echo -e "${gl_kjlan}23. ${gl_bai}Inject commands into the background workspace" - echo -e "${gl_kjlan}24. ${gl_bai}Delete the specified workspace" + 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}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11784,7 +12053,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11792,63 +12061,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "Start the workspace$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11860,21 +12129,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH resident mode" - echo -e "SSH resident mode${tmux_sshd_status}" - echo "After SSH connection is enabled, it will directly enter the resident mode and return to the previous working state." + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1. Turn on 2. Turn off" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" gongzuoqu_del + read -e -p "请输入你的选择: " gongzuoqu_del case "$gongzuoqu_del" in 1) install tmux local SESSION_NAME="sshd" - send_stats "Start the workspace$SESSION_NAME" - grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\n# Automatically enter the tmux session\nif [[ -z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc + 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 ;; @@ -11890,29 +12159,29 @@ linux_work() { ;; 22) - read -e -p "Please enter the name of the workspace you created or entered, such as 1001 kj001 work1:" SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "Custom workspace" + send_stats "自定义工作区" ;; 23) - read -e -p "Please enter the command you want to execute in the background, such as: curl -fsSL https://get.docker.com | sh:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "Inject commands into the background workspace" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "Please enter the name of the workspace you want to delete:" gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "Delete the workspace" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "Invalid input!" + echo "无效的输入!" ;; esac break_end @@ -11937,54 +12206,54 @@ linux_Settings() { while true; do clear - # send_stats "System Tools" - echo -e "System Tools" + # send_stats "系统工具" + echo -e "系统工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut keys${gl_kjlan}2. ${gl_bai}Modify the login password" - echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" - echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify the SSH connection port" - echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}One-click reinstallation system${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account to create a new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}Check port occupation status${gl_kjlan}12. ${gl_bai}Modify virtual memory size" - echo -e "${gl_kjlan}13. ${gl_bai}User Management${gl_kjlan}14. ${gl_bai}User/Password Generator" - echo -e "${gl_kjlan}15. ${gl_bai}System time zone adjustment${gl_kjlan}16. ${gl_bai}Set up BBR3 acceleration" - echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" - echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" + 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}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" - echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tool${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}File Manager" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}Switch system language${gl_kjlan}32. ${gl_bai}Command line beautification tool${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${gl_bai}Set up a system recycling bin${gl_kjlan}34. ${gl_bai}System backup and recovery" - echo -e "${gl_kjlan}35. ${gl_bai}ssh remote connection tool${gl_kjlan}36. ${gl_bai}Hard disk partition management tool" - echo -e "${gl_kjlan}37. ${gl_bai}Command line history${gl_kjlan}38. ${gl_bai}rsync remote synchronization tool" - echo -e "${gl_kjlan}39. ${gl_bai}Command Favorites${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system optimization${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and Security" - echo -e "${gl_kjlan}101. ${gl_bai}Advanced usage of k command${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}Uninstall tech lion script" + 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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "Please enter your shortcut key (enter 0 to exit):" kuaijiejian + 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 "Shortcut keys are set" - send_stats "Script shortcut keys have been set" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11992,34 +12261,34 @@ linux_Settings() { 2) clear - send_stats "Set your login password" - echo "Set your login password" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "root password mode" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "py version management" - echo "Python version management" - echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This feature seamlessly installs any version officially supported by python!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" echo "------------" - echo "Recommended version: 3.12 3.11 3.10 3.9 3.8 2.7" - echo "Query more versions: https://www.python.org/downloads/" + echo "推荐版本: 3.12 3.11 3.10 3.9 3.8 2.7" + echo "查询更多版本: https://www.python.org/downloads/" echo "------------" - read -e -p "Enter the python version number you want to install (enter 0 to exit):" py_new_v + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "Script PY Management" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -12052,7 +12321,7 @@ linux_Settings() { 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 "Unknown package manager!" + echo "未知的包管理器!" return fi @@ -12081,55 +12350,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" - send_stats "Switch script PY version" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "Open port" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "All ports are open" + echo "端口已全部开放" ;; 6) root_use - send_stats "Modify SSH port" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # Read the current SSH port number + # 读取当前的 SSH 端口号 local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') - # Print the current SSH port number - echo -e "The current SSH port number is:${gl_huang}$current_port ${gl_bai}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "Numbers with port numbers ranging from 1 to 65535. (Enter 0 to exit)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # Prompt the user to enter a new SSH port number - read -e -p "Please enter the new SSH port number:" new_port + # 提示用户输入新的 SSH 端口号 + read -e -p "请输入新的 SSH 端口号: " new_port - # Determine whether the port number is within the valid range + # 判断端口号是否在有效范围内 if [[ $new_port =~ ^[0-9]+$ ]]; then # 检查输入是否为数字 if [[ $new_port -ge 1 && $new_port -le 65535 ]]; then - send_stats "SSH port has been modified" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "Exit SSH port modification" + send_stats "退出SSH端口修改" break else - echo "The port number is invalid, please enter a number between 1 and 65535." - send_stats "Invalid SSH port input" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "The input is invalid, please enter the number." - send_stats "Invalid SSH port input" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -12148,8 +12417,8 @@ EOF ;; 9) root_use - send_stats "New users disable root" - read -e -p "Please enter the new username (enter 0 to exit):" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12164,49 +12433,49 @@ EOF passwd -l root - echo "The operation has been completed." + echo "操作已完成。" ;; 10) root_use - send_stats "Set v4/v6 priority" + send_stats "设置v4/v6优先级" while true; do clear - echo "Set v4/v6 priority" + echo "设置v4/v6优先级" echo "------------------------" local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) if [ "$ipv6_disabled" -eq 1 ]; then - echo -e "Current network priority settings:${gl_huang}IPv4${gl_bai}priority" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "Current network priority settings:${gl_huang}IPv6${gl_bai}priority" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1. IPv4 priority 2. IPv6 priority 3. IPv6 repair tool" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Choose a preferred network:" choice + read -e -p "选择优先的网络: " choice case $choice in 1) sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 - echo "Switched to IPv4 priority" - send_stats "Switched to IPv4 priority" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "Switched to IPv6 priority" - send_stats "Switched to IPv6 priority" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "This function is provided by the master jhb, thanks to him!" - send_stats "ipv6 fix" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12224,43 +12493,43 @@ EOF 12) root_use - send_stats "Set up virtual memory" + send_stats "设置虚拟内存" while true; do clear - echo "Set up virtual memory" + 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 "Current virtual memory:${gl_huang}$swap_info${gl_bai}" + echo -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. Assign 1024M 2. Assign 2048M 3. Assign 4096M 4. Custom size" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G virtual memory has been set" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G virtual memory has been set" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G virtual memory has been set" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "Please enter the virtual memory size (unit M):" new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "Custom virtual memory has been set" + send_stats "已设置自定义虚拟内存" ;; *) @@ -12273,8 +12542,8 @@ EOF 13) while true; do root_use - send_stats "User Management" - echo "User List" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12285,62 +12554,62 @@ EOF echo "" - echo "Account operation" + echo "账户操作" echo "------------------------" - echo "1. Create a normal account 2. Create a premium account" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3. Give the highest permissions 4. Cancel the highest permissions" + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5. Delete the account" + echo "5. 删除账号" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # Prompt the user to enter a new username - read -e -p "Please enter a new username:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # Create a new user and set a password + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "The operation has been completed." + echo "操作已完成。" ;; 2) - # Prompt the user to enter a new username - read -e -p "Please enter a new username:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # Create a new user and set a password + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # Grant new users sudo permissions + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "The operation has been completed." + echo "操作已完成。" ;; 3) - read -e -p "Please enter your username:" username - # Grant new users sudo permissions + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "Please enter your username:" username - # Remove user's sudo permissions from sudoers file + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "Please enter the username to delete:" username - # Delete the user and its home directory + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -12353,50 +12622,50 @@ EOF 14) clear - send_stats "User Information Generator" - echo "Random username" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "Random username$i: $username" + echo "随机用户名 $i: $username" done echo "" - echo "Random name" + 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") - # Generate 5 random user names + # 生成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 "Random user name$i: $user_name" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "Random UUID" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "Random UUID$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16-bit random password" + echo "16位随机密码" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - echo "Random password$i: $password" + echo "随机密码 $i: $password" done echo "" - echo "32-bit random password" + echo "32位随机密码" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32) - echo "Random password$i: $password" + echo "随机密码 $i: $password" done echo "" @@ -12404,46 +12673,46 @@ EOF 15) root_use - send_stats "Change time zone" + send_stats "换时区" while true; do clear - echo "System time information" + echo "系统时间信息" - # Get the current system time zone + # 获取当前系统时区 local timezone=$(current_timezone) - # Get the current system time + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # Show time zone and time - echo "Current system time zone:$timezone" - echo "Current system time:$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "Time zone switching" + echo "时区切换" echo "------------------------" - echo "Asia" - echo "1. Shanghai time in China 2. Hong Kong time in China" - echo "3. Tokyo time in Japan 4. Seoul time in South Korea" - echo "5. Singapore time 6. Kolkata time in India" - echo "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Time in Bangkok, Thailand" + echo "亚洲" + echo "1. 中国上海时间 2. 中国香港时间" + echo "3. 日本东京时间 4. 韩国首尔时间" + echo "5. 新加坡时间 6. 印度加尔各答时间" + echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" + echo "9. 泰国曼谷时间" echo "------------------------" - echo "Europe" - echo "11. London time in the UK 12. Paris time in France" - echo "13. Berlin time, Germany 14. Moscow time, Russia" - echo "15. Utrecht time in the Netherlands 16. Madrid time in Spain" + echo "欧洲" + echo "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "America" - echo "21. Western Time 22. Eastern Time" - echo "23. Canadian time 24. Mexican time" - echo "25. Brazil time 26. Argentina time" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31. UTC Global Standard Time" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -12486,21 +12755,21 @@ EOF 18) root_use - send_stats "Modify the host name" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "Current host name:${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "Please enter the new host name (enter 0 to exit):" new_hostname + 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 - # Other systems, such as Debian, Ubuntu, CentOS, etc. + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12518,11 +12787,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "The host name has been changed to:$new_hostname" - send_stats "Host name has been changed" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "Exited, hostname not changed." + echo "已退出,未更改主机名。" break fi done @@ -12530,32 +12799,32 @@ EOF 19) root_use - send_stats "Change the system update source" + send_stats "换系统更新源" clear - echo "Select the update source area" - echo "Connect to LinuxMirrors to switch system update source" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas Regions" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "Default source in mainland China" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "Source of education in mainland China" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "Overseas origin" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "Canceled" + echo "已取消" ;; esac @@ -12563,62 +12832,62 @@ EOF ;; 20) - send_stats "Timing task management" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "Timed task list" + echo "定时任务列表" crontab -l echo "" - echo "operate" + echo "操作" echo "------------------------" - echo "1. Add timing tasks 2. Delete timing tasks 3. Edit timing tasks" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "Please enter the execution command for the new task:" newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1. Monthly Tasks 2. Weekly Tasks" - echo "3. Daily tasks 4. Hourly tasks" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "Please enter your selection:" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "Choose what day of each month to perform tasks? (1-30):" day + read -e -p "选择每月的几号执行任务? (1-30): " day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) - read -e -p "Choose what week to perform the task? (0-6, 0 represents Sunday):" weekday + read -e -p "选择周几执行任务? (0-6,0代表星期日): " weekday (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "Choose what time to perform tasks every day? (Hours, 0-23):" hour + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "Enter what minute of the hour to perform the task? (mins, 0-60):" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "Add timed tasks" + send_stats "添加定时任务" ;; 2) - read -e -p "Please enter the keywords that need to be deleted:" kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "Delete timing tasks" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "Edit timing tasks" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -12630,32 +12899,32 @@ EOF 21) root_use - send_stats "Local host parsing" + send_stats "本地host解析" while true; do clear - echo "Native host parsing list" - echo "If you add parse matches here, dynamic parsing will no longer be used" + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "operate" + echo "操作" echo "------------------------" - echo "1. Add a new parsing 2. Delete the parsing address" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "Please enter a new parsing record Format: 110.25.5.33 kejilion.pro:" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "Local host parsing has been added" + send_stats "本地host解析新增" ;; 2) - read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "Local host parsing and deletion" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -12666,7 +12935,7 @@ EOF 22) root_use - send_stats "ssh defense" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12678,20 +12947,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH Defense Program$check_docker" - echo "fail2ban is an SSH tool to prevent brute force" - echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. Install the defense program" + echo "1. 安装防御程序" echo "------------------------" - echo "2. View SSH interception records" - echo "3. Real-time log monitoring" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9. Uninstall the defense program" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -12714,7 +12983,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban defense program has been uninstalled" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -12727,47 +12996,47 @@ EOF 23) root_use - send_stats "Current limit shutdown function" + send_stats "限流关机功能" while true; do clear - echo "Current limit shutdown function" - echo "Video introduction: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "Current traffic usage, restarting the server traffic calculation will be cleared!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" - echo -e "${gl_kjlan}Total send:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # Check if the Limiting_Shut_down.sh file exists + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # Get the value of threshold_gb + # 获取 threshold_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}The current set entry-station current limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" - echo -e "${gl_lv}The current outbound current limit threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" + 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}Current limit shutdown function is not enabled${gl_bai}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "The system will detect whether the actual traffic reaches the threshold every minute, and the server will be automatically shut down after it arrives!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1. Turn on the current limit shutdown function 2. Deactivate the current limit shutdown function" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # Enter the new virtual memory size - echo "If the actual server has 100G traffic, the threshold can be set to 95G and shut down the power in advance to avoid traffic errors or overflows." - read -e -p "Please enter the incoming traffic threshold (unit is G, default is 100G):" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "Please enter the outbound traffic threshold (unit is G, default is 100G):" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "Please enter the traffic reset date (default reset on the 1st of each month):" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -12780,15 +13049,15 @@ EOF (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 "Current limit shutdown has been set" - send_stats "Current limit shutdown has been set" + 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 "Current limit shutdown function has been turned off" + echo "已关闭限流关机功能" ;; *) break @@ -12801,40 +13070,40 @@ EOF 24) root_use - send_stats "Private key login" + send_stats "私钥登录" while true; do clear - echo "ROOT private key login mode" - echo "Video introduction: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "A key pair will be generated, a more secure way to SSH login" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1. Generate a new key 2. Import an existing key 3. View the native key" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "Generate a new key" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "Import an existing public key" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "View the local secret key" + send_stats "查看本机密钥" echo "------------------------" - echo "Public key information" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "Private key information" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12850,18 +13119,18 @@ EOF 25) root_use - send_stats "Telegram warning" - echo "TG-bot monitoring and early warning function" - echo "Video introduction: https://youtu.be/vLL-eb3Z_TY" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "You need to configure the tg robot API and the user ID to receive early warnings to realize real-time monitoring and early warning of native CPU, memory, hard disk, traffic, and SSH login" - echo "After reaching the threshold, the user will be sent to the user" - echo -e "${gl_hui}- Regarding traffic, restarting the server will recalculate-${gl_bai}" - read -e -p "Are you sure to continue? (Y/N):" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "Telegram warning is enabled" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -12883,7 +13152,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # Add to ~/.profile file + # 添加到 ~/.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 @@ -12894,21 +13163,21 @@ EOF source ~/.profile clear - echo "TG-bot early warning system has been started" - 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}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "Canceled" + echo "已取消" ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "Fix high-risk vulnerabilities in SSH" + 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 @@ -12952,7 +13221,7 @@ EOF ;; 37) clear - send_stats "Command line history" + 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; } @@ -12975,61 +13244,61 @@ EOF 41) clear - send_stats "Message board" - echo "The technology lion message board has been moved to the official community! Please leave a message in the official community!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "One-stop tuning" - echo "One-stop system optimization" + send_stats "一条龙调优" + echo "一条龙系统调优" echo "------------------------------------------------" - echo "The following will be operated and optimized" - echo "1. Update the system to the latest" - echo "2. Clean up system junk files" - echo -e "3. Set up virtual memory${gl_huang}1G${gl_bai}" - echo -e "4. Set the SSH port number to${gl_huang}5522${gl_bai}" - echo -e "5. Open all ports" - echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" - echo -e "7. Set the time zone to${gl_huang}Shanghai${gl_bai}" - echo -e "8. Automatically optimize DNS address${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "9. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" - echo -e "10. Switch to kernel parameter optimization in Linux system${gl_huang}Balanced optimization mode${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "Are you sure to have one-click maintenance? (Y/N):" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "One-stop tuning start" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. Clean up system junk files" + echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. Set up virtual memory${gl_huang}1G${gl_bai}" + 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. Set the SSH port number to${gl_huang}5522${gl_bai}" + 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. Open all ports" + echo -e "[${gl_lv}OK${gl_bai}] 5/10. 开放所有端口" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. Open${gl_huang}BBR${gl_bai}accelerate" + 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. Set the time zone to${gl_huang}Shanghai${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13046,25 +13315,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. Automatically optimize DNS address${gl_huang}${gl_bai}" + 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. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + 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. Optimization of kernel parameters for Linux system" - echo -e "${gl_lv}One-stop system tuning has been completed${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "Canceled" + echo "已取消" ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -13072,7 +13341,7 @@ EOF 99) clear - send_stats "Restart the system" + send_stats "重启系统" server_reboot ;; 100) @@ -13088,32 +13357,32 @@ EOF local status_message="无法确定的状态" fi - echo "Privacy and Security" - echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "Current status:$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1. Turn on collection" - echo "2. Close the collection" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "Please enter your selection:" sub_choice + 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 "Collection has been enabled" - send_stats "Privacy and security collection has been enabled" + 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 "Collection closed" - send_stats "Privacy and Security have been closed for collection" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -13129,11 +13398,11 @@ EOF 102) clear - send_stats "Uninstall tech lion script" - echo "Uninstall tech lion script" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Will completely uninstall the kejilion script and will not affect your other functions" - read -e -p "Are you sure to continue? (Y/N):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13141,16 +13410,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "The script has been uninstalled, goodbye!" + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "Canceled" + echo "已取消" ;; *) - echo "Invalid selection, please enter Y or N." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -13160,7 +13429,7 @@ EOF ;; *) - echo "Invalid input!" + echo "无效的输入!" ;; esac break_end @@ -13178,187 +13447,187 @@ EOF linux_file() { root_use - send_stats "File Manager" + send_stats "文件管理器" while true; do clear - echo "File Manager" + echo "文件管理器" echo "------------------------" - echo "Current path" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. Enter the directory 2. Create the directory 3. Modify the directory permissions 4. Rename the directory" - echo "5. Delete the directory 6. Return to the previous menu directory" + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11. Create a file 12. Edit a file 13. Modify file permissions 14. Rename a file" - echo "15. Delete the file" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21. Compress file directory 22. Unzip file directory 23. Move file directory 24. Copy file directory" - echo "25. Pass the file to another server" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0. Return to the previous menu" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "Please enter your selection:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "Please enter the directory name:" dirname - cd "$dirname" 2>/dev/null || echo "Unable to enter the directory" - send_stats "Go to the directory" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "Please enter the directory name to create:" dirname - mkdir -p "$dirname" && echo "Directory created" || echo "Creation failed" - send_stats "Create a directory" + read -e -p "请输入要创建的目录名: " dirname + mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" + send_stats "创建目录" ;; 3) # 修改目录权限 - read -e -p "Please enter the directory name:" dirname - read -e -p "Please enter permissions (such as 755):" perm - chmod "$perm" "$dirname" && echo "Permissions have been modified" || echo "Modification failed" - send_stats "Modify directory permissions" + read -e -p "请输入目录名: " dirname + read -e -p "请输入权限 (如 755): " perm + chmod "$perm" "$dirname" && echo "权限已修改" || echo "修改失败" + send_stats "修改目录权限" ;; 4) # 重命名目录 - read -e -p "Please enter the current directory name:" current_name - read -e -p "Please enter the new directory name:" new_name - mv "$current_name" "$new_name" && echo "Directory has been renamed" || echo "Rename failed" - send_stats "Rename the directory" + read -e -p "请输入当前目录名: " current_name + read -e -p "请输入新目录名: " new_name + mv "$current_name" "$new_name" && echo "目录已重命名" || echo "重命名失败" + send_stats "重命名目录" ;; 5) # 删除目录 - read -e -p "Please enter the directory name to delete:" dirname - rm -rf "$dirname" && echo "Directory has been deleted" || echo "Deletion failed" - send_stats "Delete Directory" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "Return to the previous menu directory" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "Please enter the file name to create:" filename - touch "$filename" && echo "File created" || echo "Creation failed" - send_stats "Create a file" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "Please enter the file name to edit:" filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "Edit files" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "Please enter the file name:" filename - read -e -p "Please enter permissions (such as 755):" perm - chmod "$perm" "$filename" && echo "Permissions have been modified" || echo "Modification failed" - send_stats "Modify file permissions" + read -e -p "请输入文件名: " filename + read -e -p "请输入权限 (如 755): " perm + chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" + send_stats "修改文件权限" ;; 14) # 重命名文件 - read -e -p "Please enter the current file name:" current_name - read -e -p "Please enter a new file name:" new_name - mv "$current_name" "$new_name" && echo "File renamed" || echo "Rename failed" - send_stats "Rename the file" + read -e -p "请输入当前文件名: " current_name + read -e -p "请输入新文件名: " new_name + mv "$current_name" "$new_name" && echo "文件已重命名" || echo "重命名失败" + send_stats "重命名文件" ;; 15) # 删除文件 - read -e -p "Please enter the file name to delete:" filename - rm -f "$filename" && echo "File deleted" || echo "Deletion failed" - send_stats "Delete files" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "Please enter the file/directory name to be compressed:" name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "Compressed to$name.tar.gz" || echo "Compression failed" - send_stats "Compressed files/directories" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "Please enter the file name (.tar.gz):" filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "Decompressed$filename" || echo "Decompression failed" - send_stats "Unzip files/directories" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "Please enter the file or directory path to move:" src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "Error: The file or directory does not exist." - send_stats "Failed to move a file or directory: The file or directory does not exist" + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "Please enter the target path (including the new file name or directory name):" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "Error: Please enter the target path." - send_stats "Moving file or directory failed: The destination path is not specified" + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "The file or directory has been moved to$dest_path" || echo "Failed to move files or directories" - send_stats "Move files or directories" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "Please enter the file or directory path to copy:" src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "Error: The file or directory does not exist." - send_stats "Failed to copy a file or directory: The file or directory does not exist" + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "Please enter the target path (including the new file name or directory name):" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "Error: Please enter the target path." - send_stats "Failed to copy file or directory: Destination path not specified" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # Use the -r option to copy the directory recursively - cp -r "$src_path" "$dest_path" && echo "The file or directory has been copied to$dest_path" || echo "Failed to copy a file or directory" - send_stats "Copy files or directories" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "Please enter the file path to be transferred:" file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "Error: The file does not exist." - send_stats "Failed to transfer the file: The file does not exist" + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "Please enter the remote server IP:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "Error: Please enter the remote server IP." - send_stats "File transfer failed: Remote server IP was not entered" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "Please enter the remote server username (default root):" remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "Please enter the remote server password:" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "Error: Please enter the remote server password." - send_stats "File transfer failed: Remote server password not entered" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "Please enter the login port (default 22):" remote_port + read -e -p "请输入登录端口 (默认22): " remote_port remote_port=${remote_port:-22} - # Clear old entries for known hosts + # 清除已知主机的旧条目 ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 等待时间 - # Transfer files using scp + # 使用scp传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}The script has been updated to the latest version!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "The script is up to date$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13656,15 +13925,15 @@ while true; do (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}Automatic update is enabled, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" - send_stats "Turn on automatic script update" + echo -e "${gl_lv}自动更新已开启,每天凌晨2点脚本会自动更新!${gl_bai}" + send_stats "开启脚本自动更新" break_end ;; 3) clear (crontab -l | grep -v "kejilion.sh") | crontab - - echo -e "${gl_lv}Automatic update is closed${gl_bai}" - send_stats "Close script automatic update" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -13686,41 +13955,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "Technology lion script toolbox v$sh_v" -echo -e "Command line input${gl_huang}k${gl_kjlan}Quickly start scripts${gl_bai}" +echo -e "科技lion脚本工具箱 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}System information query" -echo -e "${gl_kjlan}2. ${gl_bai}System update" -echo -e "${gl_kjlan}3. ${gl_bai}System Cleanup" -echo -e "${gl_kjlan}4. ${gl_bai}Basic tools" -echo -e "${gl_kjlan}5. ${gl_bai}BBR Management" -echo -e "${gl_kjlan}6. ${gl_bai}Docker Management" -echo -e "${gl_kjlan}7. ${gl_bai}WARP Management" -echo -e "${gl_kjlan}8. ${gl_bai}Test script collection" -echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Script Collection" -echo -e "${gl_huang}10. ${gl_bai}LDNMP website building" -echo -e "${gl_kjlan}11. ${gl_bai}Application Market" -echo -e "${gl_kjlan}12. ${gl_bai}Backend workspace" -echo -e "${gl_kjlan}13. ${gl_bai}System Tools" -echo -e "${gl_kjlan}14. ${gl_bai}Server cluster control" -echo -e "${gl_kjlan}15. ${gl_bai}Advertising column" +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}Docker管理" +echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu server opening script" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${gl_bai}Script update" +echo -e "${gl_kjlan}00. ${gl_bai}脚本更新" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}0. ${gl_bai}Exit script" +echo -e "${gl_kjlan}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "Please enter your selection:" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "System update" ; linux_update ;; - 3) clear ; send_stats "System Cleanup" ; linux_clean ;; + 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 "warp management" ; install wget + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -13731,13 +14000,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu server opening script" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "Invalid input!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -13745,68 +14014,68 @@ done k_info() { -send_stats "k command reference use case" +send_stats "k命令参考用例" echo "-------------------" -echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "The following is the k command reference use case:" -echo "Start script k" -echo "Install software package k install nano wget | k add nano wget | k Install nano wget" -echo "Uninstall the package k remove nano wget | k del nano wget | k uninstall nano wget | k Uninstall nano wget" -echo "Update system k update | k update" -echo "Clean system garbage k clean | k clean" -echo "Reinstall the system panel k dd | k Reinstall" -echo "bbr3 control panel k bbr3 | k bbrv3" -echo "Kernel Tuning Panel k nhyh | k kernel optimization" -echo "Set virtual memory k swap 2048" -echo "Set virtual time zone k time Asia/Shanghai | k time zone Asia/Shanghai" -echo "System Recycling Bin k trash | k hsz | k Recycling Bin" -echo "System backup function k backup | k bf | k backup" -echo "ssh remote connection tool k ssh | k remote connection" -echo "rsync remote synchronization tool k rsync | k remote synchronization" -echo "Hard disk management tool k disk | k hard disk management" -echo "Intranet penetration (server side) k frps" -echo "Intranet penetration (client) k frpc" -echo "Software start k start sshd | k start sshd" -echo "Software stop k stop sshd | k stop sshd" -echo "Software restart k restart sshd | k restart sshd" -echo "Software status view k status sshd | k status sshd" -echo "Software boot k enable docker | k autostart docke | k startup docker" -echo "Domain name certificate application k ssl" -echo "Domain name certificate expiration query k ssl ps" -echo "docker environment installation k docker install |k docker installation" -echo "docker container management k docker ps |k docker container" -echo "docker image management k docker img |k docker image" -echo "LDNMP site management k web" -echo "LDNMP cache cleanup k web cache" -echo "Install WordPress k wp |k wordpress |k wp xxx.com" -echo "Install the reverse proxy k fd |k rp |k anti-generation |k fd xxx.com" -echo "Install load balancing k loadbalance |k load balancing" -echo "Firewall panel k fhq |k firewall" -echo "Open port k dkdk 8080 |k Open port 8080" -echo "Close port k gbdk 7800 |k Close port 7800" -echo "Release IP k fxip 127.0.0.0/8 |k Release IP 127.0.0.0/8" -echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" -echo "Command favorites k fav | k command favorites" -echo "App Market Management k app" -echo "Application number quick management k app 26 | k app 1panel | k app npm" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # If there are no parameters, run interactive logic + # 如果没有参数,运行交互式逻辑 kejilion_sh else - # If there are parameters, execute the corresponding function + # 如果有参数,执行相应函数 case $1 in install|add|安装) shift - send_stats "Install software" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "Uninstall the software" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -13840,7 +14109,7 @@ else rsync_run) shift - send_stats "Timed rsync synchronization" + send_stats "定时rsync同步" run_task "$@" ;; @@ -13859,7 +14128,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ ports have been blocked from accessing the service" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13872,13 +14141,13 @@ else swap) shift - send_stats "Quickly set up virtual memory" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "Quickly set time zone" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -13926,42 +14195,42 @@ else status|状态) shift - send_stats "Software status view" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "Software startup" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "Software pause" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "Software restart" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "Software boots up" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "Check the certificate status" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "Quickly apply for a certificate" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "Quickly apply for a certificate" + send_stats "快速申请证书" else k_info fi @@ -13971,15 +14240,15 @@ else shift case $1 in install|安装) - send_stats "Quickly install docker" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "Quick container management" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "Quick mirror management" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14006,7 +14275,7 @@ else app) shift - send_stats "Apply $@" + send_stats "应用$@" linux_panel "$@" ;; @@ -14016,4 +14285,3 @@ else ;; esac fi - diff --git a/jp/kejilion.sh b/jp/kejilion.sh index d2122269f..cab3eb64a 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.0" +sh_v="4.1.2" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# コマンドを実行する関数を定義します +# 定义一个函数来执行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! -# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 -# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# ユーザーに条件に同意するように促します +# 提示用户同意条款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" - echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" - echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" + echo "首次使用脚本,请先阅读并同意用户许可协议。" + echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "上記の条件に同意しますか? (y/n):" user_input + read -r -p "是否同意以上条款?(y/n): " user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "ライセンスの同意" + 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 "許可の拒否" + send_stats "许可拒绝" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}インストール$package...${gl_bai}" + echo -e "${gl_huang}正在安装 $package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "現在利用可能なスペース:$((available_space_mb/1024))g" - echo "最小需要スペース:${required_gb}G" - echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" - send_stats "ディスクスペースが不十分です" + echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" + echo "当前可用空间: $((available_space_mb/1024))G" + echo "最小需求空间: ${required_gb}G" + echo "无法继续安装,请清理磁盘空间后重试。" + send_stats "磁盘空间不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}アンインストール$package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return 1 fi done } -# さまざまな分布に適したUniversal SystemCTL関数 +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# サービスを再起動します +# 重启服务 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1サービスは再開されました。" + echo "$1 服务已重启。" else - echo "エラー:再起動$1サービスは失敗しました。" + echo "错误:重启 $1 服务失败。" fi } -# サービスを開始します +# 启动服务 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1サービスが開始されました。" + echo "$1 服务已启动。" else - echo "エラー:開始$1サービスは失敗しました。" + echo "错误:启动 $1 服务失败。" fi } -# サービスを停止します +# 停止服务 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1サービスは停止しました。" + echo "$1 服务已停止。" else - echo "エラー:停止します$1サービスは失敗しました。" + echo "错误:停止 $1 服务失败。" fi } -# サービスのステータスを確認します +# 查看服务状态 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1サービスステータスが表示されます。" + echo "$1 服务状态已显示。" else - echo "エラー:表示できません$1サービスステータス。" + echo "错误:无法显示 $1 服务状态。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME電源を入れるように設定します。" + echo "$SERVICE_NAME 已设置为开机自启。" } break_end() { - echo -e "${gl_lv}操作が完了しました${gl_bai}" - echo "任意のキーを押して続行します..." + echo -e "${gl_lv}操作完成${gl_bai}" + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -349,22 +349,21 @@ kejilion() { -check_port() { +stop_containers_or_kill_process() { + local port=$1 + local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) install lsof + 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() { - 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 - } +check_port() { stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } @@ -425,7 +424,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker環境のインストール...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -500,63 +499,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Dockerコンテナ管理" - echo "Dockerコンテナリスト" + send_stats "Docker容器管理" + echo "Docker容器列表" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "コンテナ操作" + echo "容器操作" echo "------------------------" - echo "1.新しいコンテナを作成します" + echo "1. 创建新的容器" echo "------------------------" - echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" - echo "3.指定された容器を停止します7。すべての容器を停止します" - echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" - echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" + echo "2. 启动指定容器 6. 启动所有容器" + echo "3. 停止指定容器 7. 停止所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11。指定されたコンテナを入力します12。コンテナログを表示します" - echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "新しいコンテナを作成します" - read -e -p "作成コマンドを入力してください:" dockername + send_stats "新建容器" + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "指定された容器を起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) - send_stats "指定された容器を停止します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "停止指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "指定されたコンテナを削除します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "指定された容器を再起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "重启指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker restart $dockername ;; 6) - send_stats "すべてのコンテナを起動します" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) - send_stats "すべてのコンテナを停止します" + send_stats "停止所有容器" docker stop $(docker ps -q) ;; 8) - send_stats "すべてのコンテナを削除します" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +564,28 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "すべてのコンテナを再起動します" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "コンテナを入力します" - read -e -p "コンテナ名を入力してください:" dockername + send_stats "进入容器" + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "コンテナログを表示します" - read -e -p "コンテナ名を入力してください:" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "コンテナネットワークを表示します" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +603,14 @@ while true; do break_end ;; 14) - send_stats "コンテナの占有を表示します" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "コンテナポートアクセスを許可します" - read -e -p "コンテナ名を入力してください:" docker_name + send_stats "允许容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +619,8 @@ while true; do ;; 16) - send_stats "コンテナポートアクセスをブロックします" - read -e -p "コンテナ名を入力してください:" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +639,44 @@ done docker_image() { while true; do clear - send_stats "Docker画像管理" - echo "Docker画像リスト" + send_stats "Docker镜像管理" + echo "Docker镜像列表" docker image ls echo "" - echo "ミラー操作" + echo "镜像操作" echo "------------------------" - echo "1.指定された画像を取得する3。指定された画像を削除します" - echo "2。指定された画像4を更新します。すべての画像を削除します" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "鏡を引っ張ります" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}画像を取得する:$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "画像を更新します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}更新された画像:$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "ミラーを削除します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "すべての画像を削除します" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +685,7 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +753,16 @@ install_crontab() { service cron start ;; *) - echo "サポートされていない分布:$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "オペレーティングシステムを決定することはできません。" + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +774,27 @@ docker_ipv6_on() { 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を使用して、構成ファイルの更新を処理します + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 現在の構成には既にIPv6設定があるかどうかを確認してください + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 構成を更新し、IPv6を有効にします + # 更新配置,开启 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}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +809,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 構成ファイルが存在するかどうかを確認します + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" + echo -e "${gl_hong}配置文件不存在${gl_bai}" return fi - # 現在の構成をお読みください + # 读取当前配置 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # JQを使用して、構成ファイルの更新を処理します + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 現在のIPv6ステータスを確認してください + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 元の構成と新しい構成を比較します + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,117 +869,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + 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" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "ポートが開かれました" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + 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" + echo "已关闭端口 $port" fi done - # 既存のルールを削除する(ある場合) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 最初に新しいルールを挿入します + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "ポートは閉じた" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + 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" + echo "已放行IP $ip" fi done save_iptables_rules - send_stats "IPをリリースしました" + send_stats "已放行IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + 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" + echo "已阻止IP $ip" fi done save_iptables_rules - send_stats "IPブロック" + send_stats "已阻止IP" } @@ -990,7 +989,7 @@ block_ip() { enable_ddos_defense() { - # 防御DDOをオンにします + # 开启防御 DDoS 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 @@ -1000,12 +999,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS防御をオンにします" + send_stats "开启DDoS防御" } -# DDOS防御をオフにします +# 关闭DDoS防御 disable_ddos_defense() { - # 防御DDOをオフにします + # 关闭防御 DDoS 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 @@ -1015,14 +1014,14 @@ disable_ddos_defense() { 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防御をオフにします" + send_stats "关闭DDoS防御" } -# 国家IPルールを管理する機能 +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1032,73 @@ manage_country_rules() { case "$action" in block) - # IPSETが存在しない場合は作成します + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IPエリアファイルをダウンロードします + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # IPSETにIPを追加します + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # iptablesでIPをブロックします + # 使用 iptables 阻止 IP 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_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 許可された国のIPSETを作成する(存在しない場合) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IPエリアファイルをダウンロードします + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + 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" - # IPSETにIPを追加します + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 指定された国のIPのみが許可されています + # 仅允许指定国家的 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_codeIPアドレス" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 国のiptablesルールを削除します + # 删除国家的 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を破壊します + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "正常に持ち上げられました$country_codeIPアドレスの制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1115,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高度なファイアウォール管理" - send_stats "高度なファイアウォール管理" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "ファイアウォール管理" + echo "防火墙管理" echo "------------------------" - echo "1.指定されたポート2を開きます。指定されたポートを閉じます" - echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5。IPホワイトリスト6。IPブラックリスト" - echo "7.指定されたIPをクリアします" + echo "5. IP白名单 6. IP黑名单" + echo "7. 清除指定IP" echo "------------------------" - echo "11. ping 12を許可します。Pingを無効にします" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" - echo "17.指定国でのIP制限をリリースします" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "オープンポート番号を入力してください:" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "指定されたポートを開きます" + send_stats "开放指定端口" ;; 2) - read -e -p "閉じたポート番号を入力してください:" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "指定されたポートを閉じます" + send_stats "关闭指定端口" ;; 3) - # すべてのポートを開きます + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1163,10 @@ iptables_panel() { 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 "すべてのポートを開きます" + send_stats "开放所有端口" ;; 4) - # すべてのポートを閉じます + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1179,40 @@ iptables_panel() { 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 "すべてのポートを閉じます" + send_stats "关闭所有端口" ;; 5) - # IPホワイトリスト - read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IPブラックリスト - read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) - # 指定されたIPをクリアします - read -e -p "クリアされたIPを入力してください:" d_ip + # 清除指定 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をクリアします" + send_stats "清除指定IP" ;; 11) - # pingを許可します + # 允许 PING 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 "pingを許可します" + send_stats "允许PING" ;; 12) - # pingを無効にします + # 禁用 PING 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 "pingを無効にします" + send_stats "禁用PING" ;; 13) enable_ddos_defense @@ -1223,20 +1222,20 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "許可された国$country_codeIP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "国をブロックします$country_codeIP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "国をきれいにします$country_codeIP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1256,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 現在のシステムですべてのスワップパーティションを取得します + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 反復して、すべてのスワップパーティションを削除します + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # /swapfileが使用されなくなったことを確認してください + # 确保 /swapfile 不再被使用 swapoff /swapfile - # 古い /swapfileを削除します + # 删除旧的 /swapfile rm -f /swapfile - # 新しいスワップパーティションを作成します + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1287,7 @@ add_swap() { rc-update add local fi - echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1297,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 仮想メモリを作成する必要があるかどうかを判断します +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1313,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginxバージョンを取得します + # 获取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バージョンを取得します + # 获取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バージョンを取得します + # 获取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バージョンを取得します + # 获取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}" @@ -1341,7 +1340,7 @@ ldnmp_v() { 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 @@ -1350,11 +1349,11 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.ymlファイルをダウンロードして置き換えます + # 下载 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ファイルに置き換えます + # 在 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 @@ -1399,7 +1398,7 @@ install_ldnmp() { clear - echo "LDNMP環境がインストールされています" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1415,7 @@ install_certbot() { 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 "更新タスクが更新されました" + echo "续签任务已更新" } @@ -1453,15 +1452,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming公開鍵情報${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}証明書ストレージパス${gl_bai}" - echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" - echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1469,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1485,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" - echo "サイト情報証明書の有効期限" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1525,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "ドメイン名証明書の成功したアプリケーション" + send_stats "域名证书申请成功" else - send_stats "ドメイン名証明書のアプリケーションは失敗しました" - echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" - echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" - echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" - echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" - echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" - echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" - echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "もう一度展開してみてください$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1549,7 +1548,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "ドメイン名の再利用" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1557,8 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1623,8 +1622,8 @@ nginx_upgrade() { 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}仕上げる" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" } @@ -1643,11 +1642,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "ログイン情報:" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "起動する$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1657,29 +1656,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 構成ファイルが存在するかどうかを確認します + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # ゾーン_idsを配列に変換します + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # キャッシュをクリーニングするかどうかをユーザーに促します - read -e -p "CloudFlareのキャッシュをきれいにする必要がありますか? (y/n):" answer + # 提示用户是否清理缓存 + 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 "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS + 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をループして、Clear Cacheコマンドを実行します + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "ゾーン_idのキャッシュのクリア:$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1687,13 +1686,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "キャッシュクリアリクエストが送信されました。" + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "サイトキャッシュをクリーンアップします" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1702,28 @@ web_cache() { web_del() { - send_stats "サイトデータを削除します" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "ドメイン名の削除:$yuming" + 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" + # 删除数据库前检查是否存在,避免报错 + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1739,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることにしました + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # WAFをオンにしてください:コメントを削除します + # 开启 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を閉じる:コメントを追加します + # 关闭 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 "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1802,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1829,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1857,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotliをオンにする:コメントを削除します + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1871,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる:コメントを追加します + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1887,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1913,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTDをオンにしてください:コメントを削除します + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1928,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # ZSTDを閉じる:コメントを追加します + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1944,11 @@ nginx_zstd() { else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1975,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1990,7 +1989,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2003,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 安装防御程序" echo "------------------------" - echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" - echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21。CloudFlareモード22。5秒シールドの高負荷" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31。WAF32をオンにしてください。WAFをオフにします" - echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 卸载防御程序" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2081,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2097,11 +2096,11 @@ web_security() { ;; 21) - send_stats "CloudFlareモード" - echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" + send_stats "cloudflare模式" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2116,21 +2115,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "CFパラメーターを取得します:" - echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" - echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken - read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2147,23 +2146,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高負荷自動シールドオープニングスクリプトが追加されました" + echo "高负载自动开盾脚本已添加" else - echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "サイトWAFが有効になっています" - send_stats "サイトWAFが有効になっています" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "サイトWAFは閉鎖されています" - send_stats "サイトWAFは閉鎖されています" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2189,10 +2188,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 現在のworker_processesの設定値を取得します +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 値に応じてモード情報を設定します +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2207,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotliが有効であり、コメントされていないかどうかを確認してください + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # GZIPが有効になっており、コメントされていないかどうかを確認してください + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2237,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP環境を最適化します" - echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1。標準モード2。高性能モード(推奨2H4g以上)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" - echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" - echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "サイト標準モード" + send_stats "站点标准模式" - # nginxチューニング + # 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チューニング + # 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チューニング + # 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 @@ -2276,7 +2275,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2288,23 +2287,23 @@ web_optimization() { optimize_balanced - echo "LDNMP環境は標準モードに設定されています" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "サイトの高性能モード" + send_stats "站点高性能模式" - # nginxチューニング + # 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チューニング + # 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チューニング + # 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 @@ -2316,7 +2315,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2326,7 +2325,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境は、高性能モードに設定されています" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2386,9 +2385,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker = "$ {gl_lv} $ {gl_bai}インストール" +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2396,7 +2395,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "アクセスアドレス:" +echo "访问地址:" ip_address @@ -2434,31 +2433,31 @@ check_docker_image_update() { 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##*:} - # デフォルトのラベルは最新です + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 公式画像のサポートを追加します + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIから画像公開時間を取得します + # 从 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 @@ -2477,7 +2476,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2486,34 @@ block_container_port() { install iptables - # 他のすべてのIPSを確認してブロックします + # 检查并封禁其他所有 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を確認してリリースします + # 检查并放行指定 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 + # 检查并放行本地网络 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 - # 他のすべてのIPSを確認してブロックします + # 检查并封禁其他所有 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を確認してリリースします + # 检查并放行指定 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 + # 检查并放行本地网络 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 @@ -2524,7 +2523,7 @@ block_container_port() { fi - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2535,7 +2534,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2544,17 @@ clear_container_rules() { install iptables - # 他のすべてのIPをブロックするルールを明確にします + # 清除封禁其他所有 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をリリースするためのルールをクリアします + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2564,17 +2563,17 @@ clear_container_rules() { - # 他のすべてのIPをブロックするルールを明確にします + # 清除封禁其他所有 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をリリースするためのルールをクリアします + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2585,7 +2584,7 @@ clear_container_rules() { fi - echo "IP+ポートはサービスにアクセスすることが許可されています" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2599,25 +2598,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:block_host_port <ポート番号> <承認IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # 他のすべてのIPアクセスを拒否しました + # 拒绝其他所有 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アクセスを許可します + # 允许指定 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 @@ -2626,27 +2625,27 @@ block_host_port() { - # 他のすべてのIPアクセスを拒否しました + # 拒绝其他所有 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アクセスを許可します + # 允许指定 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+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2658,47 +2657,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # 他のすべてのIPアクセスをブロックするルールをクリアします + # 清除封禁所有其他 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アクセスを許可するルールを明確にします + # 清除允许指定 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アクセスをブロックするルールをクリアします + # 清除封禁所有其他 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アクセスを許可するルールを明確にします + # 清除允许指定 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+ポートはサービスにアクセスすることが許可されています" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2747,18 +2746,18 @@ while true; do fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2770,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_nameインストール" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "インストール$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2785,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_nameインストール" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新します$docker_name" + send_stats "更新$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2799,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" - send_stats "アンインストール$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2859,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2894,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2994,17 @@ 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 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3079,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "再起動" + echo "已重启" reboot ;; *) - echo "キャンセル" + echo "已取消" ;; esac @@ -3127,8 +3126,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP環境を再度インストールできません" - echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3138,10 +3137,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP環境をインストールします" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3154,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx環境をインストールします" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3168,8 @@ 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 "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3180,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "LDNMP環境を最初にインストールしてください" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3191,7 +3190,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "最初にNGINX環境をインストールしてください" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3202,16 +3201,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "あなたの$webname建てられた!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webnameインストール情報は次のとおりです。" + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "あなたの$webname建てられた!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3223,8 +3222,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3263,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "発生防止ポートを入力してください。" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3297,14 +3296,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "スペースで区切られた複数の生成防止IP+ポートを入力してください(たとえば、127.0.0.1:3000 127.0.1:3002):" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3357,12 +3356,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMPサイト管理" - echo "LDNMP環境" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - echo -e "サイト:${output}証明書の有効期限" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3374,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "データベース:${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" - echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" - echo "5.アクセスログを表示6。エラーログを表示します" - echo "7.グローバル構成の編集8。サイト構成の編集" - echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" + echo "5. 查看访问日志 6. 查看错误日志" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20.指定されたサイトデータを削除します" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "ドメイン名証明書を申請します" - read -e -p "ドメイン名を入力してください:" yuming + 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 @@ -3412,15 +3411,15 @@ ldnmp_web_status() { ;; 2) - send_stats "サイトドメイン名を変更します" - echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" - read -e -p "古いドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # MySQLの交換 + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3437,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3458,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "関連するサイトを作成します" - echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" - read -e -p "既存のドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3476,25 +3475,25 @@ ldnmp_web_status() { ;; 5) - send_stats "アクセスログを表示します" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "エラーログを表示します" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "グローバル構成を編集します" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "サイト構成を編集します" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3503,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "サイトデータを表示します" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3540,16 +3539,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" - echo "公式ウェブサイトの紹介:$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1。インストール2。管理3。アンインストール" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3557,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}コントロール" + send_stats "${panelname}控制" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}アンインストール" + send_stats "${panelname}卸载" ;; *) break @@ -3615,8 +3614,8 @@ donlond_frp() { generate_frps_config() { - send_stats "FRPサーバーをインストールします" - # ランダムポートと資格情報を生成します + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3636,17 @@ EOF donlond_frp frps - # 出力生成情報 + # 输出生成的信息 ip_address echo "------------------------" - echo "クライアントの展開に必要なパラメーター" - echo "サービスIP:$ipv4_address" + 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 "FRP面板信息" + echo "FRP面板地址: http://$ipv4_address:$dashboard_port" + echo "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3656,9 @@ EOF configure_frpc() { - send_stats "FRPクライアントをインストールします" - read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr - read -e -p "外部ネットワークドッキングトークンを入力してください:" token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3679,17 +3678,17 @@ EOF } add_forwarding_service() { - send_stats "FRPイントラネットサービスを追加します" - # ユーザーにサービス名と転送情報を入力するように促します - read -e -p "サービス名を入力してください:" service_name - read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "イントラネットIPを入力してください[デフォルト127.0.0.1を入力]:" local_ip + read -e -p "请输入内网IP [回车默认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 + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # ユーザー入力を構成ファイルに書き込みます + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3698,8 @@ remote_port = ${remote_port} EOF - # 出力生成情報 - echo "仕える$service_nameFRPC.TOMLに正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3711,12 +3710,12 @@ EOF delete_forwarding_service() { - send_stats "FRPイントラネットサービスを削除します" - # ユーザーに削除する必要があるサービス名を入力するように促します - read -e -p "削除する必要があるサービス名を入力してください:" service_name - # SEDを使用して、サービスとその関連構成を削除します + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "仕える$service_nameFRPC.TOMLから削除されました" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3726,7 +3725,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3746,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3755,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前の値をクリアします + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3789,7 +3788,7 @@ list_forwarding_services() { } END { - # 最後のサービスの情報を印刷します + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3801,17 @@ list_forwarding_services() { -# FRPサーバーポートを取得します +# 获取 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以外のポートがあるかどうかを確認してください + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3820,18 @@ generate_access_urls() { fi done - # 有効なポートがある場合にのみタイトルとコンテンツを表示します + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRPサービス外部アクセスアドレス:" + echo "FRP服务对外访问地址:" - # IPv4アドレスを処理します + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # IPv6アドレスを処理する(存在する場合) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3840,7 @@ generate_access_urls() { done fi - # HTTPS構成の処理 + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3867,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3875,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRPサーバー$check_frp $update_status" - echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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 "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00。サービスのステータスを更新します0。前のメニューに戻ります" + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3902,7 +3901,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPサーバーがインストールされています" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3911,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPサーバーが更新されました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3922,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; 5) - echo "ドメイン名アクセスへの逆イントラネット侵入サービス" - send_stats "FRP外部ドメイン名へのアクセス" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IPアクセスを許可します" - read -e -p "リリースするポートを入力してください:" frps_port + 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 + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "FRPサービスステータスを更新します" - echo "FRPサービスステータスは更新されました" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3966,7 +3965,7 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3973,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRPクライアント$check_frp $update_status" - echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3984,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3999,7 +3998,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4008,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRPクライアントが更新されました" + echo "FRP客户端已经更新完成" ;; 3) @@ -4020,7 +4019,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; 4) @@ -4066,68 +4065,68 @@ yt_menu_pro() { fi clear - send_stats "YT-DLPダウンロードツール" + 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 -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 "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" - echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "オプション番号を入力してください:" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "YT-DLPのインストール..." - echo "YT-DLPのインストール..." + send_stats "正在安装 yt-dlp..." + echo "正在安装 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "インストールが完了しました。任意のキーを押して続行します..." + echo "安装完成。按任意键继续..." read ;; 2) - send_stats "yt-dlpを更新..." - echo "yt-dlpを更新..." + send_stats "正在更新 yt-dlp..." + echo "正在更新 yt-dlp..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新が完了しました。任意のキーを押して続行します..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "yt-dlpのアンインストール..." - echo "yt-dlpのアンインストール..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アンインストールが完了しました。任意のキーを押して続行します..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "単一のビデオダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "ダウンロードが完了したら、任意のキーを押して続行します..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "バッチビデオのダウンロード" + 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.0&from_spmid=666.25.Episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "バッチダウンロードを開始します..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4134,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "カスタムビデオのダウンロード" - read -e -p "完全なYT-DLPパラメーター(YT-DLPを除く)を入力してください。" custom + 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 "実行が完了したら、キーを押して続行します..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3ダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "ビデオを削除します" - read -e -p "削除ビデオの名前を入力してください:" rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4194,7 @@ set_timedate() { -# DPKG割り込みの問題を修正します +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4203,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}システムの更新...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4222,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi } @@ -4231,7 +4230,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4259,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "清理包管理器缓存..." apk cache clean - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "APKキャッシュを削除してください..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4283,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "未使用の依存関係をクリーンアップ..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "清理包管理器缓存..." pkg clean -y - echo "システムログを削除してください..." + echo "删除系统日志..." rm -rf /var/log/* - echo "一時ファイルを削除します..." + echo "删除临时文件..." rm -rf /tmp/* else - echo "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi return @@ -4340,26 +4339,26 @@ fi set_dns_ui() { root_use -send_stats "DNSを最適化します" +send_stats "优化DNS" while true; do clear - echo "DNSアドレスを最適化します" + echo "优化DNS地址" echo "------------------------" - echo "現在のDNSアドレス" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1。外国DNS最適化:" + 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 "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3。DNS構成を手動で編集します" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4366,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "外国のDNS最適化" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4374,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内のDNS最適化" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "DNS構成を手動で編集します" + send_stats "手动编辑DNS配置" ;; *) break @@ -4403,13 +4402,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthenticationが見つかった場合は、はいに設定します + # 如果找到 PasswordAuthentication 设置为 yes 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はyesに設定されています + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4417,7 +4416,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthenticationもPubKeyAuthenticationが一致しない場合は、デフォルト値を設定します + # 如果 PasswordAuthentication 和 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" @@ -4428,7 +4427,7 @@ correct_ssh_config() { new_ssh_port() { - # バックアップSSH構成ファイル + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4440,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSHポートは次のように変更されています。$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4459,7 +4458,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4470,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4499,7 +4498,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4508,26 +4507,26 @@ import_sshkey() { add_sshpasswd() { -echo "ルートパスワードを設定します" +echo "设置你的ROOT密码" 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}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "システムを再インストールします" + 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 @@ -4538,41 +4537,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}最初のパスワード:${gl_huang}LeitboGi0ro${gl_bai}初期ポート:${gl_huang}22${gl_bai}" - echo -e "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4587,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "再インストールするシステムを選択してください:" sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "Debian 13を再インストールします" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4609,49 @@ dd_xitong() { ;; 2) - send_stats "Debian 12を再インストールします" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Debian 11を再インストールします" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Debian 10を再インストールします" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "Ubuntu 24.04を再インストールします" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "Ubuntu 22.04を再インストールします" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Ubuntu 20.04を再インストールします" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "Ubuntu 18.04を再インストールします" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4660,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10を再インストールします" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4668,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9を再インストールします" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4676,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールします" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4684,7 @@ dd_xitong() { ;; 24) - send_stats "alma9を再インストールします" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4692,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10を再インストールします" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4700,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9を再インストールします" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4708,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42を再インストールします" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4716,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41を再インストールします" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4724,7 @@ dd_xitong() { ;; 29) - send_stats "CENTOS10を再インストールします" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4732,7 @@ dd_xitong() { ;; 30) - send_stats "CENTOS9を再インストールします" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4740,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールします" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4748,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールします" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4756,7 @@ dd_xitong() { ;; 33) - send_stats "Kaliを再インストールします" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4764,7 @@ dd_xitong() { ;; 34) - send_stats "Openeulerを再インストールします" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4772,7 @@ dd_xitong() { ;; 35) - send_stats "OpenSuseを再インストールします" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4780,7 @@ dd_xitong() { ;; 36) - send_stats "飛ぶ牛をリロードします" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4789,7 @@ dd_xitong() { 41) - send_stats "Windows11を再インストールします" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4797,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "Windows 10を再インストールします" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Windows 7を再インストールします" + send_stats "重装windows7" 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 @@ -4812,21 +4811,21 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "Windows Server 19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "Windows Server 16を再インストールします" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4833,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11アームを再インストールします" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4850,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3管理" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4863,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "XanmodのBBRV3カーネルをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "カーネル管理" + echo "内核管理" echo "------------------------" - echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4884,7 +4883,7 @@ bbrv3() { # 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:リポジトリを追加します + # 步骤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+') @@ -4893,7 +4892,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmodカーネルが更新されました。再起動後に有効になります" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4902,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4916,13 +4915,13 @@ bbrv3() { else clear - echo "BBR3加速度をセットアップします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "Debian/Ubuntuのみをサポートします" - echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4930,12 +4929,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "オペレーティングシステムの種類を決定できません" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4946,7 +4945,7 @@ bbrv3() { # 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:リポジトリを追加します + # 步骤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+') @@ -4957,17 +4956,17 @@ bbrv3() { bbr_on - echo "Xanmodカーネルがインストールされ、BBR3が正常に有効になります。再起動後に有効になります" + 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 "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4976,40 +4975,40 @@ bbrv3() { elrepo_install() { - # Elrepo GPG公開キーをインポートします - echo "Elrepo GPG公開キーをインポートしてください..." + # 导入 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" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # 検出されたオペレーティングシステム情報を印刷します - echo "検出されたオペレーティングシステム:$os_name $os_version" - # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "Elrepoリポジトリ構成(バージョン8)をインストールしてください..." + 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)をインストールしてください..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "サポートされていないシステムバージョン:$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします - echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5017,37 +5016,37 @@ elrepo_install() { elrepo() { root_use - send_stats "レッドハットカーネル管理" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "Elrepo Kernelをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "カーネル管理" + echo "内核管理" echo "------------------------" - echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + 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カーネルを更新します" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" - send_stats "レッドハットカーネルをアンインストールします" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5060,26 +5059,26 @@ elrepo() { else clear - echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" - echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hatカーネルをアップグレードします" + send_stats "升级红帽内核" server_reboot ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5090,7 +5089,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5099,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "スキャンするディレクトリを指定してください。" + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}スキャンディレクトリ$@...${gl_bai}" + 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コマンドパラメーターを作成します + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5120,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Dockerコマンドを実行します + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5129,8 @@ clamav_scan() { 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}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" + 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}" } @@ -5143,23 +5142,23 @@ clamav_scan() { clamav() { root_use - send_stats "ウイルススキャン管理" + send_stats "病毒扫描管理" while true; do clear - echo "クラマブウイルススキャンツール" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" - echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアを含む。" + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3。カスタムディレクトリスキャン${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "フルディスクスキャン" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5167,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5175,8 @@ clamav() { break_end ;; 3) - send_stats "カスタムディレクトリスキャン" - read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5193,21 @@ clamav() { -# 高性能モード最適化関数 +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5220,36 +5219,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # レイテンシを減らすために、大きな透明なページを無効にします + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# イコライゼーションモード最適化関数 +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5261,36 +5260,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # 透明なページを復元します + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# デフォルト設定関数を復元します +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}仮想メモリを復元します...${gl_bai}" + 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}" + 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 @@ -5302,37 +5301,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" - # 透明なページを復元します + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# ウェブサイトの構築最適化機能 +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}ウェブサイトの構築最適化モードに切り替えます...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}仮想メモリを最適化します...${gl_bai}" + 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}" + 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 @@ -5344,16 +5343,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}その他の最適化...${gl_bai}" - # レイテンシを減らすために、大きな透明なページを無効にします + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5363,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linuxカーネルチューニング管理" - echo "Linuxシステムにおけるカーネルパラメーターの最適化" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" - echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" - echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" - echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" - echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" - echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" - echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能モードの最適化" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "バランスモードの最適化" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "ウェブサイトの最適化モデル" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "ライブストリーミング最適化" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "ゲームサーバーの最適化" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "デフォルト設定を復元します" + send_stats "还原默认设置" ;; *) break @@ -5446,7 +5445,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5455,17 +5454,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "サポートされていないシステム:$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "サポートされていないシステム、システムタイプは認識できません。" + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5475,29 +5474,29 @@ update_locale() { linux_language() { root_use -send_stats "システム言語を切り替えます" +send_stats "切换系统语言" while true; do clear - echo "現在のシステム言語:$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1。英語2。簡素化された中国語3。伝統的な中国語" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えます" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "簡素化された中国人に切り替えます" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "伝統的な中国人に切り替えます" + send_stats "切换到繁体中文" ;; *) break @@ -5519,7 +5518,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5530,10 +5529,10 @@ break_end shell_bianse() { root_use - send_stats "コマンドラインの美化ツール" + send_stats "命令行美化工具" while true; do clear - echo "コマンドラインの美化ツール" + 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}#" @@ -5543,9 +5542,9 @@ shell_bianse() { 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5590,7 +5589,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "システムリサイクルステーション" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5604,17 @@ linux_trash() { fi clear - echo -e "現在のリサイクルビン${trash_status}" - echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" - echo "3。コンテンツを復元4。リサイクルビンをクリアします" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5623,7 +5622,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5631,23 +5630,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "復元するにはファイル名を入力してください。" file_to_restore + 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ホームディレクトリに復元されました。" + echo "$file_to_restore 已还原到主目录。" else - echo "ファイルは存在しません。" + echo "文件不存在。" fi ;; 4) - read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "リサイクルビンがクリアされました。" + echo "回收站已清空。" fi ;; *) @@ -5658,23 +5657,23 @@ linux_trash() { } linux_fav() { -send_stats "コマンドのお気に入り" +send_stats "命令收藏夹" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップを作成します +# 创建备份 create_backup() { - send_stats "バックアップを作成します" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # ユーザーにバックアップディレクトリを入力するように求めます - echo "バックアップ例を作成します:" - echo "- 単一のディレクトリをバックアップします: /var /www" - echo "- バックアップ複数のディレクトリ: /etc /home /var /log" - echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" - read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5681,119 @@ create_backup() { "/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 "選択したバックアップディレクトリは次のとおりです。" + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # バックアップを作成します - echo "バックアップを作成します$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # コマンドが成功しているかどうかを確認してください + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "バックアップの作成に失敗しました!" + echo "备份创建失败!" exit 1 fi } -# バックアップを復元します +# 恢复备份 restore_backup() { - send_stats "バックアップを復元します" - # 復元するバックアップを選択します - read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "备份文件不存在!" exit 1 fi - echo "バックアップの回復$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "バックアップと復元を正常に!" + echo "备份恢复成功!" else - echo "バックアップリカバリに失敗しました!" + echo "备份恢复失败!" exit 1 fi } -# バックアップをリストします +# 列出备份 list_backups() { - echo "利用可能なバックアップ:" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# バックアップを削除します +# 删除备份 delete_backup() { - send_stats "バックアップを削除します" + send_stats "删除备份" - read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "备份文件不存在!" exit 1 fi - # バックアップを削除します + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "バックアップは正常に削除されました!" + echo "备份删除成功!" else - echo "バックアップの削除が失敗しました!" + echo "备份删除失败!" exit 1 fi } -# バックアップメインメニュー +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "システムバックアップ機能" - echo "システムバックアップ機能" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } @@ -5806,56 +5805,56 @@ linux_backup() { -# 接続リストを表示します +# 显示连接列表 list_connections() { - echo "接続の保存:" + 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 "- ユーザー名:root" - echo "- ポート:22" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "接続名を入力してください:" name - read -e -p "IPアドレスを入力してください:" ip - read -e -p "ユーザー名(デフォルト:root)を入力してください:" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "ポート番号を入力してください(デフォルト:22):" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "認証方法を選択してください:" - echo "1。パスワード" - echo "2。キー" - read -e -p "選択(1/2)を入力してください:" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + 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" @@ -5864,89 +5863,89 @@ add_connection() { fi ;; *) - echo "無効な選択!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "接続が保存されます!" + echo "连接已保存!" } -# 接続を削除します +# 删除连接 delete_connection() { - send_stats "接続を削除します" - read -e -p "削除するには、接続番号を入力してください。" num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続​​は見つかりませんでした。" + 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 "接続が削除されました!" + echo "连接已删除!" } -# 接続を使用します +# 使用连接 use_connection() { - send_stats "接続を使用します" - read -e -p "使用するには、接続番号を入力してください。" num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続​​は見つかりませんでした。" + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "接続$name ($ip)..." + 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.ターゲットサーバーがキーを使用してログインできるかどうか。" + 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 "错误:未安装 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サービスが正常に実行されているかどうか。" + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "SSHリモート接続ツール" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5957,21 @@ ssh_manager() { while true; do clear - echo "SSHリモート接続ツール" - echo "SSHを介して他のLinuxシステムに接続できます" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5988,156 +5987,156 @@ ssh_manager() { -# 利用可能なハードディスクパーティションをリストします +# 列出可用的硬盘分区 list_partitions() { - echo "利用可能なハードディスクパーティション:" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントします +# 挂载分区 mount_partition() { - send_stats "パーティションをマウントします" - read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "パーティションはすでに取り付けられています!" + echo "分区已经挂载!" return fi - # マウントポイントを作成します + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントします + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "パーティションマウントに正常に:$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "パーティションマウントは失敗しました!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# パーティションをアンインストールします +# 卸载分区 unmount_partition() { - send_stats "パーティションをアンインストールします" - read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "パーティションはマウントされていません!" + echo "分区未挂载!" return fi - # パーティションをアンインストールします + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティションのアンインストールに正常に:$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "パーティションのアンインストールに失敗しました!" + echo "分区卸载失败!" fi } -# マウントされたパーティションをリストします +# 列出已挂载的分区 list_mounted_partitions() { - echo "マウントされたパーティション:" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# フォーマットパーティション +# 格式化分区 format_partition() { - send_stats "フォーマットパーティション" - read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションが既にマウントされているかどうかを確認してください + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "パーティションがマウントされました。最初にアンインストールしてください!" + echo "分区已经挂载,请先卸载!" return fi - # ファイルシステムタイプを選択します - echo "ファイルシステムタイプを選択してください:" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "選択を入力してください:" FS_CHOICE + 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 ;; + *) echo "无效的选择!"; return ;; esac - # フォーマットを確認します - read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作はキャンセルされました。" + echo "操作已取消。" return fi - # フォーマットパーティション - echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティション形式は成功しました!" + echo "分区格式化成功!" else - echo "パーティションのフォーマットが失敗しました!" + echo "分区格式化失败!" fi } -# パーティションステータスを確認します +# 检查分区状态 check_partition() { - send_stats "パーティションステータスを確認します" - read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # パーティションが存在するかどうかを確認します + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "分区不存在!" return fi - # パーティションステータスを確認します - echo "パーティション /dev /$PARTITION状態:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# メインメニュー +# 主菜单 disk_manager() { - send_stats "ハードディスク管理機能" + send_stats "硬盘管理功能" while true; do clear - echo "ハードディスクパーティション管理" - echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" - echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6145,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } -# タスクリストを表示します +# 显示任务列表 list_tasks() { - echo "保存された同期タスク:" + 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)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/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 + 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 + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + 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" @@ -6211,63 +6210,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "無効なキーコンテンツ!" + echo "无效的密钥内容!" return fi ;; *) - echo "無効な選択!" + echo "无效的选择!" return ;; esac - echo "同期モードを選択してください:" - echo "1。標準モード(-AVZ)" - echo "2。ターゲットファイル(-avz - delete)を削除します" - read -e -p "(1/2)を選択してください:" mode + 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" ;; + *) 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 "タスクが節約されました!" + echo "任务已保存!" } -# タスクを削除します +# 删除任务 delete_task() { - send_stats "同期タスクを削除します" - read -e -p "削除するには、タスク番号を入力してください。" num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:対応するタスクは見つかりませんでした。" + 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 "削除されたタスク!" + echo "任务已删除!" } run_task() { - send_stats "同期タスクを実行します" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # パラメーターを分析します + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6277,51 @@ run_task() { num="$1" fi - # 着信タスク番号がない場合は、ユーザーに入力するように促します + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "実行するタスク番号を入力してください:" num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:タスクは見つかりませんでした!" + 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" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # SSH接続の共通パラメーターを追加します + # 添加 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 "错误:未安装 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" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6330,32 +6329,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同期は完了です!" + echo "同步完成!" else - echo "同期は失敗しました!以下を確認してください。" - echo "1。ネットワーク接続は正常ですか?" - echo "2。リモートホストにアクセスできますか?" - echo "3。認証情報は正しいですか?" - echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# 時限タスクを作成します +# 创建定时任务 schedule_task() { - send_stats "同期タイミングタスクを追加します" + send_stats "添加同步定时任务" - read -e -p "定期的に同期するには、タスク番号を入力してください。" num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "错误: 请输入有效的任务编号!" return fi - echo "時限実行間隔を選択してください:" - echo "1)1時間に1回実行します" - echo "2)1日1回実行します" - echo "3)週に1回実行します" - read -e -p "オプションを入力してください(1/2/3):" interval + 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="" @@ -6363,66 +6362,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "エラー:有効なオプションを入力してください!" ; return ;; + *) 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 "エラー:このタスクのタイミング同期はすでに存在しています!" + echo "错误: 该任务的定时同步已存在!" return fi - # ユーザーにクロンタブを作成します + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "タイミングタスクが作成されました。$cron_job" + echo "定时任务已创建: $cron_job" } -# スケジュールされたタスクを表示します +# 查看定时任务 view_tasks() { - echo "現在のタイミングタスク:" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# タイミングタスクを削除します +# 删除定时任务 delete_task_schedule() { - send_stats "同期タイミングタスクを削除します" - read -e -p "削除するには、タスク番号を入力してください。" num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "削除されたタスク番号$numタイミングタスク" + echo "已删除任务编号 $num 的定时任务" } -# タスク管理メインメニュー +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "RSYNCリモート同期ツール" - echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1.新しいタスクを作成します2。タスクを削除します" - echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6。タイミングタスクを削除します" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6430,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "按回车键继续..." done } @@ -6448,7 +6447,7 @@ rsync_manager() { linux_ps() { clear - send_stats "システム情報クエリ" + send_stats "系统信息查询" ip_address @@ -6498,41 +6497,41 @@ linux_ps() { echo "" - echo -e "システム情報クエリ" + 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}Linuxバージョン:${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}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}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}オペレーター:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6アドレス:${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6545,111 +6544,111 @@ linux_tools() { while true; do clear - # send_stats「基本ツール」 - echo -e "基本的なツール" + # 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}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" - echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" - echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" - echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" + echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${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}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}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}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" curl --help - send_stats "カールをインストールします" + send_stats "安装curl" ;; 2) clear install wget clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" wget --help - send_stats "WGETをインストールします" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" sudo --help - send_stats "sudoをインストールします" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" socat -h - send_stats "SOCATをインストールします" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "HTOPをインストールします" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "IFTOPをインストールします" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" unzip - send_stats "unzipをインストールします" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" tar --help - send_stats "タールをインストールします" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" tmux --help - send_stats "tmuxをインストールします" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "ffmpegをインストールします" + send_stats "安装ffmpeg" ;; 11) @@ -6657,7 +6656,7 @@ linux_tools() { install btop clear btop - send_stats "BTOPをインストールします" + send_stats "安装btop" ;; 12) clear @@ -6666,7 +6665,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールします" + send_stats "安装ranger" ;; 13) clear @@ -6675,7 +6674,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDUをインストールします" + send_stats "安装ncdu" ;; 14) clear @@ -6684,7 +6683,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZFをインストールします" + send_stats "安装fzf" ;; 15) clear @@ -6693,7 +6692,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIMをインストールします" + send_stats "安装vim" ;; 16) clear @@ -6702,7 +6701,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールします" + send_stats "安装nano" ;; @@ -6713,7 +6712,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールします" + send_stats "安装git" ;; 21) @@ -6721,67 +6720,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrixをインストールします" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "SLをインストールします" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "バステットをインストールします" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "nsnakeをインストールします" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "Ninvadersをインストールします" + send_stats "安装ninvaders" ;; 31) clear - send_stats "すべてをインストールします" + 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 "すべてをインストールします(ゲームやスクリーンセーバーを除く)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "すべてをアンインストールします" + 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 + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "指定されたソフトウェアをインストールします" + send_stats "安装指定软件" ;; 42) clear - read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "指定されたソフトウェアをアンインストールします" + send_stats "卸载指定软件" ;; 0) @@ -6789,7 +6788,7 @@ linux_tools() { ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -6803,27 +6802,27 @@ linux_tools() { linux_bbr() { clear - send_stats "BBR管理" + 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 "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "AlpineはBBR3を有効にします" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6868,18 +6867,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}現在のバックアップリスト:${NC}" - ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし" + echo -e "${BLUE}当前备份列表:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } # ---------------------------- - # バックアップ + # 备份 # ---------------------------- backup_docker() { - echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}" - read -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers + send_stats "Docker备份" + + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + docker ps --format '{{.Names}}' + read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip install_docker @@ -6890,7 +6892,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}コンテナは見つかりません${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6898,28 +6900,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "#自動的に生成された復元スクリプト" >> "$RESTORE_SCRIPT" + echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" - # パッケージ化されたプロジェクトのパスを記録して、パッケージの重複を避ける + # 记录已打包过的 Compose 项目路径,避免重复打包 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}バックアップコンテナ:$c${NC}" + echo -e "${GREEN}备份容器: $c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cはい、Docker-Composeコンテナ${NC}" + echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "Compose Directoryは検出されません。手動でパスを入力してください。" project_dir + read -p "未检测到 compose 目录,请手动输入路径: " project_dir fi - # Composeプロジェクトがパッケージ化されている場合は、スキップしてください + # 如果该 Compose 项目已经打包过,跳过 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトを作成する[$project_name]バックアップ、複製パッケージをスキップ...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6927,136 +6929,137 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "#docker-compose Recovery:$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}プロジェクトを作成する[$project_name]パック:${project_dir}${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" else - echo -e "${RED}docker-compose.ymlが見つかりません、このコンテナをスキップしてください...${NC}" + echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" fi else - # 通常のコンテナバックアップボリューム + # 普通容器备份卷 local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "梱包ロール:$path" + echo "打包卷: $path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done - # ポート + # 端口 local PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 環境変数 + # 环境变量 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # ボリュームマッピング + # 卷映射 local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 鏡 + # 镜像 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\ n#復元コンテナ:$c" >> "$RESTORE_SCRIPT" + echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # /home /dockerのすべてのファイルをバックアップします(サブディレクトリを除く) + # 备份 /home/docker 下的所有文件(不含子目录) if [ -d "/home/docker" ]; then - echo -e "${BLUE}/home /dockerの下のファイルをバックアップ...${NC}" - find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - - echo -e "${GREEN}/home /dockerの下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - + echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}バックアップが完了しました:${BACKUP_DIR}${NC}" - echo -e "${GREEN}利用可能な復元スクリプト:${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 削減 + # 还原 # ---------------------------- restore_docker() { - list_backups - read -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } - echo -e "${BLUE}復元操作を開始します...${NC}" + send_stats "Docker还原" + read -p "请输入要还原的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + echo -e "${BLUE}开始执行还原操作...${NC}" install tar jq gzip install_docker - # ------------------------------ + # --------- 优先还原 Compose 项目 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "元のパスが見つかりませんでした。復元ディレクトリパスを入力してください。" original_path + [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path - # Composeプロジェクトのコンテナがすでに実行されているかどうかを確認します + # 检查该 compose 项目的容器是否已经在运行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}プロジェクトを作成する[$project_name]すでにコンテナが走っています、復元をスキップします...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" continue fi - read -p "Composeプロジェクトの復元を確認します[$project_name]パスへ[$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "新しい復元パスを入力してください:" original_path + read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}プロジェクトを作成する[$project_name]減圧:$original_path${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}プロジェクトを作成する[$project_name]復元が完了しました!${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" fi done - # ------------------------------ - echo -e "${BLUE}通常のDockerコンテナを確認して復元します...${NC}" + # --------- 继续还原普通容器 --------- + echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}コンテナの処理:$container${NC}" + echo -e "${GREEN}处理容器: $container${NC}" - # 容器が既に存在し、実行中かどうかを確認してください + # 检查容器是否已经存在且正在运行 if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container]走っています、復元をスキップします...${NC}" + echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}ミラー情報は見つかりませんでした、スキップ:$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } - # ポートマッピング + # 端口映射 PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 環境変数 + # 环境变量 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # ボリュームマッピング +ボリュームデータリカバリ + # 卷映射 + 卷数据恢复 VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7067,32 +7070,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "ボリュームデータの回復:$VOL_SRC" + echo "恢复卷数据: $VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 既存のが実行されていないコンテナを削除します + # 删除已存在但未运行的容器 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container]存在しますが、実行していません。古いコンテナを削除してください...${NC}" + echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" docker rm -f "$container" fi - # コンテナを起動します - echo "restoreコマンドを実行します:docker run -d - name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # 启动容器 + echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}通常のコンテナのバックアップ情報は見つかりませんでした${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" - # /home /dockerの下でファイルを復元します + # 还原 /home/docker 下的文件 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}/home /dockerの下でファイルを復元します...${NC}" + echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home /dockerの下のファイルが復元されました${NC}" + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else - echo -e "${YELLOW}/home /dockerの下のファイルのバックアップは見つかりませんでした、スキップ...${NC}" + echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" fi @@ -7100,66 +7103,68 @@ docker_ssh_migration() { # ---------------------------- - # 移動します + # 迁移 # ---------------------------- migrate_docker() { - ensure_jq - list_backups - read -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + send_stats "Docker迁移" + install jq + read -p "请输入要迁移的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } - read -p "ターゲットサーバーIP:" TARGET_IP - read -p "ターゲットサーバーSSHユーザー名:" TARGET_USER + read -p "目标服务器IP: " TARGET_IP + read -p "目标服务器SSH用户名: " TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}バックアップを転送...${NC}" + echo -e "${YELLOW}传输备份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーでログインします + # 使用密钥登录 scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # バックアップを削除します + # 删除备份 # ---------------------------- delete_backup() { - list_backups - read -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + send_stats "Docker备份文件删除" + read -p "请输入要删除的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" + echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" } # ---------------------------- - # メインメニュー + # 主菜单 # ---------------------------- main_menu() { + send_stats "Docker备份迁移还原" while true; do clear echo "------------------------" - echo -e "Dockerバックアップ/移行/復元ツール" + echo -e "Docker备份/迁移/还原工具" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1。Dockerプロジェクトをバックアップします" - echo -e "2。Dockerプロジェクトを移行します" - echo -e "3. Dockerプロジェクトを復元します" - echo -e "4. Dockerプロジェクトのバックアップファイルを削除します" + echo -e "1. 备份docker项目" + echo -e "2. 迁移docker项目" + echo -e "3. 还原docker项目" + echo -e "4. 删除docker项目的备份文件" echo "------------------------" - echo -e "0。前のメニューに戻ります" + echo -e "0. 返回上一级菜单" echo "------------------------" - read -p "選択してください:" choice + read -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}無効なオプション${NC}" ;; + *) echo -e "${RED}无效选项${NC}" ;; esac + break_end done } @@ -7174,38 +7179,38 @@ linux_docker() { while true; do clear - # send_stats「Docker Management」 + # send_stats "docker管理" echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" - echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" + echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清潔な役に立たないドッカーコンテナとミラーネットワークデータボリューム" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" 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}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}11. ${gl_bai}开启Docker-ipv6访问" + echo -e "${gl_kjlan}12. ${gl_bai}关闭Docker-ipv6访问" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}バックアップ/移行/復元Docker環境" - echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" + echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "Docker環境をインストールします" + send_stats "安装docker环境" install_add_docker ;; @@ -7216,22 +7221,22 @@ linux_docker() { 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 "Dockerグローバルステータス" - echo "Dockerバージョン" + send_stats "docker全局状态" + echo "Docker版本" docker -v docker compose version echo "" - echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7246,8 +7251,8 @@ linux_docker() { 5) while true; do clear - send_stats "Dockerネットワーク管理" - echo "Dockerネットワークリスト" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7271,36 +7276,36 @@ linux_docker() { done echo "" - echo "ネットワーク操作" + echo "网络操作" echo "------------------------" - echo "1.ネットワークを作成します" - echo "2。インターネットに参加してください" - echo "3。ネットワークを終了します" - echo "4.ネットワークを削除します" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "ネットワークを作成します" - read -e -p "新しいネットワーク名を設定します:" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "インターネットに参加してください" - read -e -p "ネットワーク名に参加してください:" dockernetwork - read -e -p "これらのコンテナはネットワークに追加されます(複数のコンテナ名はスペースで区切られています):" dockernames + 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 + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7309,8 +7314,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除します" - read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7324,29 +7329,29 @@ linux_docker() { 6) while true; do clear - send_stats "Dockerボリューム管理" - echo "Dockerボリュームリスト" + send_stats "Docker卷管理" + echo "Docker卷列表" docker volume ls echo "" - echo "ボリューム操作" + echo "卷操作" echo "------------------------" - echo "1.新しいボリュームを作成します" - echo "2。指定されたボリュームを削除します" - echo "3.すべてのボリュームを削除します" + echo "1. 创建新卷" + echo "2. 删除指定卷" + echo "3. 删除所有卷" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "新しいボリュームを作成します" - read -e -p "新しいボリューム名を設定します:" dockerjuan + send_stats "新建卷" + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7355,7 +7360,7 @@ linux_docker() { ;; 3) - send_stats "すべてのボリュームを削除します" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7364,7 +7369,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7377,7 +7382,7 @@ linux_docker() { ;; 7) clear - send_stats "Dockerクリーニング" + send_stats "Docker清理" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7386,13 +7391,13 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear - send_stats "Dockerソース" + send_stats "Docker源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7408,13 +7413,13 @@ linux_docker() { 11) clear - send_stats "Docker V6が開いています" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker V6レベル" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7425,7 +7430,7 @@ linux_docker() { 20) clear - send_stats "Dockerアンインストール" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7437,7 +7442,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7446,7 +7451,7 @@ linux_docker() { kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7463,151 +7468,151 @@ linux_test() { while true; do clear - # send_stats「テストスクリプトコレクション」 - echo -e "テストスクリプトコレクション" + # 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ストリーミングメディアのロック解除検出" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}ネットワーク速度測定" - echo -e "${gl_kjlan}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" - echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" - echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" - echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}网络线路测速" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}IICU/GB5 CPUパフォーマンステストスクリプト" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}包括的なテスト" - echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" - echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}综合性测试" + echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" + 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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "CHATGPTはステータス検出のロックを解除します" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "リージョンストリーミングメディアのロック解除テスト" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "YeahWUストリーミングメディアのロック解除検出" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "XYKT_IP品質の身体検査スクリプト" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "MTR_TRACE 3ネットワークリターンラインテスト" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "SuperSpeed Three-Net速度測定" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace高速バックホールテストスクリプト" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "Nxtraceは、IPバックホールテストスクリプトを指定します" - echo "参照できるIPのリスト" + send_stats "nxtrace指定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 "広州通信:58.60.188.222" - echo "広州ユニコム:210.21.196.6" - echo "広州モバイル:120.196.165.24" - echo "成都通信:61.139.2.69" - echo "成都ユニコム:119.6.6.6" - echo "成都モバイル: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 "北京电信: 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "指定されたIPを入力してください:" testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "Ludashi2020 3ネットワークラインテスト" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "I-ABC多機能速度テストスクリプト" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "ネットワーク品質のテストスクリプト" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "YABSパフォーマンステスト" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "ベンチパフォーマンステスト" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX Fusion Monster Review" + 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 ;; @@ -7617,7 +7622,7 @@ linux_test() { ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7633,51 +7638,51 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud Scriptコレクション" - echo -e "Oracle Cloud Scriptコレクション" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}アイドルマシンアクティブスクリプトをインストールします" - echo -e "${gl_kjlan}2. ${gl_bai}アイドルマシンアクティブスクリプトをアンインストールします" + 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}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "アクティブスクリプト:CPUが10-20%を占めるメモリは20%を占めています" - read -e -p "必ずインストールしますか? (y/n):" choice + 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 + # 提示用户输入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 + 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 + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # Dockerコンテナを実行します + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7685,14 +7690,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloudインストールアクティブスクリプト" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7700,20 +7705,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "システムを再インストールします" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - read -e -p "必ず続行しますか? (y/n):" choice + 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 + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7725,28 +7730,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "選択の無効な、再入力してください。" + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "再インストールされたパスワードを入力してください:" vpspasswd + 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再インストールシステムスクリプト" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "この機能は開発段階にあるので、お楽しみに!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7756,15 +7761,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -7785,7 +7790,7 @@ docker_tato() { 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}" + 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 } @@ -7806,7 +7811,7 @@ 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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7834,31 +7839,31 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp webサイトビルディング" - echo -e "${gl_huang}LDNMP Webサイトビルディング" + # 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}WordPressをインストールします${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" - echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" - echo -e "${gl_huang}9. ${gl_bai}LinkStack共有リンクプラットフォームをインストールします${gl_huang}20. ${gl_bai}動的サイトをカスタマイズします" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" - echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" - echo -e "${gl_huang}27. ${gl_bai}AIペイントプロンプトワードジェネレーターをインストールします${gl_huang}28. ${gl_bai}サイトの逆プロキシロードバランス" - echo -e "${gl_huang}30. ${gl_bai}静的サイトをカスタマイズします" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7872,10 +7877,10 @@ linux_ldnmp() { 3) clear - # ディスクフォーラム + # Discuz论坛 webname="Discuz论坛" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,21 +7903,21 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; 4) clear - # Kedao Cloudデスクトップ + # 可道云桌面 webname="可道云桌面" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,20 +7939,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" - echo "Redisホスト:Redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # Apple CMS + # 苹果CMS webname="苹果CMS" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7978,24 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベースプレフィックス:mac_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "インストールが成功した後、バックグラウンドアドレスにログインします" + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 一本足のカウントカード + # 独脚数卡 webname="独脚数卡" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,34 +8016,34 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" - echo "Redisアドレス:Redis" - echo "Redisパスワード:デフォルトで記入されていません" - echo "Redisポート:6379" + echo "redis地址: redis" + echo "redis密码: 默认不填写" + echo "redis端口: 6379" echo "" - echo "ウェブサイトURL:https://$yuming" - echo "バックグラウンドログインパス: /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "ユーザー名:admin" - echo "パスワード:管理者" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" - echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # フララムフォーラム + # flarum论坛 webname="flarum论坛" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8080,12 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:flarum_" - echo "管理者情報は自分で設定されます" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -8088,8 +8093,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8113,11 +8118,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースプレフィックス:typecho_" - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -8126,8 +8131,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,18 +8157,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8180,10 +8185,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8198,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.phpが配置されているパス" + 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 "(/home/web/html/に似たindex.phpのパスを入力してください$yuming/wordpress/): " index_lujing + 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 -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1。PHPの最新バージョン| 2。Php7.4:" pho_v + 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 @@ -8217,15 +8222,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "選択の無効な、再入力してください。" + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "インストールされた拡張機能" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8235,25 +8240,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8263,10 +8268,10 @@ linux_ldnmp() { 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 "データベースインポートテーブルデータ" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "データベースのインポートが完了しました" + echo "数据库导入完成" ;; *) echo @@ -8278,12 +8283,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" - echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:$prefix" - echo "管理者ログイン情報は自分で設定されます" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -8296,10 +8301,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "ジャンプドメイン名を入力してください:" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -8321,7 +8326,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8332,11 +8337,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" - read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8356,8 +8361,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8379,8 +8384,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8397,8 +8402,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8431,8 +8436,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "インストール$webname" - echo "展開を開始します$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8449,10 +8454,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8462,12 +8467,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.htmlが配置されているパス" + 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 "(/home/web/html/に似たindex.htmlへのパスを入力してください$yuming/index/): " index_lujing + 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 @@ -8492,21 +8497,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP環境バックアップ" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "バックアップファイルが作成されました: /home /$backup_filename" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8514,9 +8519,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" + echo "文件已传送至远程服务器home目录。" else - echo "転送されるファイルは見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; @@ -8524,7 +8529,7 @@ linux_ldnmp() { break ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8532,9 +8537,9 @@ linux_ldnmp() { 33) clear - send_stats "タイミングのリモートバックアップ" - read -e -p "リモートサーバーIPを入力してください:" useip - read -e -p "リモートサーバーのパスワードを入力してください:" usepasswd + 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 @@ -8544,18 +8549,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1。毎週のバックアップ2。毎日のバックアップ" - read -e -p "選択を入力してください:" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "毎週のバックアップ(0-6、0は日曜日を表す)の曜日を選択します。" weekday + 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 + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8569,19 +8574,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP環境修復" - echo "利用可能なサイトバックアップ" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + 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 @@ -8591,7 +8596,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8600,7 +8605,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "圧縮パッケージは見つかりませんでした。" + echo "没有找到压缩包。" fi ;; @@ -8618,11 +8623,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP環境を更新します" - echo "LDNMP環境を更新します" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "コンポーネントの新しいバージョンを発見します" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8642,13 +8647,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" + echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5。完全な環境を更新します" + echo "5. 更新完整环境" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8657,7 +8662,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8668,13 +8673,13 @@ linux_ldnmp() { 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}仕上げる" + 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 + 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 @@ -8707,8 +8712,8 @@ linux_ldnmp() { 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}仕上げる" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 4) @@ -8719,15 +8724,15 @@ linux_ldnmp() { 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}仕上げる" + 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環境を完全に更新します" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8753,7 +8758,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP環境をアンインストールします" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8767,7 +8772,7 @@ linux_ldnmp() { ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8777,7 +8782,7 @@ linux_ldnmp() { ;; *) - echo "無効な入力!" + echo "无效的输入!" esac break_end @@ -8797,12 +8802,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "アプリケーション市場" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # ループで色を設定します + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8811,67 +8816,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" - echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" - echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" - echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" - echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" - echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" - echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" - echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" - echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" - echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" - echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" - echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" - echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" - echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" - echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" - echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" - echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" - echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" - echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" - echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" - echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" - echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" - echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー" + echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice fi case $sub_choice in @@ -8990,6 +8998,9 @@ while true; do docker_rum() { + mkdir -p /home/docker/openlist + chmod -R 777 /home/docker/openlist + docker run -d \ --restart=always \ -v /home/docker/openlist:/opt/openlist/data \ @@ -9021,8 +9032,8 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" admin - read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9055,7 +9066,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを作る" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9064,20 +9075,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezhaの監視$check_docker $update_status" - echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" - echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1。使用します" + echo "1. 使用" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9134,7 +9145,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建設します" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9144,43 +9155,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "郵便局サービス$check_docker $update_status" - echo "Poste.ioはオープンソースメールサーバーソリューションです。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "アクセスアドレス:" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "これらのDNSレコードを最初に解析します" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9190,7 +9201,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "任意のキーを押して続行します..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9209,9 +9220,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.ioがインストールされています" + echo "poste.io已经安装完成" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -9234,9 +9245,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.ioがインストールされています" + echo "poste.io已经安装完成" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -9247,7 +9258,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "应用已卸载" ;; *) @@ -9281,7 +9292,7 @@ while true; do clear ip_address - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -9291,7 +9302,7 @@ while true; do 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がインストールされています" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -9301,7 +9312,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9385,7 +9396,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -9399,7 +9410,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -9544,7 +9555,7 @@ while true; do ;; 19|safeline) - send_stats "サンダープールを構築します" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9552,20 +9563,20 @@ while true; do while true; do check_docker_app clear - echo -e "サンダープールサービス$check_docker" - echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9575,7 +9586,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "サンダープールWAFパネルがインストールされています" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9588,7 +9599,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "サンダープールWAFパネルが更新されました" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9599,7 +9610,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9718,8 +9729,8 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" admin - read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10007,7 +10018,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="公式ウェブサイトの紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10060,7 +10071,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoyaファミリーバケット" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10264,9 +10275,9 @@ while true; do prometheus_install clear ip_address - echo "インストール" + echo "已经安装完成" check_docker_app_ip - echo "最初のユーザー名とパスワードは次のとおりです" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10284,7 +10295,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10371,7 +10382,7 @@ while true; do 51|pve) clear - send_stats "PVEチキン" + send_stats "PVE开小鸡" 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 ;; @@ -10491,7 +10502,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10506,7 +10517,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10534,7 +10545,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10549,7 +10560,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10557,7 +10568,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10578,17 +10589,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip - echo "初期ユーザー名:admin" - echo "最初のパスワード:changeme" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "アプリが更新されました" + echo "应用已更新" } @@ -10598,7 +10609,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10645,7 +10656,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10661,7 +10672,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -10923,7 +10934,7 @@ while true; do docker_rum() { - read -e -p "libretvログインパスワードを設定します。" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10957,9 +10968,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "ログインユーザー名を設定します:" admin - read -e -p "ログインユーザーパスワードを設定します。" admin_password - read -e -p "承認コードを入力してください:" shouquanma + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password + read -e -p "输入授权码: " shouquanma mkdir -p /home/docker/moontv @@ -10969,13 +10980,13 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -10989,7 +11000,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11062,8 +11073,8 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" app_use - read -e -p "ログインパスワードの設定:" app_passwd + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -11160,11 +11171,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 公式のDocker-ComposeおよびEnvファイルをダウンロードします + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # ランダムキーとパスワードを生成します + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11173,17 +11184,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 管理者アカウント情報を追加します + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # コンテナを起動します + # 启动容器 docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -11193,7 +11204,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 元の変数を保持します + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11210,7 +11221,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11260,7 +11271,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11278,7 +11289,7 @@ while true; do docker_rum() { - read -e -p "設定${docker_name}SK-159KEJILIONYYDS163などのログインキー(SKターニング文字と数字の組み合わせ):" app_passwd + read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11382,7 +11393,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -11395,7 +11406,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11556,7 +11567,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "初期ユーザーまたは管理者を作成します。次のユーザー名とパスワード、およびあなたが管理者であるかどうかを設定してください。" + echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11608,7 +11619,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "インストール" + echo "已经安装完成" check_docker_app_ip } @@ -11622,7 +11633,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "アプリはアンインストールされています" + echo "应用已卸载" } docker_app_plus @@ -11661,24 +11672,282 @@ while true; do ;; + 93|dufs) + + local app_id="93" + local docker_name="dufs" + local docker_img="sigoden/dufs" + local docker_port=8093 + + docker_rum() { + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}:/data \ + -p ${docker_port}:5000 \ + ${docker_img} /data -A + + } + + local docker_describe="极简静态文件服务器,支持上传下载" + local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 94|gopeed) + + local app_id="94" + local docker_name="gopeed" + local docker_img="liwei2633/gopeed" + local docker_port=8094 + + docker_rum() { + + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}/downloads:/app/Downloads \ + -v /home/docker/${docker_name}/storage:/app/storage \ + -p ${docker_port}:9999 \ + ${docker_img} -u ${app_use} -p ${app_passwd} + + } + + local docker_describe="分布式高速下载工具,支持多种协议" + local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 95|paperless) + + local app_id="95" + + local app_name="paperless文档管理平台" + local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" + local app_url="视频介绍: https://docs.paperless-ngx.com/" + local docker_name="paperless-webserver-1" + local docker_port="8095" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/paperless + mkdir -p /home/docker/paperless/export + mkdir -p /home/docker/paperless/consume + cd /home/docker/paperless + + curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml + curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml + cd /home/docker/paperless + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/paperless/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/paperless/ && docker compose down --rmi all + rm -rf /home/docker/paperless + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + 97|wgs) + + local app_id="97" + local docker_name="wireguard" + local docker_img="lscr.io/linuxserver/wireguard:latest" + local docker_port=51820 + + docker_rum() { + + read -p "请输入组网的客户端数量 (默认 5): " COUNT + COUNT=${COUNT:-5} + + PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + + stop_containers_or_kill_process 51820 &>/dev/null + + ip_address + docker run -d \ + --name=wireguard \ + --network host \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e SERVERURL=${ipv4_address} \ + -e SERVERPORT=51820 \ + -e PEERS=${PEERS} \ + -e INTERNAL_SUBNET=10.13.13.0 \ + -e ALLOWEDIPS=10.13.13.0/24 \ + -e PERSISTENTKEEPALIVE_PEERS=all \ + -e LOG_CONFS=true \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules \ + --restart unless-stopped \ + lscr.io/linuxserver/wireguard:latest + + + sleep 3 + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + for f in "$d"/*.conf; do + grep -q "^PersistentKeepalive *= *25$" "$f" || \ + sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + done + done + ' + + docker exec -it wireguard bash -c ' + for d in /config/peer_*; do + cd "$d" || continue + conf_file=$(ls *.conf) + base_name="${conf_file%.conf}" + echo "生成二维码: $base_name.png" + qrencode -o "$base_name.png" < "$conf_file" + done + ' + + sleep 2 + docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + sleep 2 + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + sleep 2 + echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" + echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 98|wgc) + + local app_id="98" + local docker_name="wireguardc" + local docker_img="kjlion/wireguard:alpine" + local docker_port=51820 + + docker_rum() { + + mkdir -p /home/docker/wireguard/config/ + + local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CONFIG_FILE")" + + echo "请粘贴你的客户端配置,连续按两次回车保存:" + + # 初始化变量 + input="" + empty_line_count=0 + + # 逐行读取用户输入 + while IFS= read -r line; do + if [[ -z "$line" ]]; then + ((empty_line_count++)) + if [[ $empty_line_count -ge 2 ]]; then + break + fi + else + empty_line_count=0 + input+="$line"$'\n' + fi + done + + # 写入配置文件 + echo "$input" > "$CONFIG_FILE" + + echo "客户端配置已保存到 $CONFIG_FILE" + + docker run -d \ + --name wireguardc \ + --network host \ + --cap-add NET_ADMIN \ + --cap-add SYS_MODULE \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules:ro \ + --restart always \ + kjlion/wireguard:alpine + + sleep 3 + + docker logs wireguardc + + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear - send_stats "すべてのアプリケーションバックアップ" + send_stats "全部应用备份" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "バックアップファイルが作成されました: /$backup_filename" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + echo "备份文件已创建: /$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11686,14 +11955,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "ファイルは、リモートサーバー/ルートディレクトリに転送されました。" + echo "文件已传送至远程服务器/根目录。" else - echo "転送されるファイルは見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; *) - echo "注:現在、バックアップにはDockerプロジェクトのみが含まれており、Pagodaや1PanelなどのWebサイトビルディングパネルのデータバックアップは含まれていません。" + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -11703,29 +11972,29 @@ while true; do r) root_use - send_stats "すべてのアプリケーションが復元されます" - echo "利用可能なアプリバックアップ" + send_stats "全部应用还原" + echo "可用的应用备份" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージを使用します + # 如果用户没有输入文件名,使用最新的压缩包 if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "アプリケーションデータが復元されました。指定されたアプリケーションメニューを手動で入力し、アプリケーションを更新してアプリケーションを復元してください。" + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" else - echo "圧縮パッケージは見つかりませんでした。" + echo "没有找到压缩包。" fi ;; @@ -11748,35 +12017,35 @@ linux_work() { while true; do clear - send_stats "バックエンドワークスペース" - echo -e "バックエンドワークスペース" - echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" - echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "現在既存のワークスペースのリスト" + 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}ワークスペースNo. 2" - echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" - echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" - echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" - echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" - echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" - echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" - echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" - echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 10" + 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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11784,7 +12053,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11792,63 +12061,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11860,21 +12129,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常駐モード" - echo -e "SSH常駐モード${tmux_sshd_status}" - echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1。2をオンにします。オフにします" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" gongzuoqu_del + 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 + 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 ;; @@ -11890,29 +12159,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "カスタムワークスペース" + send_stats "自定义工作区" ;; 23) - read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "バックグラウンドワークスペースにコマンドを注入します" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "ワークスペースを削除します" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -11937,54 +12206,54 @@ linux_Settings() { while true; do clear - # send_stats「システムツール」 - echo -e "システムツール" + # 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}指定されたバージョンのPythonをインストールします" - 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}ルートアカウントを無効にして新しいアカウントを作成します${gl_kjlan}10. ${gl_bai}優先順位IPv4/IPv6を切り替えます" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}ウイルススキャンツール${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}ファイルマネージャー" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "ショートカットキーを入力してください(出口に0を入力してください):" kuaijiejian + 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 "スクリプトのショートカットキーが設定されています" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11992,34 +12261,34 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定します" - echo "ログインパスワードを設定します" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "ルートパスワードモード" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "Pyバージョン管理" - echo "Pythonバージョン管理" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 3.12 3.11 3.10 3.9 3.8 2.7" + echo "查询更多版本: https://www.python.org/downloads/" echo "------------" - read -e -p "インストールするPythonバージョン番号を入力します(Enter 0からExit):" py_new_v + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "スクリプトPy管理" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -12052,7 +12321,7 @@ linux_Settings() { 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 "不明なパッケージマネージャー!" + echo "未知的包管理器!" return fi @@ -12081,55 +12350,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "スイッチスクリプトPyバージョン" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "オープンポート" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "すべてのポートが開いています" + echo "端口已全部开放" ;; 6) root_use - send_stats "SSHポートを変更します" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 現在のSSHポート番号をお読みください + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # ユーザーに新しいSSHポート番号を入力するように促します - read -e -p "新しいSSHポート番号を入力してください:" new_port + # 提示用户输入新的 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ポートが変更されました" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSHポート変更を終了します" + send_stats "退出SSH端口修改" break else - echo "ポート番号は無効です。1〜65535の数字を入力してください。" - send_stats "無効なSSHポート入力" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "入力が無効です。番号を入力してください。" - send_stats "無効なSSHポート入力" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -12148,8 +12417,8 @@ EOF ;; 9) root_use - send_stats "新しいユーザーはルートを無効にします" - read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12164,49 +12433,49 @@ EOF passwd -l root - echo "操作が完了しました。" + echo "操作已完成。" ;; 10) root_use - send_stats "V4/V6の優先度を設定します" + send_stats "设置v4/v6优先级" while true; do clear - echo "V4/V6の優先度を設定します" + 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}優先度" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "優先ネットワークを選択します。" choice + 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の優先度に切り替えました" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "IPv6の優先度に切り替えました" - send_stats "IPv6の優先度に切り替えました" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12224,43 +12493,43 @@ EOF 12) root_use - send_stats "仮想メモリを設定します" + send_stats "设置虚拟内存" while true; do clear - echo "仮想メモリを設定します" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G仮想メモリが設定されています" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G仮想メモリが設定されています" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G仮想メモリが設定されています" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "カスタム仮想メモリが設定されています" + send_stats "已设置自定义虚拟内存" ;; *) @@ -12273,8 +12542,8 @@ EOF 13) while true; do root_use - send_stats "ユーザー管理" - echo "ユーザーリスト" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12285,62 +12554,62 @@ EOF echo "" - echo "アカウント操作" + echo "账户操作" echo "------------------------" - echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3.最高の権限を与える4。最高の権限をキャンセルします" + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5.アカウントを削除します" + echo "5. 删除账号" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 新しいユーザーを作成し、パスワードを設定します + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作が完了しました。" + echo "操作已完成。" ;; 2) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 新しいユーザーを作成し、パスワードを設定します + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 新規ユーザーのsudo許可を付与します + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作が完了しました。" + echo "操作已完成。" ;; 3) - read -e -p "ユーザー名を入力してください:" username - # 新規ユーザーのsudo許可を付与します + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudoアクセス許可を削除します + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "削除するにはユーザー名を入力してください:" username - # ユーザーとそのホームディレクトリを削除します + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -12353,50 +12622,50 @@ EOF 14) clear - send_stats "ユーザー情報ジェネレーター" - echo "ランダムユーザー名" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "ランダムユーザー名$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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つのランダムユーザー名を生成します + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "ランダムuuid" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "ランダムuuid$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16ビットランダムパスワード" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32ビットランダムパスワード" + 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" + echo "随机密码 $i: $password" done echo "" @@ -12404,46 +12673,46 @@ EOF 15) root_use - send_stats "タイムゾーンを変更します" + send_stats "换时区" while true; do clear - echo "システム時間情報" + echo "系统时间信息" - # 現在のシステムタイムゾーンを取得します + # 获取当前系统时区 local timezone=$(current_timezone) - # 現在のシステム時間を取得します + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # タイムゾーンと時間を表示します - echo "現在のシステムタイムゾーン:$timezone" - echo "現在のシステム時間:$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "タイムゾーンの切り替え" + echo "时区切换" echo "------------------------" - echo "アジア" - echo "1。中国の上海時間2。中国の香港時間" - echo "3。日本の東京時間4。韓国のソウル時間" - echo "5。シンガポール時間6。インドのコルカタ時間" - echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" - echo "9。タイのバンコクでの時間" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "アメリカ" - echo "21。WesternTime22。東部時間" - echo "23。カナダ時間24。メキシコの時間" - echo "25。ブラジル時間26。アルゼンチン時間" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31。UTCグローバル標準時間" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -12486,21 +12755,21 @@ EOF 18) root_use - send_stats "ホスト名を変更します" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "新しいホスト名を入力してください(出口に0を入力してください):" new_hostname + 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などの他のシステム。 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12518,11 +12787,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "ホスト名は次のように変更されています。$new_hostname" - send_stats "ホスト名が変更されました" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "終了すると、ホスト名は変更されていません。" + echo "已退出,未更改主机名。" break fi done @@ -12530,32 +12799,32 @@ EOF 19) root_use - send_stats "システムの更新ソースを変更します" + send_stats "换系统更新源" clear - echo "更新ソース領域を選択します" - echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "中国本土のデフォルトソース" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国本土の教育源" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外起源" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "キャンセル" + echo "已取消" ;; esac @@ -12563,62 +12832,62 @@ EOF ;; 20) - send_stats "タイミングタスク管理" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "タイミングされたタスクリスト" + echo "定时任务列表" crontab -l echo "" - echo "動作します" + echo "操作" echo "------------------------" - echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1。毎月のタスク2。毎週のタスク" - echo "3。毎日のタスク4。時間ごとのタスク" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "選択を入力してください:" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "毎月何日を選択してタスクを実行しますか? (1-30):" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "時限タスクを追加します" + send_stats "添加定时任务" ;; 2) - read -e -p "削除する必要があるキーワードを入力してください。" kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "タイミングタスクを削除します" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "タイミングタスクを編集します" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -12630,32 +12899,32 @@ EOF 21) root_use - send_stats "ローカルホストの解析" + send_stats "本地host解析" while true; do clear - echo "ネイティブホストのペルシングリスト" - echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "動作します" + echo "操作" echo "------------------------" - echo "1.新しい解析2を追加します。解析アドレスを削除します" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "ローカルホストの解析が追加されました" + send_stats "本地host解析新增" ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "ローカルホストの解析と削除" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -12666,7 +12935,7 @@ EOF 22) root_use - send_stats "SSH防御" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12678,20 +12947,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防衛プログラム$check_docker" - echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" - echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 安装防御程序" echo "------------------------" - echo "2。SSH傍受記録を表示します" - echo "3。リアルタイムログ監視" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 卸载防御程序" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -12714,7 +12983,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -12727,47 +12996,47 @@ EOF 23) root_use - send_stats "電流制限シャットダウン機能" + send_stats "限流关机功能" while true; do clear - echo "電流制限シャットダウン機能" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # limiting_shut_down.shファイルが存在するかどうかを確認してください + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gbの値を取得します + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 新しい仮想メモリサイズを入力します - echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" - read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -12780,15 +13049,15 @@ EOF (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 "現在の制限シャットダウンが設定されています" + 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 "現在の制限シャットダウン関数はオフになっています" + echo "已关闭限流关机功能" ;; *) break @@ -12801,40 +13070,40 @@ EOF 24) root_use - send_stats "秘密キーログイン" + send_stats "私钥登录" while true; do clear - echo "ルート秘密キーログインモード" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "キーペアが生成され、SSHログインのより安全な方法" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "新しいキーを生成します" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "既存の公開キーをインポートします" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "地元の秘密の鍵を表示します" + send_stats "查看本机密钥" echo "------------------------" - echo "公開鍵情報" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "秘密のキー情報" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12850,18 +13119,18 @@ EOF 25) root_use - send_stats "電報警告" - echo "TG-BOTモニタリングと早期警告機能" - echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" - echo "しきい値に達した後、ユーザーはユーザーに送信されます" - echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" - read -e -p "必ず続行しますか? (y/n):" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "電報警告が有効になっています" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -12883,7 +13152,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 〜/.Profileファイルに追加します + # 添加到 ~/.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 @@ -12894,21 +13163,21 @@ EOF source ~/.profile clear - echo "TG-BOT早期警告システムが開始されました" - echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "SSHの高リスクの脆弱性を修正します" + 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 @@ -12952,7 +13221,7 @@ EOF ;; 37) clear - send_stats "コマンドラインの履歴" + 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; } @@ -12975,61 +13244,61 @@ EOF 41) clear - send_stats "メッセージボード" - echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "ワンストップチューニング" - echo "ワンストップシステムの最適化" + 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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10。システムジャンクファイルをクリーンアップします" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13046,25 +13315,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10。 DNSアドレスを自動的に最適化します${gl_huang}${gl_bai}" + 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 -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。 Linuxシステムのカーネルパラメーターの最適化" - echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -13072,7 +13341,7 @@ EOF 99) clear - send_stats "システムを再起動します" + send_stats "重启系统" server_reboot ;; 100) @@ -13088,32 +13357,32 @@ EOF local status_message="无法确定的状态" fi - echo "プライバシーとセキュリティ" - echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。" + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "現在のステータス:$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1。コレクションをオンにします" - echo "2。コレクションを閉じます" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + 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 "プライバシーとセキュリティコレクションが有効になっています" + 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 "プライバシーとセキュリティは収集のために閉鎖されています" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -13129,11 +13398,11 @@ EOF 102) clear - send_stats "テックライオンスクリプトをアンインストールします" - echo "テックライオンスクリプトをアンインストールします" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" - read -e -p "必ず続行しますか? (y/n):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13141,16 +13410,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "スクリプトはアンインストールされています、さようなら!" + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "キャンセル" + echo "已取消" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -13160,7 +13429,7 @@ EOF ;; *) - echo "無効な入力!" + echo "无效的输入!" ;; esac break_end @@ -13178,187 +13447,187 @@ EOF linux_file() { root_use - send_stats "ファイルマネージャー" + send_stats "文件管理器" while true; do clear - echo "ファイルマネージャー" + echo "文件管理器" echo "------------------------" - echo "現在のパス" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" - echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" - echo "15.ファイルを削除します" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" - echo "25。ファイルを別のサーバーに渡します" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "ディレクトリ名を入力してください:" dirname - cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" - send_stats "ディレクトリに移動します" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "作成するにはディレクトリ名を入力してください。" dirname - mkdir -p "$dirname" && echo "作成されたディレクトリ" || echo "作成に失敗しました" - send_stats "ディレクトリを作成します" + 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 "ディレクトリ権限を変更します" + 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 "ディレクトリの名前を変更します" + 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 "ディレクトリを削除します" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "前のメニューディレクトリに戻ります" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "作成するにはファイル名を入力してください。" filename - touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" - send_stats "ファイルを作成します" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "編集するにはファイル名を入力してください:" filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "ファイルを編集します" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "ファイル名を入力してください:" filename - read -e -p "許可を入力してください(755など):" perm - chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました" - send_stats "ファイル権限を変更します" + 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 "ファイルの名前を変更します" + 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 "ファイルを削除します" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" - send_stats "圧縮ファイル/ディレクトリ" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "ファイル名(.tar.gz)を入力してください:" filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" - send_stats "ファイル/ディレクトリを解凍します" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" - send_stats "ファイルまたはディレクトリを移動します" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # -Rオプションを使用して、ディレクトリを再帰的にコピーします - cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" - send_stats "ファイルまたはディレクトリをコピーします" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "転送されるファイルパスを入力してください。" file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "エラー:ファイルは存在しません。" - send_stats "ファイルの転送に失敗しました:ファイルは存在しません" + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" - send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "エラー:リモートサーバーのパスワードを入力してください。" - send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "ログインポートを入力してください(デフォルト22):" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "スクリプトは最新です$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13656,15 +13925,15 @@ while true; do (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 "自動スクリプトの更新をオンにします" + 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 "スクリプト自動更新を閉じます" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -13686,41 +13955,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "テクノロジーライオンスクリプトツールボックスv$sh_v" -echo -e "コマンドライン入力${gl_huang}k${gl_kjlan}スクリプトをすばやく開始します${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}ワープ管理" -echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" -echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" -echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" -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}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu Serverオープニングスクリプト" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "選択を入力してください:" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "システムの更新" ; linux_update ;; - 3) clear ; send_stats "システムのクリーンアップ" ; linux_clean ;; + 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 + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -13731,13 +14000,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "無効な入力!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -13745,68 +14014,68 @@ done k_info() { -send_stats "Kコマンド参照ユースケース" +send_stats "k命令参考用例" echo "-------------------" -echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "以下は、Kコマンドリファレンスユースケースです。" -echo "スクリプトkを開始します" -echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" -echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" -echo "システムKアップデートを更新| Kアップデート" -echo "クリーンシステムガベージkクリーン| kきれい" -echo "システムパネルk dd |を再インストールしますk再インストール" -echo "BBR3コントロールパネルK BBR3 | K BBRV3" -echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" -echo "仮想メモリkスワップ2048を設定します" -echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" -echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" -echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" -echo "SSHリモート接続ツールK SSH | Kリモート接続" -echo "rsyncリモート同期ツールk rsync | Kリモート同期" -echo "ハードディスク管理ツールKディスク| Kハードディスク管理" -echo "イントラネット浸透(サーバー側)K FRP" -echo "イントラネット浸透(クライアント)K FRPC" -echo "ソフトウェアStart K Start SSHD | k sshdを開始します" -echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" -echo "ソフトウェア再起動k再起動sshd | k再起動sshd" -echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" -echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" -echo "ドメイン名証明書アプリケーションK SSL" -echo "ドメイン名証明書の有効期限クエリK SSL PS" -echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" -echo "Docker Container Management K Docker PS | K Dockerコンテナ" -echo "Docker Image Management K Docker IMG | K Docker画像" -echo "LDNMPサイト管理k Web" -echo "LDNMPキャッシュクリーンアップK Webキャッシュ" -echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" -echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" -echo "ロードバランスkロードバランス| kロードバランシングをインストールします" -echo "ファイアウォールパネルk fhq | kファイアウォール" -echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" -echo "コマンドお気に入りk fav | Kコマンドのお気に入り" -echo "アプリ市場管理Kアプリ" -echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # パラメーターがない場合は、インタラクティブロジックを実行します + # 如果没有参数,运行交互式逻辑 kejilion_sh else - # パラメーターがある場合は、対応する関数を実行します + # 如果有参数,执行相应函数 case $1 in install|add|安装) shift - send_stats "ソフトウェアをインストールします" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "ソフトウェアをアンインストールします" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -13840,7 +14109,7 @@ else rsync_run) shift - send_stats "タイム付きRSYNC同期" + send_stats "定时rsync同步" run_task "$@" ;; @@ -13859,7 +14128,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13872,13 +14141,13 @@ else swap) shift - send_stats "仮想メモリをすばやく設定します" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンをすばやく設定します" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -13926,42 +14195,42 @@ else status|状态) shift - send_stats "ソフトウェアステータスビュー" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "ソフトウェアスタートアップ" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "ソフトウェアの一時停止" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "ソフトウェアの再起動" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "ソフトウェアが起動します" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "証明書のステータスを確認してください" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "すぐに証明書を申請してください" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "すぐに証明書を申請してください" + send_stats "快速申请证书" else k_info fi @@ -13971,15 +14240,15 @@ else shift case $1 in install|安装) - send_stats "Dockerをすばやくインストールします" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "クイックコンテナ管理" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "クイックミラー管理" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14006,7 +14275,7 @@ else app) shift - send_stats "$@を適用します" + send_stats "应用$@" linux_panel "$@" ;; @@ -14016,4 +14285,3 @@ else ;; esac fi - diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 33e749951..cab3eb64a 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.0" +sh_v="4.1.2" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# 명령을 실행할 함수를 정의합니다 +# 定义一个函数来执行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! -# 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. -# 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 사용자에게 이용 약관에 동의하라는 메시지 +# 提示用户同意条款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Tech Lion Script Toolbox에 오신 것을 환영합니다${gl_bai}" - echo "스크립트를 처음 사용하면 사용자 라이센스 계약을 읽고 동의하십시오." - echo "사용자 라이센스 계약 : https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" + echo "首次使用脚本,请先阅读并同意用户许可协议。" + echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "위의 용어에 동의하십니까? (Y/N) :" user_input + read -r -p "是否同意以上条款?(y/n): " user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "라이센스 동의" + 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 "허가 거부" + send_stats "许可拒绝" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "패키지 매개 변수는 제공되지 않습니다!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}설치$package...${gl_bai}" + echo -e "${gl_huang}正在安装 $package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "현재 사용 가능한 공간 : $ ((uvery_space_mb/1024)) g" - echo "최소 수요 공간 :${required_gb}G" - echo "설치를 계속할 수 없습니다. 디스크 공간을 청소하고 다시 시도하십시오." - send_stats "불충분 한 디스크 공간" + echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" + echo "当前可用空间: $((available_space_mb/1024))G" + echo "最小需求空间: ${required_gb}G" + echo "无法继续安装,请清理磁盘空间后重试。" + send_stats "磁盘空间不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "패키지 매개 변수는 제공되지 않습니다!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}제거$package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return 1 fi done } -# 다양한 분포에 적합한 범용 SystemCTL 기능 +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 서비스를 다시 시작하십시오 +# 重启服务 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1서비스가 다시 시작되었습니다." + echo "$1 服务已重启。" else - echo "오류 : 다시 시작합니다$1서비스가 실패했습니다." + echo "错误:重启 $1 服务失败。" fi } -# 서비스를 시작하십시오 +# 启动服务 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1서비스가 시작되었습니다." + echo "$1 服务已启动。" else - echo "오류 : 시작$1서비스가 실패했습니다." + echo "错误:启动 $1 服务失败。" fi } -# 서비스 중지 +# 停止服务 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1서비스가 중단되었습니다." + echo "$1 服务已停止。" else - echo "오류 : 중지$1서비스가 실패했습니다." + echo "错误:停止 $1 服务失败。" fi } -# 서비스 상태를 확인하십시오 +# 查看服务状态 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1서비스 상태가 표시됩니다." + echo "$1 服务状态已显示。" else - echo "오류 : 표시 할 수 없습니다$1서비스 상태." + echo "错误:无法显示 $1 服务状态。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME전원 켜기로 설정합니다." + echo "$SERVICE_NAME 已设置为开机自启。" } break_end() { - echo -e "${gl_lv}작업이 완료되었습니다${gl_bai}" - echo "계속하려면 키를 누르십시오 ..." + echo -e "${gl_lv}操作完成${gl_bai}" + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -349,22 +349,21 @@ kejilion() { -check_port() { +stop_containers_or_kill_process() { + local port=$1 + local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) install lsof + 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() { - 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 - } +check_port() { stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } @@ -425,7 +424,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker 환경 설치 ...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -500,63 +499,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "도커 컨테이너 관리" - echo "도커 컨테이너 목록" + send_stats "Docker容器管理" + echo "Docker容器列表" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "컨테이너 작동" + echo "容器操作" echo "------------------------" - echo "1. 새 컨테이너를 만듭니다" + echo "1. 创建新的容器" echo "------------------------" - echo "2. 지정된 컨테이너를 시작하십시오. 6. 모든 컨테이너를 시작하십시오" - echo "3. 지정된 컨테이너를 중지하십시오. 7. 모든 컨테이너를 중지하십시오" - echo "4. 지정된 컨테이너를 삭제합니다. 8. 모든 컨테이너를 삭제하십시오" - echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" + echo "2. 启动指定容器 6. 启动所有容器" + echo "3. 停止指定容器 7. 停止所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" - echo "13. 컨테이너 네트워크보기 14. 컨테이너 점유보기" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "새 컨테이너를 만듭니다" - read -e -p "창조 명령을 입력하십시오 :" dockername + send_stats "新建容器" + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "지정된 컨테이너를 시작하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) - send_stats "지정된 컨테이너를 중지하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "停止指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "지정된 컨테이너를 삭제하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "지정된 컨테이너를 다시 시작하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "重启指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker restart $dockername ;; 6) - send_stats "모든 컨테이너를 시작하십시오" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) - send_stats "모든 컨테이너를 중지하십시오" + send_stats "停止所有容器" docker stop $(docker ps -q) ;; 8) - send_stats "모든 컨테이너를 삭제하십시오" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +564,28 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "모든 컨테이너를 다시 시작하십시오" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "컨테이너를 입력하십시오" - read -e -p "컨테이너 이름을 입력하십시오 :" dockername + send_stats "进入容器" + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "컨테이너 로그를 봅니다" - read -e -p "컨테이너 이름을 입력하십시오 :" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "컨테이너 네트워크를 봅니다" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +603,14 @@ while true; do break_end ;; 14) - send_stats "컨테이너 점유를 봅니다" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "컨테이너 포트 액세스를 허용합니다" - read -e -p "컨테이너 이름을 입력하십시오 :" docker_name + send_stats "允许容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +619,8 @@ while true; do ;; 16) - send_stats "컨테이너 포트 액세스 차단" - read -e -p "컨테이너 이름을 입력하십시오 :" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +639,44 @@ done docker_image() { while true; do clear - send_stats "도커 이미지 관리" - echo "도커 이미지 목록" + send_stats "Docker镜像管理" + echo "Docker镜像列表" docker image ls echo "" - echo "미러 작동" + echo "镜像操作" echo "------------------------" - echo "1. 지정된 이미지 가져 오기 3. 지정된 이미지 삭제" - echo "2. 지정된 이미지 업데이트 4. 모든 이미지 삭제" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "거울을 당기십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}이미지 얻기 :$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "이미지를 업데이트하십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}업데이트 된 이미지 :$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "거울을 삭제하십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "모든 이미지를 삭제합니다" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +685,7 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +753,16 @@ install_crontab() { service cron start ;; *) - echo "지원되지 않는 분포 :$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "운영 체제를 결정할 수 없습니다." + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}Crontab이 설치되고 Cron 서비스가 실행 중입니다.${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +774,27 @@ docker_ipv6_on() { 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를 사용하여 구성 파일 업데이트를 처리하십시오 + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 현재 구성에 이미 IPv6 설정이 있는지 확인하십시오 + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 구성 업데이트 및 IPv6을 활성화하십시오 + # 更新配置,开启 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}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +809,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 구성 파일이 있는지 확인하십시오 + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}구성 파일이 존재하지 않습니다${gl_bai}" + echo -e "${gl_hong}配置文件不存在${gl_bai}" return fi - # 현재 구성을 읽으십시오 + # 读取当前配置 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 현재 IPv6 상태를 확인하십시오 + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 원래 구성과 새로운 구성을 비교합니다 + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6 액세스는 현재 닫힙니다${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6 액세스가 성공적으로 닫혔습니다${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,117 +869,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "하나 이상의 포트 번호를 제공하십시오" + 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" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "포트가 열렸습니다" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "하나 이상의 포트 번호를 제공하십시오" + 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" + echo "已关闭端口 $port" fi done - # 기존 규칙 삭제 (있는 경우) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 새로운 규칙을 먼저 삽입하십시오 + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "포트 폐쇄" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "하나 이상의 IP 주소 또는 IP 세그먼트를 제공하십시오." + 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" + echo "已放行IP $ip" fi done save_iptables_rules - send_stats "IP 출시" + send_stats "已放行IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "하나 이상의 IP 주소 또는 IP 세그먼트를 제공하십시오." + 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" + echo "已阻止IP $ip" fi done save_iptables_rules - send_stats "IP 차단" + send_stats "已阻止IP" } @@ -990,7 +989,7 @@ block_ip() { enable_ddos_defense() { - # 방어 DDO를 켜십시오 + # 开启防御 DDoS 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 @@ -1000,12 +999,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS 방어를 켜십시오" + send_stats "开启DDoS防御" } -# DDOS 방어를 끕니다 +# 关闭DDoS防御 disable_ddos_defense() { - # 방어 DDO를 끄십시오 + # 关闭防御 DDoS 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 @@ -1015,14 +1014,14 @@ disable_ddos_defense() { 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 방어를 끕니다" + send_stats "关闭DDoS防御" } -# 국가 IP 규칙을 관리하는 기능 +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,73 +1032,73 @@ manage_country_rules() { case "$action" in block) - # IPSET가 존재하지 않는 경우 작성하십시오 + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IP 영역 파일을 다운로드하십시오 + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # IPSET에 IP를 추가하십시오 + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # iptables와 함께 IP를 차단하십시오 + # 使用 iptables 阻止 IP 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_codeIP 주소" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 허용 국가에 대한 IPSET 만들기 (존재하지 않는 경우) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # IP 영역 파일을 다운로드하십시오 + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + 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" - # IPSET에 IP를 추가하십시오 + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 지정된 국가의 IP 만 허용됩니다 + # 仅允许指定国家的 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_codeIP 주소" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 국가의 iptables 규칙을 삭제하십시오 + # 删除国家的 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을 파괴하십시오 + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "성공적으로 해제했습니다$country_codeIP 주소 제한" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1115,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "고급 방화벽 관리" - send_stats "고급 방화벽 관리" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "방화벽 관리" + echo "防火墙管理" echo "------------------------" - echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." - echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 지우십시오" + echo "5. IP白名单 6. IP黑名单" + echo "7. 清除指定IP" echo "------------------------" - echo "11. 핑 허용 12. 핑을 비활성화하십시오" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13. DDOS 방어 시작 14. DDOS 방어를 끄십시오" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15. 지정된 국가 IP 16. 지정된 국가 IP 만 허용됩니다." - echo "17. 지정된 국가에서 IP 제한을 해제합니다" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "열린 포트 번호를 입력하십시오 :" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "지정된 포트를 엽니 다" + send_stats "开放指定端口" ;; 2) - read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "지정된 포트를 닫습니다" + send_stats "关闭指定端口" ;; 3) - # 모든 포트를 엽니 다 + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1163,10 @@ iptables_panel() { 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 "모든 포트를 엽니 다" + send_stats "开放所有端口" ;; 4) - # 모든 포트를 닫습니다 + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,40 +1179,40 @@ iptables_panel() { 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 "모든 포트를 닫습니다" + send_stats "关闭所有端口" ;; 5) - # IP 화이트리스트 - read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IP 블랙리스트 - read -e -p "차단 된 IP 또는 IP 세그먼트를 입력하십시오." c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) - # 지정된 IP를 지우십시오 - read -e -p "청산 된 IP를 입력하십시오 :" d_ip + # 清除指定 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를 지우십시오" + send_stats "清除指定IP" ;; 11) - # 핑을 허용하십시오 + # 允许 PING 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 "핑을 허용하십시오" + send_stats "允许PING" ;; 12) - # 핑을 비활성화합니다 + # 禁用 PING 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 "핑을 비활성화합니다" + send_stats "禁用PING" ;; 13) enable_ddos_defense @@ -1223,20 +1222,20 @@ iptables_panel() { ;; 15) - read -e -p "차단 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "허용 국가$country_codeIP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "허용 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "나라를 차단하십시오$country_codeIP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "나라를 정리하십시오$country_codeIP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1256,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 현재 시스템에서 모든 스왑 파티션을 얻으십시오 + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 모든 스왑 파티션을 반복하고 삭제하십시오 + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # /swapfile이 더 이상 사용되지 않도록하십시오 + # 确保 /swapfile 不再被使用 swapoff /swapfile - # 이전 /스왑 파일을 삭제하십시오 + # 删除旧的 /swapfile rm -f /swapfile - # 새 스왑 파티션을 만듭니다 + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1287,7 @@ add_swap() { rc-update add local fi - echo -e "가상 메모리 크기가 크기가 커졌습니다${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1297,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야하는지 확인하십시오 +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1313,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginx 버전을 얻으십시오 + # 获取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 버전을 얻으십시오 + # 获取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 버전을 얻으십시오 + # 获取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 버전을 얻으십시오 + # 获取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}" @@ -1341,7 +1340,7 @@ ldnmp_v() { 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 @@ -1350,11 +1349,11 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.yml 파일을 다운로드하여 교체하십시오 + # 下载 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 파일로 교체하십시오 + # 在 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 @@ -1399,7 +1398,7 @@ install_ldnmp() { clear - echo "LDNMP 환경이 설치되었습니다" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1415,7 @@ install_certbot() { 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 "갱신 작업이 업데이트되었습니다" + echo "续签任务已更新" } @@ -1453,15 +1452,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming공개 키 정보${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming개인 키 정보${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}인증서 저장 경로${gl_bai}" - echo "공개 키 :/etc/letsencrypt/live/$yuming/fullchain.pem" - echo "개인 키 :/etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1469,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL 인증서를 신속하게 신청하고 만료 전에 서명을 자동으로 갱신하십시오.${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1485,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}응용 인증서 만료${gl_bai}" - echo "사이트 정보 인증서 만료 시간" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1525,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "도메인 이름 인증서에 대한 성공적인 응용 프로그램" + 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 배/도메인 이름/주)을 갖습니다." - echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "다시 배포를 시도하십시오$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1549,7 +1548,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "도메인 이름 재사용" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1557,8 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1623,8 +1622,8 @@ nginx_upgrade() { 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}마치다" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" } @@ -1643,11 +1642,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "로그인 정보 :" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "시작$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1657,29 +1656,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 구성 파일이 있는지 확인하십시오 + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 구성 파일에서 API_TOKE 및 ZONE_ID를 읽으십시오 + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # Zone_ids를 배열로 변환합니다 + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트합니다 - read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer + # 提示用户是否清理缓存 + 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 + 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를 루프하고 CLEAR CACHE 명령을 실행하십시오. + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "Zone_ID의 캐시 지우기 :$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1687,13 +1686,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "캐시 클리어 요청이 전송되었습니다." + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "사이트 캐시를 정리하십시오" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1702,28 @@ web_cache() { web_del() { - send_stats "사이트 데이터 삭제" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "사이트 데이터를 삭제하려면 도메인 이름을 입력하십시오 (여러 도메인 이름이 공간별로 분리됩니다)." yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "도메인 이름 삭제 :$yuming" + 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" + # 删除数据库前检查是否存在,避免报错 + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1739,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 모드 매개 변수에 따라 WAF를 켜거나 끄기로 결정 + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # WAF 켜기 : 주석을 제거하십시오 + # 开启 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 닫기 : 댓글을 추가하십시오 + # 关闭 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'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1802,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 오래된 정의를 삭제하십시오 + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1829,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 오래된 정의를 삭제하십시오 + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1857,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotli를 켜십시오 : 주석을 제거하십시오 + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1871,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotli를 닫습니다 : 주석을 추가하십시오 + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1887,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1913,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTD를 켜십시오 : 주석을 제거하십시오 + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1928,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # Zstd를 닫습니다 : 주석을 추가하십시오 + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1944,11 @@ nginx_zstd() { else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1975,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1990,7 +1989,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP 환경 방어" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2003,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "서버 웹 사이트 방어 프로그램${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 安装防御程序" echo "------------------------" - echo "5. SSH 차단 레코드보기 6. 웹 사이트 차단 레코드보기" - echo "7. 방어 규칙 목록보기 8. 로그의 실시간 모니터링보기" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. 인터셉트 매개 변수 구성 12. 차단 된 모든 IP를 지우십시오" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. CloudFlare 모드 22. 5 초 방패의 높은 하중" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31. WAF 32를 켜십시오. WAF를 끄십시오" - echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2081,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2097,11 +2096,11 @@ web_security() { ;; 21) - send_stats "CloudFlare 모드" - echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." + send_stats "cloudflare模式" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "CF 계정 번호를 입력하십시오." cfuser - read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2116,21 +2115,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlare 모드는 CF 배경, Site-Security-Events에서 인터셉트 레코드를 보도록 구성됩니다." + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "CF 매개 변수 가져 오기 :" - echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" - echo -e "CF 배경 도메인 이름 요약 페이지의 오른쪽 하단으로 이동하려면${gl_huang}지역 ID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CF 계정 번호를 입력하십시오." cfuser - read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken - read -e -p "CF에 도메인 이름의 영역 ID를 입력하십시오." cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2147,23 +2146,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "고 부하 자동 방패 오프닝 스크립트가 추가되었습니다" + echo "高负载自动开盾脚本已添加" else - echo "자동 방패 스크립트가 이미 존재합니다. 추가 할 필요가 없습니다." + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "사이트 waf가 활성화되어 있습니다" - send_stats "사이트 waf가 활성화되어 있습니다" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "사이트 waf가 닫혔습니다" - send_stats "사이트 waf가 닫혔습니다" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2189,10 +2188,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 현재 Worker_Processes 설정 값을 얻으십시오 +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 값에 따라 모드 정보를 설정합니다 +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2207,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTD가 활성화되어 있고 주석이 없는지 확인하십시오 (전체 라인은 ZSTD 켜기로 시작합니다.) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotli가 활성화되어 있고 댓글이 없는지 확인하십시오 + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2237,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP 환경을 최적화하십시오" - echo -e "LDNMP 환경을 최적화하십시오${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 표준 모드 2. 고성능 모드 (2H4G 이상 권장)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3. GZIP 압축 켜기 4. GZIP 압축 끄기" - echo "5. BR 압축 켜기 6. BR 압축 끄기" - echo "7. ZSTD 압축 켜기 8. ZSTD 압축 끄기" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "사이트 표준 모드" + send_stats "站点标准模式" - # nginx 튜닝 + # 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 튜닝 + # 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 튜닝 + # 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 @@ -2276,7 +2275,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # MySQL 튜닝 + # 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 @@ -2288,23 +2287,23 @@ web_optimization() { optimize_balanced - echo "LDNMP 환경은 표준 모드로 설정되었습니다" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "사이트 고성능 모드" + send_stats "站点高性能模式" - # nginx 튜닝 + # 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 튜닝 + # 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 튜닝 + # 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 @@ -2316,7 +2315,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # MySQL 튜닝 + # 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 @@ -2326,7 +2325,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 환경은 고성능 모드로 설정되었습니다" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2386,9 +2385,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker = "$ {gl_lv} $ {gl_bai} 설치" +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2396,7 +2395,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "액세스 주소 :" +echo "访问地址:" ip_address @@ -2434,31 +2433,31 @@ check_docker_image_update() { 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##*:} - # 기본 레이블이 최신입니다 + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 공식 이미지에 대한 지원을 추가하십시오 + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub API에서 이미지 게시 시간을 얻으십시오 + # 从 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 @@ -2477,7 +2476,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 컨테이너의 IP 주소를 가져옵니다 + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2486,34 @@ block_container_port() { install iptables - # 다른 모든 IP를 점검하고 차단하십시오 + # 检查并封禁其他所有 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를 확인하고 해제하십시오 + # 检查并放行指定 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을 확인하고 해제하십시오 + # 检查并放行本地网络 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를 점검하고 차단하십시오 + # 检查并封禁其他所有 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를 확인하고 해제하십시오 + # 检查并放行指定 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을 확인하고 해제하십시오 + # 检查并放行本地网络 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 @@ -2524,7 +2523,7 @@ block_container_port() { fi - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2535,7 +2534,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 컨테이너의 IP 주소를 가져옵니다 + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2544,17 @@ clear_container_rules() { install iptables - # 다른 모든 IP를 차단하는 명확한 규칙 + # 清除封禁其他所有 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를 공개하기위한 규칙을 지우십시오 + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2564,17 +2563,17 @@ clear_container_rules() { - # 다른 모든 IP를 차단하는 명확한 규칙 + # 清除封禁其他所有 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를 공개하기위한 규칙을 지우십시오 + # 清除放行指定 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 + # 清除放行本地网络 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 @@ -2585,7 +2584,7 @@ clear_container_rules() { fi - echo "IP+포트는 서비스에 액세스 할 수있었습니다" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2599,25 +2598,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." - echo "사용법 : block_host_port <포트 번호> <승인 된 ip>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # 다른 모든 IP 액세스를 거부했습니다 + # 拒绝其他所有 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 액세스를 허용합니다 + # 允许指定 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 @@ -2626,27 +2625,27 @@ block_host_port() { - # 다른 모든 IP 액세스를 거부했습니다 + # 拒绝其他所有 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 액세스를 허용합니다 + # 允许指定 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+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2658,47 +2657,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." - echo "사용법 : CLEAR_HOST_PORT_RULES <포트 번호> <승인 IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # 다른 모든 IP 액세스를 차단하는 명확한 규칙 + # 清除封禁所有其他 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 액세스를 허용하는 명확한 규칙 + # 清除允许指定 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 액세스를 차단하는 명확한 규칙 + # 清除封禁所有其他 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 액세스를 허용하는 명확한 규칙 + # 清除允许指定 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+포트는 서비스에 액세스 할 수있었습니다" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2727,7 +2726,7 @@ grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker docker_app() { -send_stats "${docker_name}관리하다" +send_stats "${docker_name}管理" while true; do clear @@ -2747,18 +2746,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2770,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name설치" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "설치하다$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,12 +2785,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name설치" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "고쳐 쓰다$docker_name" + send_stats "更新$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,30 +2799,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" - send_stats "제거하십시오$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}도메인 액세스 설정" - send_stats "${docker_name}도메인 액세스 설정" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IP 액세스 허용${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IP 액세스를 차단하십시오${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2859,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2894,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}도메인 액세스 설정" - send_stats "${docker_name}도메인 액세스 설정" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IP 액세스 허용${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IP 액세스를 차단하십시오${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2994,17 @@ 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 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,11 +3079,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "다시 시작" + echo "已重启" reboot ;; *) - echo "취소" + echo "已取消" ;; esac @@ -3127,8 +3126,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP 환경을 다시 설치할 수 없습니다" - echo -e "${gl_huang}힌트:${gl_bai}웹 사이트 구성 환경이 설치되었습니다. 다시 설치할 필요가 없습니다!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3138,10 +3137,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP 환경을 설치하십시오" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}LDNMP 환경이 설치되지 않았으며 LDNMP 환경 설치를 시작하십시오 ...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3154,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx 환경을 설치하십시오" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3168,8 @@ 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 "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3180,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "먼저 LDNMP 환경을 설치하십시오" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3191,7 +3190,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "Nginx 환경을 먼저 설치하십시오" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3202,16 +3201,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신 것$webname세워짐!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webname설치 정보는 다음과 같습니다." + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "당신 것$webname세워짐!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3223,8 +3222,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3263,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "반세대 IP를 입력하십시오 :" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "반세대 포트를 입력하십시오 :" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3297,14 +3296,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "공간으로 분리 된 여러 반세대 IP+ 포트를 입력하십시오 (예 : 127.0.0.1:3000 127.0.1:3002) :" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3357,12 +3356,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP 사이트 관리" - echo "LDNMP 환경" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - echo -e "대지:${output}인증서 만료 시간" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3374,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "데이터 베이스:${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 도메인 이름 인증서 신청/업데이트 2. 사이트 도메인 이름 변경" - echo "3. 사이트 캐시 정리 4. 관련 사이트 만들기" - echo "5. 액세스 로그보기 6. 오류 로그보기" - echo "7. 글로벌 구성 편집 8. 사이트 구성 편집" - echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서보기" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" + echo "5. 查看访问日志 6. 查看错误日志" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20. 지정된 사이트 데이터를 삭제합니다" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "도메인 이름 인증서를 신청하십시오" - read -e -p "도메인 이름을 입력하십시오 :" yuming + 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 @@ -3412,15 +3411,15 @@ ldnmp_web_status() { ;; 2) - send_stats "사이트 도메인 이름을 변경하십시오" - echo -e "${gl_hong}적극 권장 :${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" - read -e -p "이전 도메인 이름을 입력하십시오 :" oddyuming - read -e -p "새 도메인 이름을 입력하십시오 :" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # MySQL 교체 + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3437,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3458,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "관련 사이트를 만듭니다" - echo -e "액세스 용 기존 사이트의 새 도메인 이름을 연결하십시오." - read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming - read -e -p "새 도메인 이름을 입력하십시오 :" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3476,25 +3475,25 @@ ldnmp_web_status() { ;; 5) - send_stats "액세스 로그를 봅니다" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "오류 로그를 봅니다" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "글로벌 구성 편집" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "사이트 구성 편집" - read -e -p "사이트 구성을 편집하려면 편집 할 도메인 이름을 입력하십시오." yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3503,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "사이트 데이터를 봅니다" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3535,21 +3534,21 @@ fi install_panel() { -send_stats "${panelname}관리하다" +send_stats "${panelname}管理" while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}요즘 인기 있고 강력한 운영 및 유지 관리 패널입니다." - echo "공식 웹 사이트 소개 :$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1. 설치 2. 관리 3. 제거" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3558,20 +3557,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}설치하다" + send_stats "${panelname}安装" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}제어" + send_stats "${panelname}控制" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}제거하십시오" + send_stats "${panelname}卸载" ;; *) break @@ -3615,8 +3614,8 @@ donlond_frp() { generate_frps_config() { - send_stats "FRP 서버를 설치하십시오" - # 임의의 포트 및 자격 증명을 생성합니다 + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3636,17 @@ EOF donlond_frp frps - # 출력 생성 정보 + # 输出生成的信息 ip_address echo "------------------------" - echo "클라이언트 배포에 필요한 매개 변수" - echo "서비스 IP :$ipv4_address" + 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 "FRP面板信息" + echo "FRP面板地址: http://$ipv4_address:$dashboard_port" + echo "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3656,9 @@ EOF configure_frpc() { - send_stats "FRP 클라이언트를 설치하십시오" - read -e -p "외부 네트워크 도킹 IP를 입력하십시오." server_addr - read -e -p "외부 네트워크 도킹 토큰을 입력하십시오." token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3679,17 +3678,17 @@ EOF } add_forwarding_service() { - send_stats "FRP 인트라넷 서비스를 추가하십시오" - # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 - read -e -p "서비스 이름을 입력하십시오 :" service_name - read -e -p "전달 유형 (TCP/UDP)을 입력하십시오 [기본 TCP 입력] :" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "인트라넷 IP를 입력하십시오 [기본값 127.0.0.1 입력] : :" local_ip + read -e -p "请输入内网IP [回车默认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 + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # 구성 파일에 사용자 입력을 쓰십시오 + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3698,8 @@ remote_port = ${remote_port} EOF - # 출력 생성 정보 - echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3711,12 +3710,12 @@ EOF delete_forwarding_service() { - send_stats "FRP 인트라넷 서비스를 삭제하십시오" - # 삭제 해야하는 서비스 이름을 입력하라는 메시지 - read -e -p "삭제 해야하는 서비스 이름을 입력하십시오." service_name - # SED를 사용하여 서비스 및 관련 구성을 삭제하십시오. + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "제공하다$service_namefrpc.toml에서 성공적으로 삭제되었습니다" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3726,7 +3725,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 헤더를 인쇄하십시오 + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3746,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 서비스 정보가있는 경우 새 서비스를 처리하기 전에 현재 서비스를 인쇄하십시오. + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,11 +3755,11 @@ list_forwarding_services() { type } - # 현재 서비스 이름을 업데이트하십시오 + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 이전 값을 지우십시오 + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3789,7 +3788,7 @@ list_forwarding_services() { } END { - # 마지막 서비스에 대한 정보를 인쇄하십시오 + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3801,17 @@ list_forwarding_services() { -# FRP 서버 포트를 가져옵니다 +# 获取 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 이외의 포트가 있는지 확인하십시오 + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3820,18 @@ generate_access_urls() { fi done - # 유효한 포트가있을 때만 제목과 콘텐츠 표시 + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRP 서비스 외부 액세스 주소 :" + echo "FRP服务对外访问地址:" - # 프로세스 IPv4 주소 + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # Process IPv6 주소 (현재 경우) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3840,7 @@ generate_access_urls() { done fi - # HTTPS 구성 처리 + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3867,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP 서버" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3875,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP 서버$check_frp $update_status" - echo "FRP 인트라넷 침투 서비스 환경을 구축하여 인터넷에 공개 IP없이 장치를 노출시킵니다." - echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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 "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 인트라넷 서비스에 대한 도메인 이름 액세스 6. 도메인 이름 액세스 삭제" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00. 서비스 상태 새로 고침 0. 이전 메뉴로 돌아갑니다." + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3902,7 +3901,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 서버가 설치되었습니다" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3911,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 서버가 업데이트되었습니다" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3922,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "应用已卸载" ;; 5) - echo "리버스 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" - send_stats "외부 도메인 이름에 대한 FRP 액세스" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "인트라넷 침투 서비스 포트를 입력하십시오 :" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "IP 액세스 허용" - read -e -p "해제 할 포트를 입력하십시오." frps_port + 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 + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "FRP 서비스 상태를 새로 고치십시오" - echo "FRP 서비스 상태가 새로 고쳐졌습니다" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3966,7 +3965,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP 클라이언트" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3973,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP 클라이언트$check_frp $update_status" - echo "서버로 도킹, 도킹 후 인터넷 액세스에 인트라넷 침투 서비스를 만들 수 있습니다." - echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3984,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4. 외부 서비스 추가 5. 외부 서비스 삭제 6. 서비스 구성 수동으로 서비스 구성" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3999,7 +3998,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 클라이언트가 설치되었습니다" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4008,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP 클라이언트가 업데이트되었습니다" + echo "FRP客户端已经更新完成" ;; 3) @@ -4020,7 +4019,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "应用已卸载" ;; 4) @@ -4066,68 +4065,68 @@ yt_menu_pro() { fi clear - send_stats "YT-DLP 다운로드 도구" + 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 -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 "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5. 단일 비디오 다운로드 6. 배치 비디오 다운로드 7. 사용자 정의 매개 변수 다운로드" - echo "8. MP3 오디오 9. 비디오 디렉토리 삭제 10. 쿠키 관리 (개발 중)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "옵션 번호를 입력하십시오 :" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "yt-dlp 설치 ..." - echo "yt-dlp 설치 ..." + send_stats "正在安装 yt-dlp..." + echo "正在安装 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "安装完成。按任意键继续..." read ;; 2) - send_stats "yt-dlp 업데이트 ..." - echo "yt-dlp 업데이트 ..." + send_stats "正在更新 yt-dlp..." + echo "正在更新 yt-dlp..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "yt-dlp 제거 ..." - echo "yt-dlp 제거 ..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "단일 비디오 다운로드" - read -e -p "비디오 링크를 입력하십시오 :" url + 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 "다운로드가 완료되면 키를 눌러 계속하십시오 ..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "배치 비디오 다운로드" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "이제 배치 다운로드를 시작하십시오 ..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4134,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "배치 다운로드가 완료되었습니다. 키를 눌러 계속하십시오 ..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "맞춤형 비디오 다운로드" - read -e -p "전체 YT-DLP 매개 변수를 입력하십시오 (YT-DLP 제외) :" custom + 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 "실행이 완료되면 키를 눌러 계속하십시오 ..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3 다운로드" - read -e -p "비디오 링크를 입력하십시오 :" url + 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 "오디오 다운로드가 완료되었습니다. 키를 누르면 계속하십시오 ..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "비디오 삭제" - read -e -p "삭제 비디오의 이름을 입력하십시오." rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4194,7 @@ set_timedate() { -# DPKG 인터럽트 문제를 수정하십시오 +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4203,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4223,7 +4222,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi } @@ -4231,7 +4230,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}시스템 정리 ...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4259,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "패키지 관리자 캐시 청소 ..." + echo "清理包管理器缓存..." apk cache clean - echo "시스템 로그 삭제 ..." + echo "删除系统日志..." rm -rf /var/log/* - echo "APK 캐시 삭제 ..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "임시 파일 삭제 ..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,23 +4283,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "시스템 로그 삭제 ..." + echo "删除系统日志..." rm -rf /var/log/* - echo "임시 파일 삭제 ..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "사용하지 않는 의존성 정리 ..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "패키지 관리자 캐시 청소 ..." + echo "清理包管理器缓存..." pkg clean -y - echo "시스템 로그 삭제 ..." + echo "删除系统日志..." rm -rf /var/log/* - echo "임시 파일 삭제 ..." + echo "删除临时文件..." rm -rf /tmp/* else - echo "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi return @@ -4340,26 +4339,26 @@ fi set_dns_ui() { root_use -send_stats "DNS 최적화" +send_stats "优化DNS" while true; do clear - echo "DNS 주소를 최적화합니다" + echo "优化DNS地址" echo "------------------------" - echo "현재 DNS 주소" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 외국 DNS 최적화 :" + 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 "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. DNS 구성을 수동으로 편집합니다" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4366,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "외국 DNS 최적화" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4374,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "국내 DNS 최적화" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "DNS 구성을 수동으로 편집합니다" + send_stats "手动编辑DNS配置" ;; *) break @@ -4403,13 +4402,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthentication이 발견되면 예로 설정하십시오 + # 如果找到 PasswordAuthentication 设置为 yes 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이 예로 설정됩니다 + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4417,7 +4416,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthentication 또는 PubKeyAuthentication이 일치하지 않는 경우 기본값을 설정하십시오. + # 如果 PasswordAuthentication 和 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" @@ -4428,7 +4427,7 @@ correct_ssh_config() { new_ssh_port() { - # 백업 SSH 구성 파일 + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4440,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 포트는 다음으로 수정되었습니다.$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4459,7 +4458,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "개인 키 정보가 생성되었습니다. 복사하고 저장하십시오.${gl_huang}${ipv4_address}_ssh.key${gl_bai}향후 SSH 로그인 파일" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4470,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}루트 프라이빗 키 로그인이 활성화되고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "SSH 공개 키 내용을 입력하십시오 (일반적으로 'SSH-RSA'또는 'SSH-ED25519'로 시작) :" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}오류 : 공개 키 컨텐츠가 입력되지 않았습니다.${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4499,7 +4498,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}공개 키가 성공적으로 가져 왔고 루트 개인 키 로그인이 활성화되었고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4508,26 +4507,26 @@ import_sshkey() { add_sshpasswd() { -echo "루트 비밀번호를 설정하십시오" +echo "设置你的ROOT密码" 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}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}힌트:${gl_bai}이 기능은 루트 사용자가 실행해야합니다!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "시스템을 다시 설치하십시오" + 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 @@ -4538,41 +4537,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}root${gl_bai}초기 비밀번호 :${gl_huang}LeitboGi0ro${gl_bai}초기 포트 :${gl_huang}22${gl_bai}" - echo -e "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "--------------------------------" - echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - echo -e "${gl_hui}Leitbogioro 및 Bin456789의 스크립트 지원 덕분에!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4587,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. OpenSuse Tumbleweed 36. FNOS FEINIU 공개 베타 버전" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "데비안 13을 다시 설치하십시오" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4609,49 @@ dd_xitong() { ;; 2) - send_stats "데비안 12를 다시 설치하십시오" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "데비안 11을 다시 설치하십시오" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "데비안 10을 다시 설치하십시오" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "우분투 24.04를 다시 설치하십시오" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "우분투 22.04를 다시 설치하십시오" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Ubuntu 20.04를 다시 설치하십시오" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "우분투 18.04를 다시 설치하십시오" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4660,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10을 다시 설치하십시오" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4668,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9를 다시 설치하십시오" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4676,7 @@ dd_xitong() { ;; 23) - send_stats "Alma10을 다시 설치하십시오" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4684,7 @@ dd_xitong() { ;; 24) - send_stats "Alma9를 다시 설치하십시오" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4692,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10을 다시 설치하십시오" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4700,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9를 다시 설치하십시오" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4708,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42를 다시 설치하십시오" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4716,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41을 다시 설치하십시오" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4724,7 @@ dd_xitong() { ;; 29) - send_stats "CentOS10을 다시 설치하십시오" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4732,7 @@ dd_xitong() { ;; 30) - send_stats "CentOS9를 다시 설치하십시오" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4740,7 @@ dd_xitong() { ;; 31) - send_stats "알파인을 다시 설치하십시오" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4748,7 @@ dd_xitong() { ;; 32) - send_stats "아치를 다시 설치하십시오" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4756,7 @@ dd_xitong() { ;; 33) - send_stats "칼리를 다시 설치하십시오" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4764,7 @@ dd_xitong() { ;; 34) - send_stats "Openeuler를 다시 설치하십시오" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4772,7 @@ dd_xitong() { ;; 35) - send_stats "재설치 OpenSuse" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4780,7 @@ dd_xitong() { ;; 36) - send_stats "비행 소부소" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4789,7 @@ dd_xitong() { 41) - send_stats "Windows 11을 다시 설치하십시오" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4797,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "Windows 10을 다시 설치하십시오" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Windows 7을 다시 설치하십시오" + send_stats "重装windows7" 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 @@ -4812,21 +4811,21 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22를 다시 설치하십시오" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "Windows Server 19를 다시 설치하십시오" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "Windows Server 16을 다시 설치하십시오" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4833,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11 Arm을 다시 설치하십시오" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4851,7 +4850,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3 관리" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,17 +4863,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "Xanmod의 BBRV3 커널을 설치했습니다" - echo "현재 커널 버전 :$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "커널 관리" + echo "内核管理" echo "------------------------" - echo "1. BBRV3 커널 업데이트 2. BBRV3 커널 제거" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4884,7 +4883,7 @@ bbrv3() { # 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 단계 : 저장소를 추가합니다 + # 步骤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+') @@ -4893,7 +4892,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmod 커널이 업데이트되었습니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4902,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmod 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4916,13 +4915,13 @@ bbrv3() { else clear - echo "BBR3 가속도를 설정하십시오" - echo "비디오 소개 : https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "데비안/우분투 만 지원합니다" - echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4930,12 +4929,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "현재 환경은이를 지원하지 않으며 데비안 및 우분투 시스템 만 지원합니다." + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "운영 체제 유형을 결정할 수 없습니다" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4946,7 +4945,7 @@ bbrv3() { # 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 단계 : 저장소를 추가합니다 + # 步骤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+') @@ -4957,17 +4956,17 @@ bbrv3() { bbr_on - echo "Xanmod 커널이 설치되고 BBR3이 성공적으로 활성화됩니다. 다시 시작한 후에도 적용됩니다" + 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 "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4976,40 +4975,40 @@ bbrv3() { elrepo_install() { - # Elrepo GPG 공개 키를 가져 오십시오 - echo "Elrepo GPG 공개 키를 가져 오십시오 ..." + # 导入 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" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # 감지 된 운영 체제 정보를 인쇄합니다 - echo "운영 체제 감지 :$os_name $os_version" - # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." + 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)을 설치하십시오 ..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Elrepo 저장소 구성 (버전 10)을 설치하십시오 ..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "지원되지 않는 시스템 버전 :$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오. - echo "Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오 ..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepo 저장소 구성이 설치되어 최신 메인 라인 커널로 업데이트됩니다." + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5017,37 +5016,37 @@ elrepo_install() { elrepo() { root_use - send_stats "레드 모자 커널 관리" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "Elrepo 커널을 설치했습니다" - echo "현재 커널 버전 :$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "커널 관리" + echo "内核管理" echo "------------------------" - echo "1. Elrepo 커널 업데이트 2. Elrepo 커널 제거" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 커널을 업데이트하십시오" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "Elrepo 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" - send_stats "빨간 모자 커널을 제거하십시오" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5060,26 +5059,26 @@ elrepo() { else clear - echo "데이터를 백업하고 Linux 커널을 업그레이드합니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "Red Hat 시리즈 배포 Centos/Redhat/Alma/Rocky/Oracle 만 지원합니다" - echo "Linux 커널을 업그레이드하면 시스템 성능 및 보안이 향상 될 수 있습니다. 조건이 허용되고 생산 환경을 조심스럽게 업그레이드하는 경우 시도하는 것이 좋습니다!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hat 커널을 업그레이드하십시오" + send_stats "升级红帽内核" server_reboot ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5090,7 +5089,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}바이러스 데이터베이스 업데이트 ...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5099,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔 할 디렉토리를 지정하십시오." + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}스캔 디렉토리 $@...${gl_bai}" + 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 명령 매개 변수를 작성하십시오 + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5120,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Docker 명령을 실행하십시오 + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5129,8 @@ clamav_scan() { clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS - echo -e "${gl_lv}$@ scan이 완료되고 바이러스 보고서가 저장됩니다${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" - echo -e "${gl_lv}바이러스가 있다면 제발${gl_huang}scan.log${gl_lv}파일에서 찾은 키워드를 검색하여 바이러스의 위치를 ​​확인하십시오.${gl_bai}" + 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}" } @@ -5143,23 +5142,23 @@ clamav_scan() { clamav() { root_use - send_stats "바이러스 스캔 관리" + send_stats "病毒扫描管理" while true; do clear - echo "Clamav 바이러스 스캐닝 도구" - echo "비디오 소개 : https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "오픈 소스 바이러스 백신 소프트웨어 도구로 주로 다양한 유형의 맬웨어를 감지하고 제거하는 데 사용됩니다." - echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어를 포함합니다." + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리를 스캔하십시오${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "전체 디스크 스캔" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5167,7 @@ clamav() { ;; 2) - send_stats "중요한 디렉토리 스캔" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5175,8 @@ clamav() { break_end ;; 3) - send_stats "사용자 정의 디렉토리 스캔" - read -e -p "스캔 할 디렉토리를 입력하십시오." directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5193,21 @@ clamav() { -# 고성능 모드 최적화 기능 +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}전환하십시오${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5220,36 +5219,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 비활성화합니다 + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 이퀄라이제이션 모드 최적화 기능 +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5261,36 +5260,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 투명 페이지를 복원하십시오 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 복원하십시오 + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 기본 설정 기능을 복원하십시오 +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}기본 설정으로 복원하십시오 ...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}파일 디스크립터 복원 ...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}가상 메모리 복원 ...${gl_bai}" + 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}" + 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 @@ -5302,37 +5301,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}CPU 설정 복원 ...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}다른 최적화를 복원 ...${gl_bai}" - # 투명 페이지를 복원하십시오 + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 복원하십시오 + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 웹 사이트 구축 최적화 기능 +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}웹 사이트 구축 최적화 모드로 전환하십시오 ...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5344,16 +5343,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 비활성화합니다 + # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5363,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux 커널 튜닝 관리" - echo "Linux 시스템에서 커널 매개 변수의 최적화" - echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." - echo -e "${gl_huang}힌트:${gl_bai}생산 환경에서주의해서 사용하십시오!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1. 고성능 최적화 모드 : 시스템 성능을 극대화하고 파일 설명기, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." - echo "2. 균형 최적화 모드 : 매일 사용하기에 적합한 성능과 자원 소비 사이의 균형." - echo "3. 웹 사이트 최적화 모드 : 웹 사이트 서버에 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." - echo "4. 라이브 브로드 캐스트 최적화 모드 : 라이브 방송 스트리밍의 특별한 요구를 최적화하여 대기 시간을 줄이고 전송 성능을 향상시킵니다." - echo "5. 게임 서버 최적화 모드 : 게임 서버를 위해 동시 처리 기능 및 응답 속도를 향상시킬 최적화." - echo "6. 기본 설정을 복원하십시오. 시스템 설정을 기본 구성으로 복원하십시오." + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "고성능 모드 최적화" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "균형 모드 최적화" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "웹 사이트 최적화 모델" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "라이브 스트리밍 최적화" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "게임 서버 최적화" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "기본 설정을 복원하십시오" + send_stats "还原默认设置" ;; *) break @@ -5446,7 +5445,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5455,17 +5454,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "지원되지 않는 시스템 :$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "지원되지 않는 시스템, 시스템 유형을 인식 할 수 없습니다." + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5475,29 +5474,29 @@ update_locale() { linux_language() { root_use -send_stats "스위치 시스템 언어" +send_stats "切换系统语言" while true; do clear - echo "현재 시스템 언어 :$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1. 영어 2. 중국어 3. 전통 중국어" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "영어로 전환하십시오" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "단순화 된 중국어로 전환하십시오" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "전통적인 중국어로 전환하십시오" + send_stats "切换到繁体中文" ;; *) break @@ -5519,7 +5518,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}변경이 완료되었습니다. 변경 사항을 볼 수 있도록 SSH를 다시 ​​연결하십시오!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5530,10 +5529,10 @@ break_end shell_bianse() { root_use - send_stats "명령 라인 미화 도구" + send_stats "命令行美化工具" while true; do clear - echo "명령 라인 미화 도구" + 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}#" @@ -5543,9 +5542,9 @@ shell_bianse() { 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5590,7 +5589,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "시스템 재활용 스테이션" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5604,17 @@ linux_trash() { fi clear - echo -e "현재 재활용 쓰레기통${trash_status}" - echo -e "활성화 후 RM이 삭제 한 파일은 먼저 재활용 빈에 입력하여 중요한 파일의 잘못된 삭제를 방지합니다!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "재활용 쓰레기통은 비어 있습니다" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1. 재활용 빈을 활성화합니다. 2. 재활용 쓰레기통을 닫습니다." - echo "3. 컨텐츠를 복원 4. 재활용 쓰레기통을 지 웁니다" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5623,7 +5622,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "Recycle Bin이 활성화되고 삭제 된 파일이 Recycle Bin으로 이동됩니다." + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5631,23 +5630,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "재활용 빈이 닫히고 파일이 직접 삭제됩니다." + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "복원 할 파일 이름을 입력하십시오." file_to_restore + 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홈 디렉토리로 복원되었습니다." + echo "$file_to_restore 已还原到主目录。" else - echo "파일이 존재하지 않습니다." + echo "文件不存在。" fi ;; 4) - read -e -p "재활용 쓰레기통을 지우셨습니까? [Y/N] :" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "재활용 쓰레기통이 지워졌습니다." + echo "回收站已清空。" fi ;; *) @@ -5658,23 +5657,23 @@ linux_trash() { } linux_fav() { -send_stats "명령 즐겨 찾기" +send_stats "命令收藏夹" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 백업을 만듭니다 +# 创建备份 create_backup() { - send_stats "백업을 만듭니다" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 사용자에게 백업 디렉토리를 입력하라는 메시지를 표시하십시오 - echo "백업 예제 :" - echo "- 단일 디렉토리를 백업 : /var /www" - echo "- 여러 디렉토리 백업 : /etc /home /var /log" - echo "- Direct Enter는 기본 디렉토리 ( /etc /usr /home)를 사용합니다." - read -r -p "백업 디렉토리를 입력하십시오 (여러 디렉토리가 공간별로 구분되며 직접 입력하면 기본 디렉토리를 사용하십시오)." input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # 사용자가 디렉토리를 입력하지 않으면 기본 디렉토리를 사용하십시오. + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5681,119 @@ create_backup() { "/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 "선택한 백업 디렉토리는 다음과 같습니다." + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 백업을 만듭니다 - echo "백업 생성$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 명령이 성공했는지 확인하십시오 + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "백업은 성공적으로 생성되었습니다.$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "백업 생성이 실패했습니다!" + echo "备份创建失败!" exit 1 fi } -# 백업을 복원하십시오 +# 恢复备份 restore_backup() { - send_stats "백업을 복원하십시오" - # 복원하려는 백업을 선택하십시오 - read -e -p "복원하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # 백업 파일이 있는지 확인하십시오 + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "백업 파일이 존재하지 않습니다!" + echo "备份文件不存在!" exit 1 fi - echo "백업 복구$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "백업 및 복원을 성공적으로 복원하십시오!" + echo "备份恢复成功!" else - echo "백업 복구 실패!" + echo "备份恢复失败!" exit 1 fi } -# 백업을 나열합니다 +# 列出备份 list_backups() { - echo "사용 가능한 백업 :" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# 백업을 삭제하십시오 +# 删除备份 delete_backup() { - send_stats "백업을 삭제하십시오" + send_stats "删除备份" - read -e -p "삭제하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # 백업 파일이 있는지 확인하십시오 + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "백업 파일이 존재하지 않습니다!" + echo "备份文件不存在!" exit 1 fi - # 백업을 삭제하십시오 + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "백업이 성공적으로 삭제되었습니다!" + echo "备份删除成功!" else - echo "백업 삭제가 실패했습니다!" + echo "备份删除失败!" exit 1 fi } -# 백업 메인 메뉴 +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "시스템 백업 기능" - echo "시스템 백업 기능" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1. 백업 만들기 2. 백업 복원 3. 백업 삭제" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "按回车键继续..." done } @@ -5806,56 +5805,56 @@ linux_backup() { -# 연결 목록 표시 +# 显示连接列表 list_connections() { - echo "저장된 연결 :" + 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" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "연결 이름을 입력하십시오 :" name - read -e -p "IP 주소를 입력하십시오 :" ip - read -e -p "사용자 이름 (기본값 : 루트)을 입력하십시오 :" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "인증 방법을 선택하십시오 :" - echo "1. 비밀번호" - echo "2. 키" - read -e -p "선택 (1/2)을 입력하십시오 :" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" + 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" @@ -5864,89 +5863,89 @@ add_connection() { fi ;; *) - echo "잘못된 선택!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "연결이 저장됩니다!" + echo "连接已保存!" } -# 연결을 삭제하십시오 +# 删除连接 delete_connection() { - send_stats "연결을 삭제하십시오" - read -e -p "삭제하려면 연결 번호를 입력하십시오." num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "오류 : 해당 연결을 찾을 수 없었습니다." + 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 "연결이 삭제되었습니다!" + echo "连接已删除!" } -# 연결을 사용하십시오 +# 使用连接 use_connection() { - send_stats "연결을 사용하십시오" - read -e -p "사용할 연결 번호를 입력하십시오." num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "오류 : 해당 연결을 찾을 수 없었습니다." + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "연결$name ($ip)..." + 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. 대상 서버가 키를 사용하여 로그인 할 수 있는지 여부." + 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 "错误:未安装 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 서비스가 정상적으로 실행되는지 여부." + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "SSH 원격 연결 도구" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 구성 파일과 키 디렉토리가 존재하는지 확인하고 존재하지 않으면 작성하십시오. + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5957,21 @@ ssh_manager() { while true; do clear - echo "SSH 원격 연결 도구" - echo "SSH를 통해 다른 Linux 시스템에 연결할 수 있습니다" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1. 새 연결 만들기 2. 연결 사용 3. 연결 삭제" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5988,156 +5987,156 @@ ssh_manager() { -# 사용 가능한 하드 디스크 파티션을 나열하십시오 +# 列出可用的硬盘分区 list_partitions() { - echo "사용 가능한 하드 디스크 파티션 :" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 파티션을 장착하십시오 +# 挂载分区 mount_partition() { - send_stats "파티션을 장착하십시오" - read -e -p "장착 할 파티션 이름을 입력하십시오 (예 : SDA1) :" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # 파티션이 있는지 확인하십시오 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 존재하지 않습니다!" + echo "分区不存在!" return fi - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "파티션은 이미 장착되어 있습니다!" + echo "分区已经挂载!" return fi - # 마운트 포인트를 만듭니다 + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 파티션을 장착하십시오 + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "파티션 마운트 성공적으로 :$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "파티션 마운트 실패!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# 파티션을 제거하십시오 +# 卸载分区 unmount_partition() { - send_stats "파티션을 제거하십시오" - read -e -p "파티션 이름 (예 : SDA1)을 입력하십시오." PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "파티션이 장착되지 않았습니다!" + echo "分区未挂载!" return fi - # 파티션을 제거하십시오 + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 분할 해제 성공 :$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "파티션 제거 실패!" + echo "分区卸载失败!" fi } -# 목록 장착 파티션 +# 列出已挂载的分区 list_mounted_partitions() { - echo "마운트 파티션 :" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 형식 파티션 +# 格式化分区 format_partition() { - send_stats "형식 파티션" - read -e -p "파티션 이름을 형식 (예 : SDA1)에 입력하십시오." PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # 파티션이 있는지 확인하십시오 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 존재하지 않습니다!" + echo "分区不存在!" return fi - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 장착되었습니다. 먼저 제거하십시오!" + echo "分区已经挂载,请先卸载!" return fi - # 파일 시스템 유형을 선택하십시오 - echo "파일 시스템 유형을 선택하십시오 :" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "선택을 입력하십시오 :" FS_CHOICE + 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 ;; + *) echo "无效的选择!"; return ;; esac - # 형식을 확인하십시오 - read -e -p "파티션 형식 확인 /dev /$PARTITION~을 위한$FS_TYPE그게? (Y/N) :" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "작업이 취소되었습니다." + echo "操作已取消。" return fi - # 형식 파티션 - echo "파티션 서식 /dev /$PARTITION~을 위한$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 형식이 성공적이었습니다!" + echo "分区格式化成功!" else - echo "파티션 형식이 실패했습니다!" + echo "分区格式化失败!" fi } -# 파티션 상태를 확인하십시오 +# 检查分区状态 check_partition() { - send_stats "파티션 상태를 확인하십시오" - read -e -p "파티션 이름을 입력하여 확인하십시오 (예 : SDA1) :" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # 파티션이 있는지 확인하십시오 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 존재하지 않습니다!" + echo "分区不存在!" return fi - # 파티션 상태를 확인하십시오 - echo "파티션 /개발자 /$PARTITION상태:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# 메인 메뉴 +# 主菜单 disk_manager() { - send_stats "하드 디스크 관리 기능" + send_stats "硬盘管理功能" while true; do clear - echo "하드 디스크 파티션 관리" - echo -e "${gl_huang}이 기능은 테스트 기간 동안 내부적으로 테스트되므로 생산 환경에서 사용하지 마십시오.${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 파티션 마운트 2. 파티션 3. 마운트 파티션보기" - echo "4. 파티션 형식 5. 파티션 상태를 확인하십시오" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6145,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "按回车键继续..." done } -# 작업 목록 표시 +# 显示任务列表 list_tasks() { - echo "저장된 동기화 작업 :" + 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)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/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 + 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 + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" + 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" @@ -6211,63 +6210,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "잘못된 키 컨텐츠!" + echo "无效的密钥内容!" return fi ;; *) - echo "잘못된 선택!" + echo "无效的选择!" return ;; esac - echo "동기화 모드를 선택하십시오 :" - echo "1. 표준 모드 (-avz)" - echo "2. 대상 파일 삭제 (-avz-delete)" - read -e -p "선택하십시오 (1/2) :" mode + 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" ;; + *) 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 "작업을 저장했습니다!" + echo "任务已保存!" } -# 작업을 삭제하십시오 +# 删除任务 delete_task() { - send_stats "동기화 작업을 삭제합니다" - read -e -p "삭제하려면 작업 번호를 입력하십시오." num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "오류 : 해당 작업을 찾을 수 없었습니다." + 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 "작업이 삭제되었습니다!" + echo "任务已删除!" } run_task() { - send_stats "동기화 작업을 수행하십시오" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 매개 변수를 분석하십시오 + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6277,51 @@ run_task() { num="$1" fi - # 들어오는 작업 번호가없는 경우 사용자에게 입력하라는 메시지를 표시하십시오. + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "실행할 작업 번호를 입력하십시오." num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "오류 : 작업이 찾을 수 없었습니다!" + 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" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "동기화를 원격 끝으로 푸시합니다.$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # SSH 연결 공통 매개 변수를 추가하십시오 + # 添加 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 "错误:未安装 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" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "경고 : 키 파일 권한이 잘못되었고 수리 중입니다 ..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6330,32 +6329,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "동기화가 완료되었습니다!" + echo "同步完成!" else - echo "동기화 실패! 다음을 확인하십시오." - echo "1. 네트워크 연결이 정상입니까?" - echo "2. 원격 호스트가 액세스 할 수 있습니까?" - echo "3. 인증 정보가 정확합니까?" - echo "4. 로컬 및 원격 디렉토리에 올바른 액세스 권한이 있습니까?" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# 시간이 정한 작업을 만듭니다 +# 创建定时任务 schedule_task() { - send_stats "동기화 타이밍 작업을 추가하십시오" + send_stats "添加同步定时任务" - read -e -p "정기적으로 동기화 할 작업 번호를 입력하십시오." num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "错误: 请输入有效的任务编号!" return fi - echo "시간이 정한 실행 간격을 선택하십시오." - echo "1) 한 시간에 한 번 실행하십시오" - echo "2) 하루에 한 번 수행하십시오" - echo "3) 일주일에 한 번 실행하십시오" - read -e -p "옵션을 입력하십시오 (1/2/3) :" interval + 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="" @@ -6363,66 +6362,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "오류 : 유효한 옵션을 입력하십시오!" ; return ;; + *) 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 "오류 :이 작업의 타이밍 동기화가 이미 존재합니다!" + echo "错误: 该任务的定时同步已存在!" return fi - # 사용자에게 크론AB를 만듭니다 + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "타이밍 작업이 만들어졌습니다.$cron_job" + echo "定时任务已创建: $cron_job" } -# 예정된 작업을 봅니다 +# 查看定时任务 view_tasks() { - echo "현재 타이밍 작업 :" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 타이밍 작업을 삭제하십시오 +# 删除定时任务 delete_task_schedule() { - send_stats "동기화 타이밍 작업을 삭제합니다" - read -e -p "삭제하려면 작업 번호를 입력하십시오." num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "삭제 된 작업 번호$num타이밍 작업" + echo "已删除任务编号 $num 的定时任务" } -# 작업 관리 메인 메뉴 +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "RSYNC 원격 동기화 도구" - echo "원격 디렉토리 간의 동기화는 증분 동기화, 효율적이고 안정적인 지원을 지원합니다." + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 새 작업 생성 2. 작업을 삭제하십시오" - echo "3. 원격 끝에 로컬 동기화 수행 4. 로컬 엔드에 대한 원격 동기화 수행" - echo "5. 타이밍 작업 만들기 6. 타이밍 작업 삭제" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6430,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "按回车键继续..." done } @@ -6448,7 +6447,7 @@ rsync_manager() { linux_ps() { clear - send_stats "시스템 정보 쿼리" + send_stats "系统信息查询" ip_address @@ -6498,41 +6497,41 @@ linux_ps() { echo "" - echo -e "시스템 정보 쿼리" + 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}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}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}총 수신 :${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}네트워크 알고리즘 :${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}연산자:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4 주소 :${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6 주소 :${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6545,111 +6544,111 @@ linux_tools() { while true; do clear - # send_stats "기본 도구" - echo -e "기본 도구" + # 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}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}소사이어티 커뮤니케이션 연결 도구" - 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}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${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}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}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}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" curl --help - send_stats "컬을 설치하십시오" + send_stats "安装curl" ;; 2) clear install wget clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" wget --help - send_stats "wget을 설치하십시오" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" sudo --help - send_stats "Sudo를 설치하십시오" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" socat -h - send_stats "Socat을 설치하십시오" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "HTOP를 설치하십시오" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "iftop을 설치하십시오" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" unzip - send_stats "압축을 설치하십시오" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" tar --help - send_stats "타르를 설치하십시오" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" tmux --help - send_stats "tmux를 설치하십시오" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "FFMPEG를 설치하십시오" + send_stats "安装ffmpeg" ;; 11) @@ -6657,7 +6656,7 @@ linux_tools() { install btop clear btop - send_stats "Btop을 설치하십시오" + send_stats "安装btop" ;; 12) clear @@ -6666,7 +6665,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저를 설치하십시오" + send_stats "安装ranger" ;; 13) clear @@ -6675,7 +6674,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDU를 설치하십시오" + send_stats "安装ncdu" ;; 14) clear @@ -6684,7 +6683,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZF를 설치하십시오" + send_stats "安装fzf" ;; 15) clear @@ -6693,7 +6692,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIM을 설치하십시오" + send_stats "安装vim" ;; 16) clear @@ -6702,7 +6701,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노를 설치하십시오" + send_stats "安装nano" ;; @@ -6713,7 +6712,7 @@ linux_tools() { clear git --help cd ~ - send_stats "git을 설치하십시오" + send_stats "安装git" ;; 21) @@ -6721,67 +6720,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrix를 설치하십시오" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "SL을 설치하십시오" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "Bastet을 설치하십시오" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "NSNAKE를 설치하십시오" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "Ninvaders를 설치하십시오" + send_stats "安装ninvaders" ;; 31) clear - send_stats "모두 설치하십시오" + 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 "모든 설치 (게임 및 화면 보호기 제외)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "모든 것을 제거하십시오" + 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 + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "지정된 소프트웨어를 설치하십시오" + send_stats "安装指定软件" ;; 42) clear - read -e -p "제거되지 않은 도구 이름 (HTOP UFW TMUX CMATRIX)을 입력하십시오." removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "지정된 소프트웨어를 제거하십시오" + send_stats "卸载指定软件" ;; 0) @@ -6789,7 +6788,7 @@ linux_tools() { ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -6803,27 +6802,27 @@ linux_tools() { linux_bbr() { clear - send_stats "BBR 관리" + 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 "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" - echo "BBR 관리" + echo "BBR管理" echo "------------------------" - echo "1. BBRV3 켜기 2. BBRV3 끄기 (재시작)" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "알파인 활성화 BBR3" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6868,18 +6867,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}현재 백업 목록 :${NC}" - ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음" + echo -e "${BLUE}当前备份列表:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } # ---------------------------- - # 지원 + # 备份 # ---------------------------- backup_docker() { - echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" - read -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers + send_stats "Docker备份" + + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + docker ps --format '{{.Names}}' + read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip install_docker @@ -6890,7 +6892,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}컨테이너가 없습니다${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6898,28 +6900,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 자동으로 생성 된 복원 스크립트" >> "$RESTORE_SCRIPT" + echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" - # 중복 포장을 피하기 위해 패키지 작곡 프로젝트의 경로를 기록하십시오. + # 记录已打包过的 Compose 项目路径,避免重复打包 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}백업 컨테이너 :$c${NC}" + echo -e "${GREEN}备份容器: $c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}감지$c예, Docker-compose 컨테이너${NC}" + echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir + read -p "未检测到 compose 目录,请手动输入路径: " project_dir fi - # Compose 프로젝트가 포장 된 경우 건너 뛰십시오 + # 如果该 Compose 项目已经打包过,跳过 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}작곡 프로젝트 [$project_name] 백업, 중복 포장을 건너 뛰십시오 ...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6927,136 +6929,137 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# Docker-Compose Recovery :$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}작곡 프로젝트 [$project_name] 포장 :${project_dir}${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" else - echo -e "${RED}docker-compose.yml을 찾을 수 없고이 컨테이너를 건너 뛰십시오 ...${NC}" + echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" fi else - # 일반 컨테이너 백업 볼륨 + # 普通容器备份卷 local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "포장 롤 :$path" + echo "打包卷: $path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done - # 포트 + # 端口 local PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 환경 변수 + # 环境变量 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # 볼륨 매핑 + # 卷映射 local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 거울 + # 镜像 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\ n# 복원 컨테이너 :$c" >> "$RESTORE_SCRIPT" + echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # /home /docker 아래의 모든 파일을 백업 (하위 디렉터 제외) + # 备份 /home/docker 下的所有文件(不含子目录) if [ -d "/home/docker" ]; then - echo -e "${BLUE}/home /docker 아래 파일을 백업 ...${NC}" - find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - - echo -e "${GREEN}/home /docker의 파일은 다음과 같이 포장되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - + echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}백업이 완료되었습니다.${BACKUP_DIR}${NC}" - echo -e "${GREEN}사용 가능한 복원 스크립트 :${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 절감 + # 还原 # ---------------------------- restore_docker() { - list_backups - read -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } - echo -e "${BLUE}복원 작업 시작 ...${NC}" + send_stats "Docker还原" + read -p "请输入要还原的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + echo -e "${BLUE}开始执行还原操作...${NC}" install tar jq gzip install_docker - # ----------------------------- + # --------- 优先还原 Compose 项目 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path + [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path - # Compose 프로젝트 용 컨테이너가 이미 실행 중인지 확인하십시오. + # 检查该 compose 项目的容器是否已经在运行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}작곡 프로젝트 [$project_name] 이미 컨테이너가 실행 중입니다. 스킵 복원 ...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" continue fi - read -p "Compose 프로젝트 복원 확인 [$project_name] 경로로 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "새로운 복원 경로를 입력하십시오 :" original_path + read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}작곡 프로젝트 [$project_name] 압축 압축 : :$original_path${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원이 완료되었습니다!${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" fi done - # ----------------------------- - echo -e "${BLUE}일반적인 도커 컨테이너를 확인하고 복원하십시오 ...${NC}" + # --------- 继续还原普通容器 --------- + echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리 컨테이너 :$container${NC}" + echo -e "${GREEN}处理容器: $container${NC}" - # 컨테이너가 이미 존재하고 실행 중인지 확인하십시오 + # 检查容器是否已经存在且正在运行 if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}컨테이너 [$container]는 실행 중입니다. 회복을 건너 뛰십시오 ...${NC}" + echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}거울 정보는 찾을 수 없었습니다.$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } - # 포트 매핑 + # 端口映射 PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 환경 변수 + # 环境变量 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # 볼륨 매핑 + 볼륨 데이터 복구 + # 卷映射 + 卷数据恢复 VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7067,32 +7070,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "볼륨 데이터 복구 :$VOL_SRC" + echo "恢复卷数据: $VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 기존이지만 실행되지 않은 컨테이너를 삭제하십시오 + # 删除已存在但未运行的容器 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}컨테이너 [$container] 존재하지만 실행되지 않고 오래된 컨테이너를 삭제합니다 ...${NC}" + echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" docker rm -f "$container" fi - # 컨테이너를 시작하십시오 - echo "복원 명령 실행 : docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # 启动容器 + echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}일반 컨테이너에 대한 백업 정보는 발견되지 않았습니다${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" - # /home /docker에서 파일을 복원하십시오 + # 还原 /home/docker 下的文件 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}/home /docker에서 파일을 복원 ...${NC}" + echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home /docker의 파일이 복원되었습니다${NC}" + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else - echo -e "${YELLOW}/home /docker 아래 파일의 백업이 발견되지 않았습니다.${NC}" + echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" fi @@ -7100,66 +7103,68 @@ docker_ssh_migration() { # ---------------------------- - # 마이그레이션 + # 迁移 # ---------------------------- migrate_docker() { - ensure_jq - list_backups - read -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + send_stats "Docker迁移" + install jq + read -p "请输入要迁移的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } - read -p "대상 서버 IP :" TARGET_IP - read -p "대상 서버 SSH 사용자 이름 :" TARGET_USER + read -p "目标服务器IP: " TARGET_IP + read -p "目标服务器SSH用户名: " TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}백업 전송 ...${NC}" + echo -e "${YELLOW}传输备份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키로 로그인하십시오 + # 使用密钥登录 scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 백업을 삭제하십시오 + # 删除备份 # ---------------------------- delete_backup() { - list_backups - read -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + send_stats "Docker备份文件删除" + read -p "请输入要删除的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}삭제 된 백업 :${BACKUP_DIR}${NC}" + echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" } # ---------------------------- - # 메인 메뉴 + # 主菜单 # ---------------------------- main_menu() { + send_stats "Docker备份迁移还原" while true; do clear echo "------------------------" - echo -e "도커 백업/마이그레이션/복원 도구" + echo -e "Docker备份/迁移/还原工具" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. Docker 프로젝트를 백업하십시오" - echo -e "2. Docker 프로젝트를 마이그레이션합니다" - echo -e "3. Docker 프로젝트를 복원하십시오" - echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" + echo -e "1. 备份docker项目" + echo -e "2. 迁移docker项目" + echo -e "3. 还原docker项目" + echo -e "4. 删除docker项目的备份文件" echo "------------------------" - echo -e "0. 이전 메뉴로 돌아갑니다" + echo -e "0. 返回上一级菜单" echo "------------------------" - read -p "선택하십시오 :" choice + read -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}잘못된 옵션${NC}" ;; + *) echo -e "${RED}无效选项${NC}" ;; esac + break_end done } @@ -7174,38 +7179,38 @@ linux_docker() { while true; do clear - # Send_stats "Docker Management" - echo -e "도커 관리" + # send_stats "docker管理" + echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker 환경을 설치하고 업데이트하십시오${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Docker Global Status를 봅니다${gl_huang}★${gl_bai}" + 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}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}쓸모없는 도커 컨테이너 및 미러 네트워크 데이터 볼륨을 청소하십시오" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" 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}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}11. ${gl_bai}开启Docker-ipv6访问" + echo -e "${gl_kjlan}12. ${gl_bai}关闭Docker-ipv6访问" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}백업/마이그레이션/복원 Docker 환경" - echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경을 제거하십시오" + echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "Docker 환경을 설치하십시오" + send_stats "安装docker环境" install_add_docker ;; @@ -7216,22 +7221,22 @@ linux_docker() { 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 "도커 버전" + send_stats "docker全局状态" + echo "Docker版本" docker -v docker compose version echo "" - echo -e "도커 이미지 :${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "도커 컨테이너 :${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "도커 네트워크 :${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7246,8 +7251,8 @@ linux_docker() { 5) while true; do clear - send_stats "도커 네트워크 관리" - echo "도커 네트워크 목록" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7271,36 +7276,36 @@ linux_docker() { done echo "" - echo "네트워크 작동" + echo "网络操作" echo "------------------------" - echo "1. 네트워크를 만듭니다" - echo "2. 인터넷에 가입하십시오" - echo "3. 네트워크를 종료하십시오" - echo "4. 네트워크를 삭제합니다" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "네트워크를 만듭니다" - read -e -p "새 네트워크 이름 설정 :" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "인터넷에 가입하십시오" - read -e -p "네트워크 이름에 가입 :" dockernetwork - read -e -p "해당 컨테이너는 네트워크에 추가됩니다 (여러 컨테이너 이름은 공간으로 분리됩니다)." dockernames + 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 + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7309,8 +7314,8 @@ linux_docker() { ;; 4) - send_stats "네트워크를 삭제하십시오" - read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7324,29 +7329,29 @@ linux_docker() { 6) while true; do clear - send_stats "도커 볼륨 관리" - echo "도커 볼륨 목록" + send_stats "Docker卷管理" + echo "Docker卷列表" docker volume ls echo "" - echo "볼륨 작동" + echo "卷操作" echo "------------------------" - echo "1. 새 볼륨을 만듭니다" - echo "2. 지정된 볼륨을 삭제합니다" - echo "3. 모든 볼륨을 삭제하십시오" + echo "1. 创建新卷" + echo "2. 删除指定卷" + echo "3. 删除所有卷" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "새 볼륨을 만듭니다" - read -e -p "새 볼륨 이름 설정 :" dockerjuan + send_stats "新建卷" + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "볼륨 삭제 이름을 입력하십시오 (공백으로 여러 볼륨 이름을 분리하십시오)." dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7355,7 +7360,7 @@ linux_docker() { ;; 3) - send_stats "모든 볼륨을 삭제하십시오" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7364,7 +7369,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7377,7 +7382,7 @@ linux_docker() { ;; 7) clear - send_stats "도커 청소" + send_stats "Docker清理" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7386,13 +7391,13 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 8) clear - send_stats "도커 소스" + send_stats "Docker源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7408,13 +7413,13 @@ linux_docker() { 11) clear - send_stats "Docker V6 열기" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker V6 레벨" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7425,7 +7430,7 @@ linux_docker() { 20) clear - send_stats "Docker는 제거합니다" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7437,7 +7442,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7446,7 +7451,7 @@ linux_docker() { kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -7463,151 +7468,151 @@ linux_test() { while true; do clear - # Send_stats "테스트 스크립트 컬렉션" - echo -e "스크립트 수집 테스트" + # 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 스트리밍 미디어 잠금 해제 탐지" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}네트워크 속도 측정" - echo -e "${gl_kjlan}11. ${gl_bai}Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC 다기능 속도 테스트 스크립트" - echo -e "${gl_kjlan}18. ${gl_bai}Netquality Network 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}网络线路测速" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}IICU/GB5 CPU 성능 테스트 스크립트" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" 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}31. ${gl_bai}bench 性能测试" + 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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "ChatGpt는 상태 감지를 잠금 해제합니다" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "지역 스트리밍 미디어 잠금 해제 테스트" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "YEAHWU 스트리밍 미디어 잠금 해제 탐지" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_ip 품질 신체 검사 스크립트" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "MTR_TRACE 3 개의 네트워크 리턴 라인 테스트" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed 3 Net 속도 측정" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace 빠른 백홀 테스트 스크립트" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" - echo "참조 할 수있는 IP 목록" + send_stats "nxtrace指定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 "광저우 통신 : 58.60.188.222" - echo "광저우 유니폼 : 210.21.196.6" - echo "광저우 모바일 : 120.196.165.24" - echo "청두 통신 : 61.139.2.69" - echo "청두 유니폼 : 119.6.6.6" - echo "청두 모바일 : 211.137.96.205" - echo "Hunan Telecom : 36.111.200.100" - echo "후난 유니폼 : 42.48.16.100" - echo "후난 모바일 : 39.134.254.6" + 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "지정된 IP를 입력하십시오." testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "Ludashi2020 3 네트워크 라인 테스트" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "I-ABC 다기능 속도 테스트 스크립트" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "네트워크 품질 테스트 스크립트" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "YABS 성능 테스트" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "IICU/GB5 CPU 성능 테스트 스크립트" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "벤치 성능 테스트" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX 퓨전 몬스터 검토" + 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 ;; @@ -7617,7 +7622,7 @@ linux_test() { ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -7633,51 +7638,51 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud 스크립트 컬렉션" - echo -e "Oracle Cloud 스크립트 컬렉션" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}유휴 기계 활성 스크립트를 설치하십시오" - echo -e "${gl_kjlan}2. ${gl_bai}유휴 기계 활성 스크립트를 제거하십시오" + 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}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "활성 스크립트 : CPU는 10-20% 메모리를 점유합니다." - read -e -p "설치 하시겠습니까? (Y/N) :" choice + 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 + # 提示用户输入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 + 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 + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "스피드 테스트 간격 시간 (초)을 입력하십시오 [기본값 :$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 도커 컨테이너를 실행하십시오 + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7685,14 +7690,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloud 설치 활성 스크립트" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7700,20 +7705,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "시스템을 다시 설치하십시오" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - read -e -p "계속할거야? (Y/N) :" choice + 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 + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7725,28 +7730,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "유효하지 않은 선택, 다시 입력하십시오." + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "다시 설치 한 비밀번호를 입력하십시오." vpspasswd + 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 회복 시스템 스크립트" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "이 기능은 개발 단계에 있으므로 계속 지켜봐 주시기 바랍니다!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7756,15 +7761,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." - send_stats "IPv6 수정" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -7785,7 +7790,7 @@ docker_tato() { 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}" + 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 } @@ -7806,7 +7811,7 @@ 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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7834,31 +7839,31 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp 웹 사이트 빌딩" - echo -e "${gl_huang}LDNMP 웹 사이트 구축" + # 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}WordPress를 설치하십시오${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Discuz 포럼을 설치하십시오${gl_huang}4. ${gl_bai}Kadao 클라우드 데스크탑을 설치하십시오" - echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum 웹 사이트를 설치하십시오${gl_huang}8. ${gl_bai}Typecho Lightweight 블로그 웹 사이트를 설치하십시오" - echo -e "${gl_huang}9. ${gl_bai}LinkStack 공유 링크 플랫폼을 설치하십시오${gl_huang}20. ${gl_bai}동적 사이트를 사용자 정의합니다" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}사이트 리버스 프록시 -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}AI 페인팅 프롬프트 워드 생성기를 설치하십시오${gl_huang}28. ${gl_bai}사이트 리버스 프록시로드 밸런싱" - echo -e "${gl_huang}30. ${gl_bai}정적 사이트를 사용자 정의합니다" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7872,10 +7877,10 @@ linux_ldnmp() { 3) clear - # Discuz 포럼 + # Discuz论坛 webname="Discuz论坛" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,21 +7903,21 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; 4) clear - # Kedao 클라우드 데스크탑 + # 可道云桌面 webname="可道云桌面" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,20 +7939,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" - echo "Redis 호스트 : Redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # Apple CMS + # 苹果CMS webname="苹果CMS" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7978,24 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 접두사 : MAC_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "설치가 성공한 후 배경 주소에 로그인하십시오." + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 한 다리 카운팅 카드 + # 独脚数卡 webname="独脚数卡" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,34 +8016,34 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" - echo "Redis 주소 : Redis" - echo "Redis Password : 기본적으로 채워지지 않습니다" - echo "Redis Port : 6379" + echo "redis地址: redis" + echo "redis密码: 默认不填写" + echo "redis端口: 6379" echo "" - echo "웹 사이트 URL : https : //$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "사용자 이름 : 관리자" - echo "비밀번호 : 관리자" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "로그인 할 때 오른쪽 상단에 빨간색 Error0이 나타나면 다음 명령을 사용하십시오." - echo "나는 또한 유니콘 번호 카드가 너무 귀찮다는 것에 대해 매우 화가 났으며 그러한 문제가있을 것입니다!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # Flarum 포럼 + # flarum论坛 webname="flarum论坛" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8080,12 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : flarum_" - echo "관리자 정보는 직접 설정됩니다" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -8088,8 +8093,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8113,11 +8118,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 접두사 : typecho_" - echo "데이터베이스 주소 : MySQL" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -8126,8 +8131,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,18 +8157,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8180,10 +8185,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드하십시오" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" - read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8198,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php가있는 경로" + 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 "(/home/web/html/와 유사한 Index.php의 경로를 입력하십시오.$yuming/wordpress/): " index_lujing + 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 -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1. PHP의 최신 버전 | 2. PHP7.4 :" pho_v + 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 @@ -8217,15 +8222,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "유효하지 않은 선택, 다시 입력하십시오." + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 지정된 확장자를 설치하십시오" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "설치된 확장" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8235,25 +8240,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 사이트 구성 편집" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 작성하고 데이터베이스 백업이 있습니다." use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8263,10 +8268,10 @@ linux_ldnmp() { 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 "데이터베이스 가져 오기 테이블 데이터" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "데이터베이스 가져 오기가 완료되었습니다" + echo "数据库导入完成" ;; *) echo @@ -8278,12 +8283,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" - echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 :$prefix" - echo "관리자 로그인 정보는 직접 설정됩니다" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -8296,10 +8301,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "점프 도메인 이름을 입력하십시오 :" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -8321,7 +8326,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8332,11 +8337,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "도메인 이름 형식 :${gl_huang}google.com${gl_bai}" - read -e -p "반세기 도메인 이름을 입력하십시오 :" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8356,8 +8361,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8379,8 +8384,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8397,8 +8402,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8431,8 +8436,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8449,10 +8454,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드를 업로드하십시오" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" - read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8462,12 +8467,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html이있는 경로" + 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 "(/home/web/html/와 유사한 index.html로가는 경로를 입력하십시오.$yuming/index/): " index_lujing + 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 @@ -8492,21 +8497,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP 환경 백업" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "백업 파일이 작성되었습니다 : /home /$backup_filename" - read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8514,9 +8519,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." + echo "文件已传送至远程服务器home目录。" else - echo "전송할 파일은 찾을 수 없었습니다." + echo "未找到要传送的文件。" fi break ;; @@ -8524,7 +8529,7 @@ linux_ldnmp() { break ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8532,9 +8537,9 @@ linux_ldnmp() { 33) clear - send_stats "시간이 지정된 원격 백업" - read -e -p "원격 서버 IP를 입력하십시오." useip - read -e -p "원격 서버 비밀번호를 입력하십시오." usepasswd + 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 @@ -8544,18 +8549,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 주간 백업 2. 매일 백업" - read -e -p "선택을 입력하십시오 :" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "주간 백업의 요일을 선택하십시오 (0-6, 0은 일요일을 나타냅니다) :" weekday + 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 + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8569,19 +8574,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP 환경 복원" - echo "사용 가능한 사이트 백업" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename + 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 @@ -8591,7 +8596,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8600,7 +8605,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "압축 패키지가 발견되지 않았습니다." + echo "没有找到压缩包。" fi ;; @@ -8618,11 +8623,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP 환경을 업데이트하십시오" - echo "LDNMP 환경을 업데이트하십시오" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "구성 요소의 새 버전을 발견하십시오" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8642,13 +8647,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. Nginx 업데이트 2. MySQL 업데이트 3. PHP 업데이트 4. Redis 업데이트" + echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5. 전체 환경을 업데이트하십시오" + echo "5. 更新完整环境" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8657,7 +8662,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "입력하십시오${ldnmp_pods}버전 번호 (예 : 8.0 8.3 8.4 9.0) (최신 버전을 얻으려면 입력) :" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8668,13 +8673,13 @@ linux_ldnmp() { 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}마치다" + 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 + 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 @@ -8707,8 +8712,8 @@ linux_ldnmp() { 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}마치다" + send_stats "更新$ldnmp_pods" + echo "更新${ldnmp_pods}完成" ;; 4) @@ -8719,15 +8724,15 @@ linux_ldnmp() { 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}마치다" + 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 환경을 완전히 업데이트하십시오" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8753,7 +8758,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP 환경을 제거하십시오" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8767,7 +8772,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8777,7 +8782,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 입력!" + echo "无效的输入!" esac break_end @@ -8797,12 +8802,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "응용 프로그램 시장" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 루프로 색상을 설정하십시오 + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8811,67 +8816,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1 파넬 신세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}우분투 원격 데스크탑 웹 에디션" - echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" - echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}Rocketchat 멀티 플레이어 온라인 채팅 시스템" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" - echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" - echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" - echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" - echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" - echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" - echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" - echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}Stirlingpdf 도구 컬렉션${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" - echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" - echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" - echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}Websh 웹 버전 SSH 연결 도구" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" - echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdesk 원격 책상 (릴레이)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" - echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹 사이트 빌딩 관리 패널" - echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}점프 서버 오픈 소스 요새 기계" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" - echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" - echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" - echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" - echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" - echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" - echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" - echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" - echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" - echo -e "${gl_kjlan}85. ${color85}Immich 사진 비디오 관리자${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" - echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" - echo -e "${gl_kjlan}89. ${color89}filecodebox 파일 Express${gl_kjlan}90. ${color90}매트릭스 분산 채팅 프로토콜" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자" + echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice fi case $sub_choice in @@ -8990,6 +8998,9 @@ while true; do docker_rum() { + mkdir -p /home/docker/openlist + chmod -R 777 /home/docker/openlist + docker run -d \ --restart=always \ -v /home/docker/openlist:/opt/openlist/data \ @@ -9021,8 +9032,8 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" admin - read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9055,7 +9066,7 @@ while true; do ;; 7|nezha) clear - send_stats "Nezha를 구축하십시오" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9064,20 +9075,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezha 모니터링$check_docker $update_status" - echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" - echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 사용" + echo "1. 使用" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9134,7 +9145,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 건설하십시오" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9144,43 +9155,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우체국 서비스$check_docker $update_status" - echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}포트$port현재 사용할 수 없습니다${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "액세스 주소 :" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1. 설치 2. 업데이트 3. 제거" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "이메일 도메인 이름 (예 : Mail.yuming.com)을 설정하십시오." yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "이 DNS 레코드를 먼저 구문 분석하십시오" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9190,7 +9201,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 키를 누르십시오 ..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9209,9 +9220,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.io가 설치되었습니다" + echo "poste.io已经安装完成" echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -9234,9 +9245,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Poste.io가 설치되었습니다" + echo "poste.io已经安装完成" echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -9247,7 +9258,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "应用已卸载" ;; *) @@ -9281,7 +9292,7 @@ while true; do clear ip_address - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -9291,7 +9302,7 @@ while true; do 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이 설치되었습니다" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -9301,7 +9312,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -9385,7 +9396,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -9399,7 +9410,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -9544,7 +9555,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 수영장을 건설하십시오" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9552,20 +9563,20 @@ while true; do while true; do check_docker_app clear - echo -e "썬더 풀 서비스$check_docker" - echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 설치 2. 업데이트 3. 비밀번호 재설정 4. 제거" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9575,7 +9586,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Thunder Pool WAF 패널이 설치되었습니다" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9588,7 +9599,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "Thunder Pool WAF 패널이 업데이트되었습니다" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9599,7 +9610,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9718,8 +9729,8 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" admin - read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10007,7 +10018,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="공식 웹 사이트 소개 :${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10060,7 +10071,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya 가족 버킷" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10264,9 +10275,9 @@ while true; do prometheus_install clear ip_address - echo "설치" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10284,7 +10295,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10371,7 +10382,7 @@ while true; do 51|pve) clear - send_stats "PVE 치킨" + send_stats "PVE开小鸡" 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 ;; @@ -10491,7 +10502,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10506,7 +10517,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10534,7 +10545,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10549,7 +10560,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10557,7 +10568,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10578,17 +10589,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "설치" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름 : 관리자" - echo "초기 비밀번호 : changeme" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "앱이 업데이트되었습니다" + echo "应用已更新" } @@ -10598,7 +10609,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10645,7 +10656,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10661,7 +10672,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -10923,7 +10934,7 @@ while true; do docker_rum() { - read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10957,9 +10968,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "로그인 사용자 이름 설정 :" admin - read -e -p "로그인 사용자 비밀번호 설정 :" admin_password - read -e -p "인증 코드를 입력하십시오." shouquanma + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password + read -e -p "输入授权码: " shouquanma mkdir -p /home/docker/moontv @@ -10969,13 +10980,13 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -10989,7 +11000,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11062,8 +11073,8 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" app_use - read -e -p "로그인 비밀번호 설정 :" app_passwd + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -11160,11 +11171,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 임의의 키와 암호를 생성합니다 + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11173,17 +11184,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 관리자 계정 정보를 추가하십시오 + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 컨테이너를 시작하십시오 + # 启动容器 docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -11193,7 +11204,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 원래 변수를 유지하십시오 + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11210,7 +11221,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11260,7 +11271,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11278,7 +11289,7 @@ while true; do docker_rum() { - read -e -p "설정${docker_name}SK-159KEJILIONYYDS163 :와 같은 로그인 키 (SK 별 문자 및 숫자 조합) :" app_passwd + read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11382,7 +11393,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -11395,7 +11406,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11556,7 +11567,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." + echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11608,7 +11619,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치" + echo "已经安装完成" check_docker_app_ip } @@ -11622,7 +11633,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "앱이 제거되었습니다" + echo "应用已卸载" } docker_app_plus @@ -11661,24 +11672,282 @@ while true; do ;; + 93|dufs) + + local app_id="93" + local docker_name="dufs" + local docker_img="sigoden/dufs" + local docker_port=8093 + + docker_rum() { + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}:/data \ + -p ${docker_port}:5000 \ + ${docker_img} /data -A + + } + + local docker_describe="极简静态文件服务器,支持上传下载" + local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 94|gopeed) + + local app_id="94" + local docker_name="gopeed" + local docker_img="liwei2633/gopeed" + local docker_port=8094 + + docker_rum() { + + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}/downloads:/app/Downloads \ + -v /home/docker/${docker_name}/storage:/app/storage \ + -p ${docker_port}:9999 \ + ${docker_img} -u ${app_use} -p ${app_passwd} + + } + + local docker_describe="分布式高速下载工具,支持多种协议" + local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 95|paperless) + + local app_id="95" + + local app_name="paperless文档管理平台" + local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" + local app_url="视频介绍: https://docs.paperless-ngx.com/" + local docker_name="paperless-webserver-1" + local docker_port="8095" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/paperless + mkdir -p /home/docker/paperless/export + mkdir -p /home/docker/paperless/consume + cd /home/docker/paperless + + curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml + curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml + cd /home/docker/paperless + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/paperless/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/paperless/ && docker compose down --rmi all + rm -rf /home/docker/paperless + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + 97|wgs) + + local app_id="97" + local docker_name="wireguard" + local docker_img="lscr.io/linuxserver/wireguard:latest" + local docker_port=51820 + + docker_rum() { + + read -p "请输入组网的客户端数量 (默认 5): " COUNT + COUNT=${COUNT:-5} + + PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + + stop_containers_or_kill_process 51820 &>/dev/null + + ip_address + docker run -d \ + --name=wireguard \ + --network host \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e SERVERURL=${ipv4_address} \ + -e SERVERPORT=51820 \ + -e PEERS=${PEERS} \ + -e INTERNAL_SUBNET=10.13.13.0 \ + -e ALLOWEDIPS=10.13.13.0/24 \ + -e PERSISTENTKEEPALIVE_PEERS=all \ + -e LOG_CONFS=true \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules \ + --restart unless-stopped \ + lscr.io/linuxserver/wireguard:latest + + + sleep 3 + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + for f in "$d"/*.conf; do + grep -q "^PersistentKeepalive *= *25$" "$f" || \ + sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + done + done + ' + + docker exec -it wireguard bash -c ' + for d in /config/peer_*; do + cd "$d" || continue + conf_file=$(ls *.conf) + base_name="${conf_file%.conf}" + echo "生成二维码: $base_name.png" + qrencode -o "$base_name.png" < "$conf_file" + done + ' + + sleep 2 + docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + sleep 2 + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + sleep 2 + echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" + echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 98|wgc) + + local app_id="98" + local docker_name="wireguardc" + local docker_img="kjlion/wireguard:alpine" + local docker_port=51820 + + docker_rum() { + + mkdir -p /home/docker/wireguard/config/ + + local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CONFIG_FILE")" + + echo "请粘贴你的客户端配置,连续按两次回车保存:" + + # 初始化变量 + input="" + empty_line_count=0 + + # 逐行读取用户输入 + while IFS= read -r line; do + if [[ -z "$line" ]]; then + ((empty_line_count++)) + if [[ $empty_line_count -ge 2 ]]; then + break + fi + else + empty_line_count=0 + input+="$line"$'\n' + fi + done + + # 写入配置文件 + echo "$input" > "$CONFIG_FILE" + + echo "客户端配置已保存到 $CONFIG_FILE" + + docker run -d \ + --name wireguardc \ + --network host \ + --cap-add NET_ADMIN \ + --cap-add SYS_MODULE \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules:ro \ + --restart always \ + kjlion/wireguard:alpine + + sleep 3 + + docker logs wireguardc + + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear - send_stats "모든 응용 프로그램 백업" + send_stats "全部应用备份" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "백업 파일이 작성되었습니다 : /$backup_filename" - read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice + echo "备份文件已创建: /$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11686,14 +11955,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "파일은 원격 서버/루트 디렉토리로 전송되었습니다." + echo "文件已传送至远程服务器/根目录。" else - echo "전송할 파일은 찾을 수 없었습니다." + echo "未找到要传送的文件。" fi break ;; *) - echo "참고 : 현재 백업에는 Docker 프로젝트 만 포함되어 있으며 Pagoda 및 1Panel과 같은 웹 사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -11703,29 +11972,29 @@ while true; do r) root_use - send_stats "모든 응용 프로그램이 복원됩니다" - echo "사용 가능한 앱 백업" + send_stats "全部应用还原" + echo "可用的应用备份" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # 사용자가 파일 이름을 입력하지 않으면 최신 압축 패키지를 사용하십시오. + # 如果用户没有输入文件名,使用最新的压缩包 if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "응용 프로그램 데이터가 복원되었습니다. 지정된 응용 프로그램 메뉴를 수동으로 입력하고 응용 프로그램을 업데이트하여 응용 프로그램을 복원하십시오." + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" else - echo "압축 패키지가 발견되지 않았습니다." + echo "没有找到压缩包。" fi ;; @@ -11748,35 +12017,35 @@ linux_work() { while true; do clear - send_stats "백엔드 작업 공간" - echo -e "백엔드 작업 공간" - echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." - echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." - echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "현재 기존 작업 공간 목록" + 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}작업 공간 No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" - echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" - echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" - echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" - echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}작업 공간 번호 10" + 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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11784,7 +12053,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11792,63 +12061,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11860,21 +12129,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH 거주 모드" - echo -e "SSH 거주 모드${tmux_sshd_status}" - echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1. 2를 켜십시오. 2를 끕니다" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" gongzuoqu_del + 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 + 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 ;; @@ -11890,29 +12159,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "사용자 정의 작업 공간" + send_stats "自定义工作区" ;; 23) - read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "배경 작업 공간에 명령을 주입합니다" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "작업 공간을 삭제합니다" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -11937,54 +12206,54 @@ linux_Settings() { while true; do clear - # Send_stats "시스템 도구" - echo -e "시스템 도구" + # 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}지정된 버전의 Python을 설치하십시오" - 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${gl_kjlan}10. ${gl_bai}우선 순위 IPv4/IPv6을 전환하십시오" + echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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 고위험 취약점을 수정하십시오" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}바이러스 스캐닝 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "바로 가기 키를 입력하십시오 (종료하려면 0을 입력하십시오) :" kuaijiejian + 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 "스크립트 바로 가기 키가 설정되었습니다" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11992,34 +12261,34 @@ linux_Settings() { 2) clear - send_stats "로그인 비밀번호를 설정하십시오" - echo "로그인 비밀번호를 설정하십시오" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "루트 비밀번호 모드" + send_stats "root密码模式" add_sshpasswd ;; 4) root_use - send_stats "PY 버전 관리" - echo "파이썬 버전 관리" - echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + send_stats "py版本管理" + echo "python版本管理" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 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 + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "스크립트 PY 관리" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -12052,7 +12321,7 @@ linux_Settings() { 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 "알 수없는 패키지 관리자!" + echo "未知的包管理器!" return fi @@ -12081,55 +12350,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" - send_stats "스크립트 Py 버전을 스위치하십시오" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "포트 열기" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "모든 포트가 열려 있습니다" + echo "端口已全部开放" ;; 6) root_use - send_stats "SSH 포트를 수정하십시오" + send_stats "修改SSH端口" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 현재 SSH 포트 번호를 읽으십시오 + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # 사용자에게 새 SSH 포트 번호를 입력하라는 메시지 - read -e -p "새로운 SSH 포트 번호를 입력하십시오 :" new_port + # 提示用户输入新的 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 포트가 수정되었습니다" + send_stats "SSH端口已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSH 포트 수정을 종료하십시오" + send_stats "退出SSH端口修改" break else - echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "입력이 유효하지 않으므로 번호를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -12148,8 +12417,8 @@ EOF ;; 9) root_use - send_stats "신규 사용자는 루트를 비활성화합니다" - read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12164,49 +12433,49 @@ EOF passwd -l root - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 10) root_use - send_stats "V4/V6 우선 순위를 설정하십시오" + send_stats "设置v4/v6优先级" while true; do clear - echo "V4/V6 우선 순위를 설정하십시오" + 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}우선 사항" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1. IPv4 우선 순위 2. IPv6 우선 순위 3. IPv6 수리 도구" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선호하는 네트워크를 선택하십시오." choice + 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 우선 순위로 전환되었습니다" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "IPv6 우선 순위로 전환되었습니다" - send_stats "IPv6 우선 순위로 전환되었습니다" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." - send_stats "IPv6 수정" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12224,43 +12493,43 @@ EOF 12) root_use - send_stats "가상 메모리를 설정합니다" + send_stats "设置虚拟内存" while true; do clear - echo "가상 메모리를 설정합니다" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "2G 가상 메모리가 설정되었습니다" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "4G 가상 메모리가 설정되었습니다" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "사용자 정의 가상 메모리가 설정되었습니다" + send_stats "已设置自定义虚拟内存" ;; *) @@ -12273,8 +12542,8 @@ EOF 13) while true; do root_use - send_stats "사용자 관리" - echo "사용자 목록" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12285,62 +12554,62 @@ EOF echo "" - echo "계정 운영" + echo "账户操作" echo "------------------------" - echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5. 계정을 삭제하십시오" + echo "5. 删除账号" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 2) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 새로운 사용자에게 허가를 부여하십시오 + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "작업이 완료되었습니다." + echo "操作已完成。" ;; 3) - read -e -p "사용자 이름을 입력하십시오 :" username - # 새로운 사용자에게 허가를 부여하십시오 + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "사용자 이름을 입력하십시오 :" username - # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "삭제하려면 사용자 이름을 입력하십시오." username - # 사용자와 홈 디렉토리를 삭제하십시오 + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -12353,50 +12622,50 @@ EOF 14) clear - send_stats "사용자 정보 생성기" - echo "임의의 사용자 이름" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "임의의 사용자 이름$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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 개의 임의의 사용자 이름을 생성합니다 + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "무작위 uuid" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "무작위 uuid$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16 비트 랜덤 비밀번호" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32 비트 랜덤 비밀번호" + 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" + echo "随机密码 $i: $password" done echo "" @@ -12404,46 +12673,46 @@ EOF 15) root_use - send_stats "시간대를 변경하십시오" + send_stats "换时区" while true; do clear - echo "시스템 시간 정보" + echo "系统时间信息" - # 현재 시스템 시간대를 얻으십시오 + # 获取当前系统时区 local timezone=$(current_timezone) - # 현재 시스템 시간을 얻으십시오 + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 시간대와 시간을 보여줍니다 - echo "현재 시스템 시간대 :$timezone" - echo "현재 시스템 시간 :$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "시간대 스위칭" + echo "时区切换" echo "------------------------" - echo "아시아" - echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" - echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" - echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" - echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" - echo "9. 태국 방콕에서의 시간" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" - echo "미국" - echo "21. 서양 시간 22. 동부 시간" - echo "23. 캐나다 시간 24. 멕시코 시간" - echo "25. 브라질 시간 26. 아르헨티나 시간" + echo "美洲" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31. UTC 글로벌 표준 시간" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -12486,21 +12755,21 @@ EOF 18) root_use - send_stats "호스트 이름을 수정하십시오" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "새 호스트 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_hostname + 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 등과 같은 다른 시스템 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12518,11 +12787,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" - send_stats "호스트 이름이 변경되었습니다" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "종료, 호스트 이름이 변경되지 않았습니다." + echo "已退出,未更改主机名。" break fi done @@ -12530,32 +12799,32 @@ EOF 19) root_use - send_stats "시스템 업데이트 소스를 변경하십시오" + send_stats "换系统更新源" clear - echo "업데이트 소스 영역을 선택하십시오" - echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "중국 본토의 기본 소스" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "중국 본토의 교육 원" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "해외 출신" + send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "취소" + echo "已取消" ;; esac @@ -12563,62 +12832,62 @@ EOF ;; 20) - send_stats "타이밍 작업 관리" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "시간이 정한 작업 목록" + echo "定时任务列表" crontab -l echo "" - echo "작동하다" + echo "操作" echo "------------------------" - echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1. 월간 작업 2. 주간 작업" - echo "3. 일일 작업 4. 시간당 작업" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "선택을 입력하십시오 :" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "작업을 수행하려면 매월 어느 날을 선택합니까? (1-30) :" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "시간이 정한 작업을 추가하십시오" + send_stats "添加定时任务" ;; 2) - read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "타이밍 작업을 삭제하십시오" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "타이밍 작업 편집" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -12630,32 +12899,32 @@ EOF 21) root_use - send_stats "지역 호스트 구문 분석" + send_stats "本地host解析" while true; do clear - echo "기본 호스트 구문 분석 목록" - echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" - echo "작동하다" + echo "操作" echo "------------------------" - echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts - send_stats "로컬 호스트 구문 분석이 추가되었습니다" + send_stats "本地host解析新增" ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "로컬 호스트 구문 분석 및 삭제" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -12666,7 +12935,7 @@ EOF 22) root_use - send_stats "SSH 방어" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12678,20 +12947,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH 방어 프로그램$check_docker" - echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" - echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 安装防御程序" echo "------------------------" - echo "2. SSH 차단 레코드보기" - echo "3. 실시간 로그 모니터링" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -12714,7 +12983,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -12727,47 +12996,47 @@ EOF 23) root_use - send_stats "현재 제한 종료 기능" + send_stats "限流关机功能" while true; do clear - echo "현재 제한 종료 기능" - echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # limiting_shut_down.sh 파일이 있는지 확인하십시오 + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gb의 값을 얻으십시오 + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 새 가상 메모리 크기를 입력하십시오 - echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." - read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -12780,15 +13049,15 @@ EOF (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 "전류 제한 종료가 설정되었습니다" + 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 "전류 제한 종료 기능이 꺼졌습니다" + echo "已关闭限流关机功能" ;; *) break @@ -12801,40 +13070,40 @@ EOF 24) root_use - send_stats "개인 키 로그인" + send_stats "私钥登录" while true; do clear - echo "루트 비공개 키 로그인 모드" - echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "새로운 키를 생성하십시오" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "기존 공개 키를 가져옵니다" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "로컬 비밀 키를보십시오" + send_stats "查看本机密钥" echo "------------------------" - echo "공개 키 정보" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "개인 키 정보" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12850,18 +13119,18 @@ EOF 25) root_use - send_stats "전보 경고" - echo "TG-BOT 모니터링 및 조기 경고 기능" - echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." - echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" - read -e -p "계속할거야? (Y/N) :" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "전보 경고가 활성화되었습니다" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -12883,7 +13152,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # ~/.profile 파일에 추가하십시오 + # 添加到 ~/.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 @@ -12894,21 +13163,21 @@ EOF source ~/.profile clear - echo "TG-BOT 조기 경고 시스템이 시작되었습니다" - echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "SSH에서 고위험 취약점을 수정하십시오" + 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 @@ -12952,7 +13221,7 @@ EOF ;; 37) clear - send_stats "명령 줄 기록" + 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; } @@ -12975,61 +13244,61 @@ EOF 41) clear - send_stats "게시판" - echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" + send_stats "留言板" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "원 스톱 튜닝" - echo "원 스톱 시스템 최적화" + 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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "원 스톱 튜닝 시작" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 시스템 정크 파일 정리" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13046,25 +13315,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소를 자동으로 최적화합니다${gl_huang}${gl_bai}" + 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 -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. Linux 시스템의 커널 매개 변수 최적화" - echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -13072,7 +13341,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하십시오" + send_stats "重启系统" server_reboot ;; 100) @@ -13088,32 +13357,32 @@ EOF local status_message="无法确定的状态" fi - echo "개인 정보 및 보안" - echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." - echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "현재 상태 :$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1. 수집을 켭니다" - echo "2. 컬렉션을 닫습니다" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 "개인 정보 보호 및 보안 컬렉션이 활성화되었습니다" + 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 "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -13129,11 +13398,11 @@ EOF 102) clear - send_stats "기술 라이온 스크립트를 제거하십시오" - echo "기술 라이온 스크립트를 제거하십시오" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." - read -e -p "계속할거야? (Y/N) :" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13141,16 +13410,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "대본은 제거되었습니다." + echo "脚本已卸载,再见!" break_end clear exit ;; [Nn]) - echo "취소" + echo "已取消" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -13160,7 +13429,7 @@ EOF ;; *) - echo "잘못된 입력!" + echo "无效的输入!" ;; esac break_end @@ -13178,187 +13447,187 @@ EOF linux_file() { root_use - send_stats "파일 관리자" + send_stats "文件管理器" while true; do clear - echo "파일 관리자" + echo "文件管理器" echo "------------------------" - echo "현재 경로" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" - echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" - echo "15. 파일을 삭제하십시오" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" - echo "25. 파일을 다른 서버로 전달합니다" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "디렉토리 이름을 입력하십시오 :" dirname - cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" - send_stats "디렉토리로 이동하십시오" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "작성하려면 디렉토리 이름을 입력하십시오." dirname - mkdir -p "$dirname" && echo "디렉토리가 생성되었습니다" || echo "창조가 실패했습니다" - send_stats "디렉토리를 만듭니다" + 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 "디렉토리 권한을 수정하십시오" + 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 "디렉토리의 이름을 바꿉니다" + 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 "디렉토리 삭제" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "이전 메뉴 디렉토리로 돌아갑니다" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "작성하려면 파일 이름을 입력하십시오." filename - touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" - send_stats "파일을 만듭니다" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "편집 할 파일 이름을 입력하십시오." filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "파일 편집" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "파일 이름을 입력하십시오 :" filename - read -e -p "권한을 입력하십시오 (예 : 755) :" perm - chmod "$perm" "$filename" && echo "권한이 수정되었습니다" || echo "수정이 실패했습니다" - send_stats "파일 권한을 수정하십시오" + 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 "파일의 이름을 바꿉니다" + 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 "파일 삭제" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" - send_stats "압축 파일/디렉토리" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" - send_stats "압축 파일/디렉토리 해제" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." - send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" - send_stats "파일 또는 디렉토리를 이동하십시오" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." - send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 - cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사합니다" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "오류 : 파일이 존재하지 않습니다." - send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "오류 : 원격 서버 비밀번호를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "로그인 포트 (기본값 22)를 입력하십시오 :" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "스크립트는 최신입니다$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13656,15 +13925,15 @@ while true; do (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 "자동 스크립트 업데이트를 켜십시오" + 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 "스크립트 자동 업데이트를 닫습니다" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -13686,41 +13955,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "기술 라이온 스크립트 도구 상자 v$sh_v" -echo -e "명령 줄 입력${gl_huang}k${gl_kjlan}스크립트를 신속하게 시작하십시오${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" +echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +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}Phantom Beast Palu 서버 오프닝 스크립트" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "선택을 입력하십시오 :" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "시스템 업데이트" ; linux_update ;; - 3) clear ; send_stats "시스템 정리" ; linux_clean ;; + 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 + 7) clear ; send_stats "warp管理" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -13731,13 +14000,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "잘못된 입력!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -13745,68 +14014,68 @@ done k_info() { -send_stats "K 명령 참조 사용 사례" +send_stats "k命令参考用例" echo "-------------------" -echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "다음은 K 명령 참조 유스 케이스입니다." -echo "스크립트 시작 k" -echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" -echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" -echo "업데이트 시스템 K 업데이트 | K 업데이트" -echo "깨끗한 시스템 쓰레기 K Clean | K 청소" -echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" -echo "BBR3 제어판 K BBR3 | K bbrv3" -echo "커널 튜닝 패널 K nhyh | K 커널 최적화" -echo "가상 메모리 K 스왑 2048을 설정하십시오" -echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" -echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" -echo "시스템 백업 기능 K 백업 | K bf | K 백업" -echo "SSH 원격 연결 도구 K SSH | K 원격 연결" -echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" -echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" -echo "인트라넷 침투 (서버 측) K frps" -echo "인트라넷 침투 (클라이언트) K frpc" -echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" -echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" -echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" -echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" -echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" -echo "도메인 이름 인증서 응용 프로그램 K SSL" -echo "도메인 이름 인증서 만료 쿼리 K SSL PS" -echo "도커 환경 설치 K 도커 설치 | K 도커 설치" -echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" -echo "Docker Image Management K Docker img | K Docker Image" -echo "LDNMP 사이트 관리 K 웹" -echo "LDNMP 캐시 정리 K 웹 캐시" -echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" -echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." -echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" -echo "방화벽 패널 K FHQ | K 방화벽" -echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" -echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" -echo "앱 시장 관리 K 앱" -echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" +echo "bbr3控制面板 k bbr3 | k bbrv3" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" +echo "docker容器管理 k docker ps |k docker 容器" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # 매개 변수가없는 경우 대화식 로직을 실행하십시오 + # 如果没有参数,运行交互式逻辑 kejilion_sh else - # 매개 변수가있는 경우 해당 함수를 실행하십시오 + # 如果有参数,执行相应函数 case $1 in install|add|安装) shift - send_stats "소프트웨어를 설치하십시오" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "소프트웨어를 제거하십시오" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -13840,7 +14109,7 @@ else rsync_run) shift - send_stats "시간이 정한 RSYNC 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -13859,7 +14128,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13872,13 +14141,13 @@ else swap) shift - send_stats "가상 메모리를 신속하게 설정했습니다" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정하십시오" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -13926,42 +14195,42 @@ else status|状态) shift - send_stats "소프트웨어 상태보기" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "소프트웨어 시작" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "소프트웨어 일시 정지" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "소프트웨어 재시작" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "소프트웨어 부츠" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "인증서 상태를 확인하십시오" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "인증서를 신속하게 신청하십시오" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "인증서를 신속하게 신청하십시오" + send_stats "快速申请证书" else k_info fi @@ -13971,15 +14240,15 @@ else shift case $1 in install|安装) - send_stats "Docker를 신속하게 설치하십시오" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 미러 관리" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14006,7 +14275,7 @@ else app) shift - send_stats "$@ 적용" + send_stats "应用$@" linux_panel "$@" ;; @@ -14016,4 +14285,3 @@ else ;; esac fi - diff --git a/tw/kejilion.sh b/tw/kejilion.sh index ece6e3e4e..cab3eb64a 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.0" +sh_v="4.1.2" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# 定義一個函數來執行命令 +# 定义一个函数来执行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋點信息的函數,記錄當前腳本版本號,使用時間,系統版本,CPU架構,機器所在國家和用戶使用的功能名稱,絕對不涉及任何敏感信息,請放心!請相信我! -# 為什麼要設計這個功能,目的更好的了解用戶喜歡使用的功能,進一步優化功能推出更多符合用戶需求的功能。 -# 全文可搜搜 send_stats 函數調用位置,透明開源,如有顧慮可拒絕使用。 +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用戶同意條款 +# 提示用户同意条款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}歡迎使用科技lion腳本工具箱${gl_bai}" - echo "首次使用腳本,請先閱讀並同意用戶許可協議。" - echo "用戶許可協議: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" + echo "首次使用脚本,请先阅读并同意用户许可协议。" + echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上條款? (y/n):" user_input + read -r -p "是否同意以上条款?(y/n): " user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "許可同意" + 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 "許可拒絕" + send_stats "许可拒绝" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供軟件包參數!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安裝$package...${gl_bai}" + echo -e "${gl_huang}正在安装 $package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -219,11 +219,11 @@ check_disk_space() { 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 "當前可用空間: $((available_space_mb/1024))G" - echo "最小需求空間:${required_gb}G" - echo "無法繼續安裝,請清理磁盤空間後重試。" - send_stats "磁盤空間不足" + echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" + echo "当前可用空间: $((available_space_mb/1024))G" + echo "最小需求空间: ${required_gb}G" + echo "无法继续安装,请清理磁盘空间后重试。" + send_stats "磁盘空间不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供軟件包參數!" + echo "未提供软件包参数!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸載$package...${gl_bai}" + 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 @@ -266,7 +266,7 @@ remove() { } -# 通用 systemctl 函數,適用於各種發行版 +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重啟服務 +# 重启服务 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1服務已重啟。" + echo "$1 服务已重启。" else - echo "錯誤:重啟$1服務失敗。" + echo "错误:重启 $1 服务失败。" fi } -# 啟動服務 +# 启动服务 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1服務已啟動。" + echo "$1 服务已启动。" else - echo "錯誤:啟動$1服務失敗。" + echo "错误:启动 $1 服务失败。" fi } -# 停止服務 +# 停止服务 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1服務已停止。" + echo "$1 服务已停止。" else - echo "錯誤:停止$1服務失敗。" + echo "错误:停止 $1 服务失败。" fi } -# 查看服務狀態 +# 查看服务状态 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1服務狀態已顯示。" + echo "$1 服务状态已显示。" else - echo "錯誤:無法顯示$1服務狀態。" + echo "错误:无法显示 $1 服务状态。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME已設置為開機自啟。" + echo "$SERVICE_NAME 已设置为开机自启。" } break_end() { echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意鍵繼續..." + echo "按任意键继续..." read -n 1 -s -r -p "" echo "" clear @@ -349,22 +349,21 @@ kejilion() { -check_port() { +stop_containers_or_kill_process() { + local port=$1 + local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) install lsof + 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() { - 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 - } +check_port() { stop_containers_or_kill_process 80 stop_containers_or_kill_process 443 } @@ -425,7 +424,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安裝docker環境...${gl_bai}" + echo -e "${gl_huang}正在安装docker环境...${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 @@ -506,49 +505,49 @@ while true; do echo "" echo "容器操作" echo "------------------------" - echo "1. 創建新的容器" + echo "1. 创建新的容器" echo "------------------------" - echo "2. 啟動指定容器 6. 啟動所有容器" + echo "2. 启动指定容器 6. 启动所有容器" echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 刪除指定容器 8. 刪除所有容器" - echo "5. 重啟指定容器 9. 重啟所有容器" + echo "4. 删除指定容器 8. 删除所有容器" + echo "5. 重启指定容器 9. 重启所有容器" echo "------------------------" - echo "11. 進入指定容器 12. 查看容器日誌" - echo "13. 查看容器網絡 14. 查看容器佔用" + echo "11. 进入指定容器 12. 查看容器日志" + echo "13. 查看容器网络 14. 查看容器占用" echo "------------------------" - echo "15. 開啟容器端口訪問 16. 關閉容器端口訪問" + echo "15. 开启容器端口访问 16. 关闭容器端口访问" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) send_stats "新建容器" - read -e -p "請輸入創建命令:" dockername + read -e -p "请输入创建命令: " dockername $dockername ;; 2) - send_stats "啟動指定容器" - read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername + send_stats "启动指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) send_stats "停止指定容器" - read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker stop $dockername ;; 4) - send_stats "刪除指定容器" - read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername + send_stats "删除指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker rm -f $dockername ;; 5) - send_stats "重啟指定容器" - read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername + send_stats "重启指定容器" + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker restart $dockername ;; 6) - send_stats "啟動所有容器" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) @@ -556,7 +555,7 @@ while true; do docker stop $(docker ps -q) ;; 8) - send_stats "刪除所有容器" + send_stats "删除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -565,28 +564,28 @@ while true; do [Nn]) ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 9) - send_stats "重啟所有容器" + send_stats "重启所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "進入容器" - read -e -p "請輸入容器名:" dockername + send_stats "进入容器" + read -e -p "请输入容器名: " dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日誌" - read -e -p "請輸入容器名:" dockername + send_stats "查看容器日志" + read -e -p "请输入容器名: " dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器網絡" + send_stats "查看容器网络" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -604,14 +603,14 @@ while true; do break_end ;; 14) - send_stats "查看容器佔用" + send_stats "查看容器占用" docker stats --no-stream break_end ;; 15) - send_stats "允許容器端口訪問" - read -e -p "請輸入容器名:" docker_name + send_stats "允许容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -620,8 +619,8 @@ while true; do ;; 16) - send_stats "阻止容器端口訪問" - read -e -p "請輸入容器名:" docker_name + send_stats "阻止容器端口访问" + read -e -p "请输入容器名: " docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -640,44 +639,44 @@ done docker_image() { while true; do clear - send_stats "Docker鏡像管理" - echo "Docker鏡像列表" + send_stats "Docker镜像管理" + echo "Docker镜像列表" docker image ls echo "" - echo "鏡像操作" + echo "镜像操作" echo "------------------------" - echo "1. 獲取指定鏡像 3. 刪除指定鏡像" - echo "2. 更新指定鏡像 4. 刪除所有鏡像" + echo "1. 获取指定镜像 3. 删除指定镜像" + echo "2. 更新指定镜像 4. 删除所有镜像" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "拉取鏡像" - read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames + send_stats "拉取镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}正在獲取鏡像:$name${gl_bai}" + echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新鏡像" - read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames + send_stats "更新镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新鏡像:$name${gl_bai}" + echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" docker pull $name done ;; 3) - send_stats "刪除鏡像" - read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames + send_stats "删除镜像" + read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "刪除所有鏡像" + send_stats "删除所有镜像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -686,7 +685,7 @@ while true; do [Nn]) ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -754,16 +753,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的發行版:$ID" + echo "不支持的发行版: $ID" return ;; esac else - echo "無法確定操作系統。" + echo "无法确定操作系统。" return fi - echo -e "${gl_lv}crontab 已安裝且 cron 服務正在運行。${gl_bai}" + echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" } @@ -775,27 +774,27 @@ docker_ipv6_on() { 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處理配置文件的更新 + # 使用jq处理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 檢查當前配置是否已經有 ipv6 設置 + # 检查当前配置是否已经有 ipv6 设置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,開啟 IPv6 + # 更新配置,开启 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}" + echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -810,28 +809,28 @@ docker_ipv6_off() { 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處理配置文件的更新 + # 使用jq处理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 檢查當前的 ipv6 狀態 + # 检查当前的 ipv6 状态 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 對比原始配置與新配置 + # 对比原始配置与新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}當前已關閉ipv6訪問${gl_bai}" + echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功關閉ipv6訪問${gl_bai}" + echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" fi } @@ -870,88 +869,88 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "請提供至少一個端口號" + 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" + echo "已打开端口 $port" fi done save_iptables_rules - send_stats "已打開端口" + send_stats "已打开端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "請提供至少一個端口號" + 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" + echo "已关闭端口 $port" fi done - # 刪除已存在的規則(如果有) + # 删除已存在的规则(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新規則到第一條 + # 插入新规则到第一条 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已關閉端口" + send_stats "已关闭端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "請提供至少一個IP地址或IP段" + 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" + echo "已放行IP $ip" fi done @@ -962,20 +961,20 @@ allow_ip() { block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "請提供至少一個IP地址或IP段" + 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" + echo "已阻止IP $ip" fi done @@ -990,7 +989,7 @@ block_ip() { enable_ddos_defense() { - # 開啟防禦 DDoS + # 开启防御 DDoS 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 @@ -1000,12 +999,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "開啟DDoS防禦" + send_stats "开启DDoS防御" } -# 關閉DDoS防禦 +# 关闭DDoS防御 disable_ddos_defense() { - # 關閉防禦 DDoS + # 关闭防御 DDoS 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 @@ -1015,14 +1014,14 @@ disable_ddos_defense() { 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防禦" + send_stats "关闭DDoS防御" } -# 管理國家IP規則的函數 +# 管理国家IP规则的函数 manage_country_rules() { local action="$1" local country_code="$2" @@ -1033,18 +1032,18 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在則創建 + # 如果 ipset 不存在则创建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下載 IP 區域文件 + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "錯誤:下載$country_code的 IP 區域文件失敗" + echo "错误:下载 $country_code 的 IP 区域文件失败" exit 1 fi - # 將 IP 添加到 ipset + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" @@ -1053,53 +1052,53 @@ manage_country_rules() { 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 地址" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 為允許的國家創建 ipset(如果不存在) + # 为允许的国家创建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下載 IP 區域文件 + # 下载 IP 区域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "錯誤:下載$country_code的 IP 區域文件失敗" + 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 + # 将 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 僅允許指定國家的 IP + # 仅允许指定国家的 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 地址" + echo "已成功仅允许 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 刪除國家的 iptables 規則 + # 删除国家的 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 + # 销毁 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除$country_code的 IP 地址限制" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) @@ -1116,42 +1115,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高級防火牆管理" - send_stats "高級防火牆管理" + echo "高级防火墙管理" + send_stats "高级防火墙管理" echo "------------------------" iptables -L INPUT echo "" - echo "防火牆管理" + echo "防火墙管理" echo "------------------------" - echo "1. 開放指定端口 2. 關閉指定端口" - echo "3. 開放所有端口 4. 關閉所有端口" + echo "1. 开放指定端口 2. 关闭指定端口" + echo "3. 开放所有端口 4. 关闭所有端口" echo "------------------------" - echo "5. IP白名單 6. IP黑名單" + echo "5. IP白名单 6. IP黑名单" echo "7. 清除指定IP" echo "------------------------" - echo "11. 允許PING 12. 禁止PING" + echo "11. 允许PING 12. 禁止PING" echo "------------------------" - echo "13. 啟動DDOS防禦 14. 關閉DDOS防禦" + echo "13. 启动DDOS防御 14. 关闭DDOS防御" echo "------------------------" - echo "15. 阻止指定國家IP 16. 僅允許指定國家IP" - echo "17. 解除指定國家IP限制" + echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" + echo "17. 解除指定国家IP限制" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "請輸入開放的端口號:" o_port + read -e -p "请输入开放的端口号: " o_port open_port $o_port - send_stats "開放指定端口" + send_stats "开放指定端口" ;; 2) - read -e -p "請輸入關閉的端口號:" c_port + read -e -p "请输入关闭的端口号: " c_port close_port $c_port - send_stats "關閉指定端口" + send_stats "关闭指定端口" ;; 3) - # 開放所有端口 + # 开放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1164,10 +1163,10 @@ iptables_panel() { 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 "開放所有端口" + send_stats "开放所有端口" ;; 4) - # 關閉所有端口 + # 关闭所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,33 +1179,33 @@ iptables_panel() { 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 "關閉所有端口" + send_stats "关闭所有端口" ;; 5) - # IP 白名單 - read -e -p "請輸入放行的IP或IP段:" o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IP 黑名單 - read -e -p "請輸入封鎖的IP或IP段:" c_ip + # IP 黑名单 + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) # 清除指定 IP - read -e -p "請輸入清除的IP:" d_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) - # 允許 PING + # 允许 PING 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 "允許PING" + send_stats "允许PING" ;; 12) # 禁用 PING @@ -1223,20 +1222,20 @@ iptables_panel() { ;; 15) - read -e -p "請輸入阻止的國家代碼(如 CN, US, JP):" country_code + read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code manage_country_rules block $country_code - send_stats "允許國家$country_code的IP" + send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "請輸入允許的國家代碼(如 CN, US, JP):" country_code + read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code manage_country_rules allow $country_code - send_stats "阻止國家$country_code的IP" + send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "請輸入清除的國家代碼(如 CN, US, JP):" country_code + read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code manage_country_rules unblock $country_code - send_stats "清除國家$country_code的IP" + send_stats "清除国家 $country_code 的IP" ;; *) @@ -1257,23 +1256,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 獲取當前系統中所有的 swap 分區 + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍歷並刪除所有的 swap 分區 + # 遍历并删除所有的 swap 分区 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 確保 /swapfile 不再被使用 + # 确保 /swapfile 不再被使用 swapoff /swapfile - # 刪除舊的 /swapfile + # 删除旧的 /swapfile rm -f /swapfile - # 創建新的 swap 分區 + # 创建新的 swap 分区 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1288,7 +1287,7 @@ add_swap() { rc-update add local fi - echo -e "虛擬內存大小已調整為${gl_huang}${new_swap}${gl_bai}M" + echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" } @@ -1298,7 +1297,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判斷是否需要創建虛擬內存 +# 判断是否需要创建虚拟内存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1314,21 +1313,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 獲取nginx版本 + # 获取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版本 + # 获取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版本 + # 获取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版本 + # 获取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}" @@ -1341,7 +1340,7 @@ ldnmp_v() { 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 @@ -1350,11 +1349,11 @@ install_ldnmp_conf() { default_server_ssl - # 下載 docker-compose.yml 文件並進行替換 + # 下载 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 文件中進行替換 + # 在 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 @@ -1399,7 +1398,7 @@ install_ldnmp() { clear - echo "LDNMP環境安裝完畢" + echo "LDNMP环境安装完毕" echo "------------------------" ldnmp_v @@ -1416,7 +1415,7 @@ install_certbot() { 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 "續簽任務已更新" + echo "续签任务已更新" } @@ -1453,15 +1452,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming公鑰信息${gl_bai}" + echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming私鑰信息${gl_bai}" + echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}證書存放路徑${gl_bai}" - echo "公鑰: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私鑰: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}证书存放路径${gl_bai}" + echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1470,7 +1469,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申請SSL證書,過期前自動續簽${gl_bai}" +echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1486,8 +1485,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申請的證書到期情況${gl_bai}" - echo "站點信息 證書到期時間" + echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" + echo "站点信息 证书到期时间" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1526,19 +1525,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名證書申請成功" + 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. 申請次數超限 ➠ Let's Encrypt有每週限額(5次/域名/週)" - echo -e "6. 國內備案限制 ➠ 中國大陸環境請確認域名是否備案" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" + echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" break_end clear - echo "請再次嘗試部署$webname" + echo "请再次尝试部署 $webname" add_yuming install_ssltls certs_status @@ -1549,7 +1548,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重複使用" + send_stats "域名重复使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1558,8 +1557,8 @@ fi add_yuming() { ip_address - echo -e "先將域名解析到本機IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "請輸入你的IP或者解析過的域名:" yuming + echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "请输入你的IP或者解析过的域名: " yuming } @@ -1643,11 +1642,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登錄信息:" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" + echo "登录信息: " + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo - send_stats "啟動$ldnmp_pods" + send_stats "启动$ldnmp_pods" } @@ -1657,29 +1656,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 檢查配置文件是否存在 + # 检查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 從配置文件讀取 API_TOKEN 和 zone_id + # 从配置文件读取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 將 ZONE_IDS 轉換為數組 + # 将 ZONE_IDS 转换为数组 ZONE_IDS=($ZONE_IDS) else - # 提示用戶是否清理緩存 - read -e -p "需要清理 Cloudflare 的緩存嗎? (y/n):" answer + # 提示用户是否清理缓存 + 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 + 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 並執行清除緩存命令 + # 循环遍历每个 zone_id 并执行清除缓存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除緩存 for zone_id:$ZONE_ID" + echo "正在清除缓存 for 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" \ @@ -1687,13 +1686,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "緩存清除請求已發送完畢。" + echo "缓存清除请求已发送完毕。" } web_cache() { - send_stats "清理站點緩存" + send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1703,28 +1702,28 @@ web_cache() { web_del() { - send_stats "刪除站點數據" + send_stats "删除站点数据" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "刪除站點數據,請輸入你的域名(多個域名用空格隔開):" yuming_list + read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在刪除域名:$yuming" + 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" + # 删除数据库前检查是否存在,避免报错 + echo "正在删除数据库: $dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1740,23 +1739,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根據 mode 參數來決定開啟或關閉 WAF + # 根据 mode 参数来决定开启或关闭 WAF if [ "$mode" == "on" ]; then - # 開啟 WAF:去掉註釋 + # 开启 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:加上註釋 + # 关闭 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' 或 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # 檢查 nginx 鏡像並根據情況處理 + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1803,11 +1802,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 刪除舊定義 + # 删除旧定义 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定義,放在含 "Happy publishing" 的行前 + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1830,12 +1829,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 刪除舊定義 + # 删除旧定义 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定義,放在含 "Happy publishing" 的行前 + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1858,7 +1857,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 開啟 Brotli:去掉註釋 + # 开启 Brotli:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1872,7 +1871,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 關閉 Brotli:加上註釋 + # 关闭 Brotli:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1888,11 +1887,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "無效的參數:使用 'on' 或 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # 檢查 nginx 鏡像並根據情況處理 + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1914,7 +1913,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 開啟 Zstd:去掉註釋 + # 开启 Zstd:去掉注释 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1929,7 +1928,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 關閉 Zstd:加上註釋 + # 关闭 Zstd:加上注释 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1945,11 +1944,11 @@ nginx_zstd() { else - echo "無效的參數:使用 'on' 或 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi - # 檢查 nginx 鏡像並根據情況處理 + # 检查 nginx 镜像并根据情况处理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1976,7 +1975,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "無效的參數:使用 'on' 或 'off'" + echo "无效的参数:使用 'on' 或 'off'" return 1 fi @@ -1990,7 +1989,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防禦" + send_stats "LDNMP环境防御" while true; do check_waf_status check_cf_mode @@ -2004,25 +2003,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服務器網站防禦程序${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安裝防禦程序" + echo "1. 安装防御程序" echo "------------------------" - echo "5. 查看SSH攔截記錄 6. 查看網站攔截記錄" - echo "7. 查看防禦規則列表 8. 查看日誌實時監控" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. 配置攔截參數 12. 清除所有拉黑的IP" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. cloudflare模式 22. 高負載開啟5秒盾" + echo "21. cloudflare模式 22. 高负载开启5秒盾" echo "------------------------" - echo "31. 開啟WAF 32. 關閉WAF" - echo "33. 開啟DDOS防禦 34. 關閉DDOS防禦" + echo "31. 开启WAF 32. 关闭WAF" + echo "33. 开启DDOS防御 34. 关闭DDOS防御" echo "------------------------" - echo "9. 卸載防禦程序" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2082,7 +2081,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防禦程序已卸載" + echo "Fail2Ban防御程序已卸载" ;; 11) @@ -2098,10 +2097,10 @@ web_security() { 21) send_stats "cloudflare模式" - echo "到cf後台右上角我的個人資料,選擇左側API令牌,獲取Global API Key" + echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "輸入CF的賬號:" cfuser - read -e -p "輸入CF的Global API Key:" cftoken + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " 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 @@ -2116,21 +2115,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf後台,站點-安全性-事件中查看攔截記錄" + echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "高負載開啟5秒盾" - echo -e "${gl_huang}網站每5分鐘自動檢測,當達檢測到高負載會自動開盾,低負載也會自動關閉5秒盾。${gl_bai}" + send_stats "高负载开启5秒盾" + echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" echo "--------------" - echo "獲取CF參數:" - echo -e "到cf後台右上角我的個人資料,選擇左側API令牌,獲取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf後台域名概要頁面右下方獲取${gl_huang}區域ID${gl_bai}" + echo "获取CF参数: " + echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "輸入CF的賬號:" cfuser - read -e -p "輸入CF的Global API Key:" cftoken - read -e -p "輸入CF中域名的區域ID:" cfzonID + read -e -p "输入CF的账号: " cfuser + read -e -p "输入CF的Global API Key: " cftoken + read -e -p "输入CF中域名的区域ID: " cfzonID cd ~ install jq bc @@ -2147,23 +2146,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高負載自動開盾腳本已添加" + echo "高负载自动开盾脚本已添加" else - echo "自動開盾腳本已存在,無需添加" + echo "自动开盾脚本已存在,无需添加" fi ;; 31) nginx_waf on - echo "站點WAF已開啟" - send_stats "站點WAF已開啟" + echo "站点WAF已开启" + send_stats "站点WAF已开启" ;; 32) nginx_waf off - echo "站點WAF已關閉" - send_stats "站點WAF已關閉" + echo "站点WAF已关闭" + send_stats "站点WAF已关闭" ;; 33) @@ -2189,10 +2188,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 獲取當前的 worker_processes 設置值 +# 获取当前的 worker_processes 设置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根據值設置模式信息 +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2208,21 +2207,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 檢查 zstd 是否開啟且未被註釋(整行以 zstd on; 開頭) + # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 檢查 brotli 是否開啟且未被註釋 + # 检查 brotli 是否开启且未被注释 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 檢查 gzip 是否開啟且未被註釋 + # 检查 gzip 是否开启且未被注释 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2238,33 +2237,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "優化LDNMP環境" - echo -e "優化LDNMP環境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "优化LDNMP环境" + echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 標準模式 2. 高性能模式 (推薦2H4G以上)" + echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" echo "------------------------" - echo "3. 開啟gzip壓縮 4. 關閉gzip壓縮" - echo "5. 開啟br壓縮 6. 關閉br壓縮" - echo "7. 開啟zstd壓縮 8. 關閉zstd壓縮" + echo "3. 开启gzip压缩 4. 关闭gzip压缩" + echo "5. 开启br压缩 6. 关闭br压缩" + echo "7. 开启zstd压缩 8. 关闭zstd压缩" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "站點標準模式" + send_stats "站点标准模式" - # nginx調優 + # 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調優 + # 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調優 + # 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 @@ -2276,7 +2275,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql調優 + # 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 @@ -2288,23 +2287,23 @@ web_optimization() { optimize_balanced - echo "LDNMP環境已設置成 標準模式" + echo "LDNMP环境已设置成 标准模式" ;; 2) - send_stats "站點高性能模式" + send_stats "站点高性能模式" - # nginx調優 + # 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調優 + # 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調優 + # 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 @@ -2316,7 +2315,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql調優 + # 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 @@ -2326,7 +2325,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境已設置成 高性能模式" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -2386,9 +2385,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安裝${gl_bai}" +# check_docker="${gl_lv}已安装${gl_bai}" # else -# check_docker="${gl_hui}未安裝${gl_bai}" +# check_docker="${gl_hui}未安装${gl_bai}" # fi # } @@ -2396,7 +2395,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "訪問地址:" +echo "访问地址:" ip_address @@ -2434,31 +2433,31 @@ check_docker_image_update() { 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##*:} - # 默認標籤為 latest + # 默认标签为 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加對官方鏡像的支持 + # 添加对官方镜像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 從 Docker Hub API 獲取鏡像發佈時間 + # 从 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 @@ -2477,7 +2476,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 獲取容器的 IP 地址 + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2487,34 +2486,34 @@ block_container_port() { install iptables - # 檢查並封禁其他所有 IP + # 检查并封禁其他所有 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 + # 检查并放行指定 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 + # 检查并放行本地网络 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 + # 检查并封禁其他所有 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 + # 检查并放行指定 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 + # 检查并放行本地网络 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 @@ -2524,7 +2523,7 @@ block_container_port() { fi - echo "已阻止IP+端口訪問該服務" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2535,7 +2534,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 獲取容器的 IP 地址 + # 获取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2545,17 +2544,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的規則 + # 清除封禁其他所有 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 的規則 + # 清除放行指定 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 的規則 + # 清除放行本地网络 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 @@ -2564,17 +2563,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的規則 + # 清除封禁其他所有 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 的規則 + # 清除放行指定 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 的規則 + # 清除放行本地网络 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 @@ -2585,7 +2584,7 @@ clear_container_rules() { fi - echo "已允許IP+端口訪問該服務" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2599,25 +2598,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "錯誤:請提供端口號和允許訪問的 IP。" - echo "用法: block_host_port <端口號> <允許的IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: block_host_port <端口号> <允许的IP>" return 1 fi install iptables - # 拒絕其他所有 IP 訪問 + # 拒绝其他所有 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 訪問 + # 允许指定 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 @@ -2626,27 +2625,27 @@ block_host_port() { - # 拒絕其他所有 IP 訪問 + # 拒绝其他所有 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 訪問 + # 允许指定 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+端口訪問該服務" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -2658,47 +2657,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "錯誤:請提供端口號和允許訪問的 IP。" - echo "用法: clear_host_port_rules <端口號> <允許的IP>" + echo "错误:请提供端口号和允许访问的 IP。" + echo "用法: clear_host_port_rules <端口号> <允许的IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 訪問的規則 + # 清除封禁所有其他 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 訪問的規則 + # 清除允许指定 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 訪問的規則 + # 清除封禁所有其他 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 訪問的規則 + # 清除允许指定 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+端口訪問該服務" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2747,18 +2746,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安裝 2. 更新 3. 卸載" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 添加域名訪問 6. 刪除域名訪問" - echo "7. 允許IP+端口訪問 8. 阻止IP+端口訪問" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "輸入應用對外服務端口,回車默認使用${docker_port}端口:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,12 +2770,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name已經安裝完成" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安裝$docker_name" + send_stats "安装$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2786,7 +2785,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name已經安裝完成" + echo "$docker_name 已经安装完成" check_docker_app_ip echo "" $docker_use @@ -2800,30 +2799,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" - send_stats "解除安裝$docker_name" + echo "应用已卸载" + send_stats "卸载$docker_name" ;; 5) - echo "${docker_name}域名訪問設置" - send_stats "${docker_name}域名訪問設置" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不帶https://" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "允許IP訪問${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP訪問${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2860,18 +2859,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安裝 2. 更新 3. 卸載" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 添加域名訪問 6. 刪除域名訪問" - echo "7. 允許IP+端口訪問 8. 阻止IP+端口訪問" + echo "5. 添加域名访问 6. 删除域名访问" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space $app_size - read -e -p "輸入應用對外服務端口,回車默認使用${docker_port}端口:" app_port + read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,22 +2894,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名訪問設置" - send_stats "${docker_name}域名訪問設置" + echo "${docker_name}域名访问设置" + send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不帶https://" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "允許IP訪問${docker_name}" + send_stats "允许IP访问 ${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP訪問${docker_name}" + send_stats "阻止IP访问 ${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,17 +2994,17 @@ 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 会话 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3080,7 +3079,7 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重啟" + echo "已重启" reboot ;; *) @@ -3127,8 +3126,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "無法再次安裝LDNMP環境" - echo -e "${gl_huang}提示:${gl_bai}建站環境已安裝。無需再次安裝!" + send_stats "无法再次安装LDNMP环境" + echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" break_end linux_ldnmp fi @@ -3138,10 +3137,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安裝LDNMP環境" +send_stats "安装LDNMP环境" root_use clear -echo -e "${gl_huang}LDNMP環境未安裝,開始安裝LDNMP環境...${gl_bai}" +echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3155,10 +3154,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安裝nginx環境" +send_stats "安装nginx环境" root_use clear -echo -e "${gl_huang}nginx未安裝,開始安裝nginx環境...${gl_bai}" +echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3169,8 +3168,8 @@ 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 "nginx已安装完成" +echo -e "当前版本: ${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3181,7 +3180,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "請先安裝LDNMP環境" + send_stats "请先安装LDNMP环境" ldnmp_install_all fi @@ -3191,7 +3190,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "請先安裝nginx環境" + send_stats "请先安装nginx环境" nginx_install_all fi @@ -3202,16 +3201,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的$webname搭建好了!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webname安裝信息如下:" + echo "$webname 安装信息如下: " } nginx_web_on() { clear - echo "您的$webname搭建好了!" + echo "您的 $webname 搭建好了!" echo "https://$yuming" } @@ -3223,8 +3222,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3264,17 +3263,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "請輸入你的反代IP:" reverseproxy + read -e -p "请输入你的反代IP: " reverseproxy fi if [ -z "$port" ]; then - read -e -p "請輸入你的反代端口:" port + read -e -p "请输入你的反代端口: " port fi nginx_install_status install_ssltls @@ -3297,14 +3296,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "請輸入你的多個反代IP+端口用空格隔開(例如 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port + read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi nginx_install_status @@ -3357,12 +3356,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站點管理" - echo "LDNMP環境" + send_stats "LDNMP站点管理" + echo "LDNMP环境" echo "------------------------" ldnmp_v - echo -e "站點:${output}證書到期時間" + echo -e "站点: ${output} 证书到期时间" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3375,35 +3374,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "資料庫:${db_output}" + 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 "------------------------" - 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 -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. 清理站點緩存 4. 創建關聯站點" - echo "5. 查看訪問日誌 6. 查看錯誤日誌" - echo "7. 編輯全局配置 8. 編輯站點配置" - echo "9. 管理站點數據庫 10. 查看站點分析報告" + echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "3. 清理站点缓存 4. 创建关联站点" + echo "5. 查看访问日志 6. 查看错误日志" + echo "7. 编辑全局配置 8. 编辑站点配置" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" - echo "20. 刪除指定站點數據" + echo "20. 删除指定站点数据" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "申請域名證書" - read -e -p "請輸入你的域名:" yuming + 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 @@ -3412,15 +3411,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更換站點域名" - echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站數據再更換站點域名!" - read -e -p "請輸入舊域名:" oddyuming - read -e -p "請輸入新域名:" yuming + send_stats "更换站点域名" + echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + read -e -p "请输入旧域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status - # mysql替換 + # mysql替换 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3438,7 +3437,7 @@ ldnmp_web_status() { 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" {} + @@ -3459,10 +3458,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "創建關聯站點" - echo -e "為現有的站點再關聯一個新域名用於訪問" - read -e -p "請輸入現有的域名:" oddyuming - read -e -p "請輸入新域名:" yuming + send_stats "创建关联站点" + echo -e "为现有的站点再关联一个新域名用于访问" + read -e -p "请输入现有的域名: " oddyuming + read -e -p "请输入新域名: " yuming install_certbot install_ssltls certs_status @@ -3476,25 +3475,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看訪問日誌" + send_stats "查看访问日志" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看錯誤日誌" + send_stats "查看错误日志" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "編輯全局配置" + send_stats "编辑全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "編輯站點配置" - read -e -p "編輯站點配置,請輸入你要編輯的域名:" yuming + send_stats "编辑站点配置" + read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3504,7 +3503,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站點數據" + send_stats "查看站点数据" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3540,16 +3539,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款時下流行且強大的運維管理面板。" - echo "官網介紹:$panelurl " + echo "${panelname}是一款时下流行且强大的运维管理面板。" + echo "官网介绍: $panelurl " echo "" echo "------------------------" - echo "1. 安裝 2. 管理 3. 卸載" + echo "1. 安装 2. 管理 3. 卸载" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) check_disk_space 1 @@ -3558,7 +3557,7 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安裝" + send_stats "${panelname}安装" ;; 2) panel_app_manage @@ -3571,7 +3570,7 @@ while true; do panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}解除安裝" + send_stats "${panelname}卸载" ;; *) break @@ -3615,8 +3614,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安裝frp服務端" - # 生成隨機端口和憑證 + send_stats "安装frp服务端" + # 生成随机端口和凭证 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3637,17 +3636,17 @@ EOF donlond_frp frps - # 輸出生成的信息 + # 输出生成的信息 ip_address echo "------------------------" - echo "客戶端部署時需要用的參數" - echo "服務IP:$ipv4_address" + 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 "FRP面板用户名: $dashboard_user" + echo "FRP面板密码: $dashboard_pwd" echo open_port 8055 8056 @@ -3657,9 +3656,9 @@ EOF configure_frpc() { - send_stats "安裝frp客戶端" - read -e -p "請輸入外網對接IP:" server_addr - read -e -p "請輸入外網對接token:" token + send_stats "安装frp客户端" + read -e -p "请输入外网对接IP: " server_addr + read -e -p "请输入外网对接token: " token echo mkdir -p /home/frp @@ -3679,17 +3678,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp內網服務" - # 提示用戶輸入服務名稱和轉發信息 - read -e -p "請輸入服務名稱:" service_name - read -e -p "請輸入轉發類型 (tcp/udp) [回​​車默認tcp]:" service_type + send_stats "添加frp内网服务" + # 提示用户输入服务名称和转发信息 + read -e -p "请输入服务名称: " service_name + read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type local service_type=${service_type:-tcp} - read -e -p "請輸入內網IP [回車默認127.0.0.1]:" local_ip + read -e -p "请输入内网IP [回车默认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 + read -e -p "请输入内网端口: " local_port + read -e -p "请输入外网端口: " remote_port - # 將用戶輸入寫入配置文件 + # 将用户输入写入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3699,8 +3698,8 @@ remote_port = ${remote_port} EOF - # 輸出生成的信息 - echo "服務$service_name已成功添加到 frpc.toml" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3711,12 +3710,12 @@ EOF delete_forwarding_service() { - send_stats "刪除frp內網服務" - # 提示用戶輸入需要刪除的服務名稱 - read -e -p "請輸入需要刪除的服務名稱:" service_name - # 使用 sed 刪除該服務及其相關配置 + send_stats "删除frp内网服务" + # 提示用户输入需要删除的服务名称 + read -e -p "请输入需要删除的服务名称: " service_name + # 使用 sed 删除该服务及其相关配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服務$service_name已成功從 frpc.toml 刪除" + echo "服务 $service_name 已成功从 frpc.toml 删除" docker restart frpc @@ -3726,7 +3725,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表頭 + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3747,7 +3746,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服務信息,在處理新服務之前打印當前服務 + # 如果已有服务信息,在处理新服务之前打印当前服务 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3756,7 +3755,7 @@ list_forwarding_services() { type } - # 更新當前服務名稱 + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 @@ -3789,7 +3788,7 @@ list_forwarding_services() { } END { - # 打印最後一個服務的信息 + # 打印最后一个服务的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3802,17 +3801,17 @@ list_forwarding_services() { -# 獲取 FRP 服務端端口 +# 获取 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 的端口 + # 检查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3821,18 +3820,18 @@ generate_access_urls() { fi done - # 只在有有效端口時顯示標題和內容 + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then - echo "FRP服務對外訪問地址:" + echo "FRP服务对外访问地址:" - # 處理 IPv4 地址 + # 处理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 處理 IPv6 地址(如果存在) + # 处理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3841,7 +3840,7 @@ generate_access_urls() { done fi - # 處理 HTTPS 配置 + # 处理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3868,7 +3867,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服務端" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3876,25 +3875,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服務端$check_frp $update_status" - echo "構建FRP內網穿透服務環境,將無公網IP的設備暴露到互聯網" - echo "官網介紹: https://github.com/fatedier/frp/" - echo "視頻教學: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRP服务端 $check_frp $update_status" + echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" + 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 "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "5. 內網服務域名訪問 6. 刪除域名訪問" + echo "5. 内网服务域名访问 6. 删除域名访问" echo "------------------------" - echo "7. 允許IP+端口訪問 8. 阻止IP+端口訪問" + echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" echo "------------------------" - echo "00. 刷新服務狀態 0. 返回上一級選單" + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3902,7 +3901,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服務端已經安裝完成" + echo "FRP服务端已经安装完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3912,7 +3911,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服務端已經更新完成" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3923,37 +3922,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" + echo "应用已卸载" ;; 5) - echo "將內網穿透服務反代成域名訪問" - send_stats "FRP對外域名訪問" + echo "将内网穿透服务反代成域名访问" + send_stats "FRP对外域名访问" add_yuming - read -e -p "請輸入你的內網穿透服務端口:" frps_port + read -e -p "请输入你的内网穿透服务端口: " frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不帶https://" + echo "域名格式 example.com 不带https://" web_del ;; 7) - send_stats "允許IP訪問" - read -e -p "請輸入需要放行的端口:" frps_port + 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 + send_stats "阻止IP访问" + echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" + read -e -p "请输入需要阻止的端口: " frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服務狀態" - echo "已經刷新FRP服務狀態" + send_stats "刷新FRP服务状态" + echo "已经刷新FRP服务状态" ;; *) @@ -3966,7 +3965,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客戶端" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3974,10 +3973,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客戶端$check_frp $update_status" - echo "與服務端對接,對接後可創建內網穿透服務到互聯網訪問" - echo "官網介紹: https://github.com/fatedier/frp/" - echo "視頻教學: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRP客户端 $check_frp $update_status" + echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" + echo "官网介绍: https://github.com/fatedier/frp/" + echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3985,13 +3984,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安裝 2. 更新 3. 卸載" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "4. 添加對外服務 5. 刪除對外服務 6. 手動配置服務" + echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) install jq grep ss @@ -3999,7 +3998,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客戶端已經安裝完成" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4009,7 +4008,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客戶端已經更新完成" + echo "FRP客户端已经更新完成" ;; 3) @@ -4020,7 +4019,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" + echo "应用已卸载" ;; 4) @@ -4066,33 +4065,33 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下載工具" + 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 -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 "已下载视频列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" echo "-------------------------" - echo "1. 安裝 2. 更新 3. 卸載" + echo "1. 安装 2. 更新 3. 卸载" echo "-------------------------" - echo "5. 單個視頻下載 6. 批量視頻下載 7. 自定義參數下載" - echo "8. 下載為MP3音頻 9. 刪除視頻目錄 10. Cookie管理(開發中)" + echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" + echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" echo "-------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "-------------------------" - read -e -p "請輸入選項編號:" choice + read -e -p "请输入选项编号: " choice case $choice in 1) - send_stats "正在安裝 yt-dlp..." - echo "正在安裝 yt-dlp..." + send_stats "正在安装 yt-dlp..." + echo "正在安装 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安裝完成。按任意鍵繼續..." + echo "安装完成。按任意键继续..." read ;; 2) send_stats "正在更新 yt-dlp..." @@ -4100,34 +4099,34 @@ yt_menu_pro() { yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意鍵繼續..." + echo "更新完成。按任意键继续..." read ;; 3) - send_stats "正在卸載 yt-dlp..." - echo "正在卸載 yt-dlp..." + send_stats "正在卸载 yt-dlp..." + echo "正在卸载 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸載完成。按任意鍵繼續..." + echo "卸载完成。按任意键继续..." read ;; 5) - send_stats "單個視頻下載" - read -e -p "請輸入視頻鏈接:" url + 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 "下載完成,按任意鍵繼續..." ;; + read -e -p "下载完成,按任意键继续..." ;; 6) - send_stats "批量視頻下載" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "現在開始批量下載..." + echo "现在开始批量下载..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4135,31 +4134,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下載完成,按任意鍵繼續..." ;; + read -e -p "批量下载完成,按任意键继续..." ;; 7) - send_stats "自定義視頻下載" - read -e -p "請輸入完整 yt-dlp 參數(不含 yt-dlp):" custom + 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 "執行完成,按任意鍵繼續..." ;; + read -e -p "执行完成,按任意键继续..." ;; 8) - send_stats "MP3下載" - read -e -p "請輸入視頻鏈接:" url + 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 "音頻下載完成,按任意鍵繼續..." ;; + read -e -p "音频下载完成,按任意键继续..." ;; 9) - send_stats "刪除視頻" - read -e -p "請輸入刪除視頻名稱:" rmdir + send_stats "删除视频" + read -e -p "请输入删除视频名称: " rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4195,7 +4194,7 @@ set_timedate() { -# 修復dpkg中斷問題 +# 修复dpkg中断问题 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4204,7 +4203,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系統更新...${gl_bai}" + echo -e "${gl_huang}正在系统更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4231,7 +4230,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系統清理...${gl_bai}" + echo -e "${gl_huang}正在系统清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4260,13 +4259,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器緩存..." + echo "清理包管理器缓存..." apk cache clean - echo "刪除系統日誌..." + echo "删除系统日志..." rm -rf /var/log/* - echo "刪除APK緩存..." + echo "删除APK缓存..." rm -rf /var/cache/apk/* - echo "刪除臨時文件..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4284,19 +4283,19 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "刪除系統日誌..." + echo "删除系统日志..." rm -rf /var/log/* - echo "刪除臨時文件..." + echo "删除临时文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依賴..." + echo "清理未使用的依赖..." pkg autoremove -y - echo "清理包管理器緩存..." + echo "清理包管理器缓存..." pkg clean -y - echo "刪除系統日誌..." + echo "删除系统日志..." rm -rf /var/log/* - echo "刪除臨時文件..." + echo "删除临时文件..." rm -rf /tmp/* else @@ -4340,26 +4339,26 @@ fi set_dns_ui() { root_use -send_stats "優化DNS" +send_stats "优化DNS" while true; do clear - echo "優化DNS地址" + echo "优化DNS地址" echo "------------------------" - echo "當前DNS地址" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 國外DNS優化:" + 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 "2. 国内DNS优化: " echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手動編輯DNS配置" + echo "3. 手动编辑DNS配置" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4367,7 +4366,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "國外DNS優化" + send_stats "国外DNS优化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4375,12 +4374,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "國內DNS優化" + send_stats "国内DNS优化" ;; 3) install nano nano /etc/resolv.conf - send_stats "手動編輯DNS配置" + send_stats "手动编辑DNS配置" ;; *) break @@ -4403,13 +4402,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 設置為 yes + # 如果找到 PasswordAuthentication 设置为 yes 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 設置為 yes + # 如果找到 PubkeyAuthentication 设置为 yes 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/' \ @@ -4417,7 +4416,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都沒有匹配,則設置默認值 + # 如果 PasswordAuthentication 和 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" @@ -4428,7 +4427,7 @@ correct_ssh_config() { new_ssh_port() { - # 備份 SSH 配置文件 + # 备份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4441,7 +4440,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改為:$new_port" + echo "SSH 端口已修改为: $new_port" sleep 1 @@ -4459,7 +4458,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私鑰信息已生成,務必復制保存,可保存成${gl_huang}${ipv4_address}_ssh.key${gl_bai}文件,用於以後的SSH登錄" + echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4471,17 +4470,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私鑰登錄已開啟,已關閉ROOT密碼登錄,重連將會生效${gl_bai}" + echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } import_sshkey() { - read -e -p "請輸入您的SSH公鑰內容(通常以 'ssh-rsa' 或 'ssh-ed25519' 開頭):" public_key + read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}錯誤:未輸入公鑰內容。${gl_bai}" + echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" return 1 fi @@ -4499,7 +4498,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公鑰已成功導入,ROOT私鑰登錄已開啟,已關閉ROOT密碼登錄,重連將會生效${gl_bai}" + echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" } @@ -4508,26 +4507,26 @@ import_sshkey() { add_sshpasswd() { -echo "設置你的ROOT密碼" +echo "设置你的ROOT密码" 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}ROOT登錄設置完畢!${gl_bai}" +echo -e "${gl_lv}ROOT登录设置完毕!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示:${gl_bai}該功能需要root用戶才能運行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion } dd_xitong() { - send_stats "重裝系統" + 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 @@ -4538,41 +4537,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重裝後初始用戶名:${gl_huang}root${gl_bai}初始密碼:${gl_huang}LeitboGi0ro${gl_bai}初始端口:${gl_huang}22${gl_bai}" - echo -e "按任意鍵繼續..." + 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 "按任意鍵繼續..." + 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 "按任意鍵繼續..." + 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 "按任意鍵繼續..." + 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 "--------------------------------" - echo -e "${gl_hong}注意:${gl_bai}重裝有風險失聯,不放心者慎用。重裝預計花費15分鐘,請提前備份數據。" - echo -e "${gl_hui}感謝leitbogioro大佬和bin456789大佬的腳本支持!${gl_bai} " + echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" + echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4588,21 +4587,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飛牛公測版" + echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "請選擇要重裝的系統:" sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "重裝debian 13" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4610,49 +4609,49 @@ dd_xitong() { ;; 2) - send_stats "重裝debian 12" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重裝debian 11" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重裝debian 10" + send_stats "重装debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重裝ubuntu 24.04" + send_stats "重装ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重裝ubuntu 22.04" + send_stats "重装ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重裝ubuntu 20.04" + send_stats "重装ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重裝ubuntu 18.04" + send_stats "重装ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4661,7 +4660,7 @@ dd_xitong() { 21) - send_stats "重裝rockylinux10" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4669,7 +4668,7 @@ dd_xitong() { ;; 22) - send_stats "重裝rockylinux9" + send_stats "重装rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4677,7 +4676,7 @@ dd_xitong() { ;; 23) - send_stats "重裝alma10" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4685,7 +4684,7 @@ dd_xitong() { ;; 24) - send_stats "重裝alma9" + send_stats "重装alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4693,7 +4692,7 @@ dd_xitong() { ;; 25) - send_stats "重裝oracle10" + send_stats "重装oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4701,7 +4700,7 @@ dd_xitong() { ;; 26) - send_stats "重裝oracle9" + send_stats "重装oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4709,7 +4708,7 @@ dd_xitong() { ;; 27) - send_stats "重裝fedora42" + send_stats "重装fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4717,7 +4716,7 @@ dd_xitong() { ;; 28) - send_stats "重裝fedora41" + send_stats "重装fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4725,7 +4724,7 @@ dd_xitong() { ;; 29) - send_stats "重裝centos10" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4733,7 +4732,7 @@ dd_xitong() { ;; 30) - send_stats "重裝centos9" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4741,7 +4740,7 @@ dd_xitong() { ;; 31) - send_stats "重裝alpine" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4749,7 +4748,7 @@ dd_xitong() { ;; 32) - send_stats "重裝arch" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4757,7 +4756,7 @@ dd_xitong() { ;; 33) - send_stats "重裝kali" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4765,7 +4764,7 @@ dd_xitong() { ;; 34) - send_stats "重裝openeuler" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4773,7 +4772,7 @@ dd_xitong() { ;; 35) - send_stats "重裝opensuse" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4781,7 +4780,7 @@ dd_xitong() { ;; 36) - send_stats "重裝飛牛" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4790,7 +4789,7 @@ dd_xitong() { 41) - send_stats "重裝windows11" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4798,13 +4797,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重裝windows10" + send_stats "重装windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重裝windows7" + send_stats "重装windows7" 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 @@ -4812,21 +4811,21 @@ dd_xitong() { ;; 44) - send_stats "重裝windows server 22" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重裝windows server 19" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重裝windows server 16" + send_stats "重装windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4834,7 +4833,7 @@ dd_xitong() { ;; 47) - send_stats "重裝windows11 ARM" + send_stats "重装windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4864,17 +4863,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安裝xanmod的BBRv3內核" - echo "當前內核版本:$kernel_version" + echo "您已安装xanmod的BBRv3内核" + echo "当前内核版本: $kernel_version" echo "" - echo "內核管理" + echo "内核管理" echo "------------------------" - echo "1. 更新BBRv3內核 2. 卸載BBRv3內核" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) @@ -4884,7 +4883,7 @@ bbrv3() { # 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:添加存儲庫 + # 步骤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+') @@ -4893,7 +4892,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod內核已更新。重啟後生效" + echo "XanMod内核已更新。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4903,7 +4902,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod內核已卸載。重啟後生效" + echo "XanMod内核已卸载。重启后生效" server_reboot ;; @@ -4916,13 +4915,13 @@ bbrv3() { else clear - echo "設置BBR3加速" - echo "視頻介紹: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "设置BBR3加速" + echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "僅支持Debian/Ubuntu" - echo "請備份數據,將為你升級Linux內核開啟BBR3" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "確定繼續嗎? (Y/N):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -4930,12 +4929,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "當前環境不支持,僅支持Debian和Ubuntu系統" + echo "当前环境不支持,仅支持Debian和Ubuntu系统" break_end linux_Settings fi else - echo "無法確定操作系統類型" + echo "无法确定操作系统类型" break_end linux_Settings fi @@ -4946,7 +4945,7 @@ bbrv3() { # 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:添加存儲庫 + # 步骤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+') @@ -4957,7 +4956,7 @@ bbrv3() { bbr_on - echo "XanMod內核安裝並BBR3啟用成功。重啟後生效" + echo "XanMod内核安装并BBR3启用成功。重启后生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4967,7 +4966,7 @@ bbrv3() { echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -4976,40 +4975,40 @@ bbrv3() { elrepo_install() { - # 導入 ELRepo GPG 公鑰 - echo "導入 ELRepo GPG 公鑰..." + # 导入 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" + echo "不支持的操作系统:$os_name" break_end linux_Settings fi - # 打印檢測到的操作系統信息 - echo "檢測到的操作系統:$os_name $os_version" - # 根據系統版本安裝對應的 ELRepo 倉庫配置 + # 打印检测到的操作系统信息 + echo "检测到的操作系统: $os_name $os_version" + # 根据系统版本安装对应的 ELRepo 仓库配置 if [[ "$os_version" == 8 ]]; then - echo "安裝 ELRepo 倉庫配置 (版本 8)..." + 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)..." + echo "安装 ELRepo 仓库配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安裝 ELRepo 倉庫配置 (版本 10)..." + echo "安装 ELRepo 仓库配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系統版本:$os_version" + echo "不支持的系统版本:$os_version" break_end linux_Settings fi - # 啟用 ELRepo 內核倉庫並安裝最新的主線內核 - echo "啟用 ELRepo 內核倉庫並安裝最新的主線內核..." + # 启用 ELRepo 内核仓库并安装最新的主线内核 + echo "启用 ELRepo 内核仓库并安装最新的主线内核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安裝 ELRepo 倉庫配置並更新到最新主線內核。" + echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" server_reboot } @@ -5017,37 +5016,37 @@ elrepo_install() { elrepo() { root_use - send_stats "紅帽內核管理" + send_stats "红帽内核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安裝elrepo內核" - echo "當前內核版本:$kernel_version" + echo "您已安装elrepo内核" + echo "当前内核版本: $kernel_version" echo "" - echo "內核管理" + echo "内核管理" echo "------------------------" - echo "1. 更新elrepo內核 2. 卸載elrepo內核" + echo "1. 更新elrepo内核 2. 卸载elrepo内核" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + 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 "更新紅帽內核" + send_stats "更新红帽内核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo內核已卸載。重啟後生效" - send_stats "卸載紅帽內核" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5060,26 +5059,26 @@ elrepo() { else clear - echo "請備份數據,將為你升級Linux內核" - echo "視頻介紹: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "请备份数据,将为你升级Linux内核" + echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "僅支持紅帽系列發行版 CentOS/RedHat/Alma/Rocky/oracle" - echo "升級Linux內核可提升系統性能和安全,建議有條件的嘗試,生產環境謹慎升級!" + echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " + echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" echo "------------------------------------------------" - read -e -p "確定繼續嗎? (Y/N):" choice + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升級紅帽內核" + send_stats "升级红帽内核" server_reboot ;; [Nn]) echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac fi @@ -5090,7 +5089,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒庫...${gl_bai}" + echo -e "${gl_huang}正在更新病毒库...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5100,19 +5099,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "請指定要掃描的目錄。" + echo "请指定要扫描的目录。" return fi - echo -e "${gl_huang}正在掃描目錄$@...${gl_bai}" + echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" - # 構建 mount 參數 + # 构建 mount 参数 local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # 構建 clamscan 命令參數 + # 构建 clamscan 命令参数 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5121,7 +5120,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 執行 Docker 命令 + # 执行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5130,8 +5129,8 @@ clamav_scan() { 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}" + 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}" } @@ -5143,23 +5142,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒掃描管理" + send_stats "病毒扫描管理" while true; do clear - echo "clamav病毒掃描工具" - echo "視頻介紹: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "clamav病毒扫描工具" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "是一個開源的防病毒軟件工具,主要用於檢測和刪除各種類型的惡意軟件。" - echo "包括病毒、特洛伊木馬、間諜軟件、惡意腳本和其他有害軟件。" + echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" + echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" echo "------------------------" - echo -e "${gl_lv}1. 全盤掃描${gl_bai} ${gl_huang}2. 重要目錄掃描${gl_bai} ${gl_kjlan}3. 自定義目錄掃描${gl_bai}" + echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "全盤掃描" + send_stats "全盘扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,7 +5167,7 @@ clamav() { ;; 2) - send_stats "重要目錄掃描" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5176,8 +5175,8 @@ clamav() { break_end ;; 3) - send_stats "自定義目錄掃描" - read -e -p "請輸入要掃描的目錄,用空格分隔(例如:/etc /var /usr /home /root):" directories + send_stats "自定义目录扫描" + read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories install_docker clamav_freshclam clamav_scan $directories @@ -5194,21 +5193,21 @@ clamav() { -# 高性能模式優化函數 +# 高性能模式优化函数 optimize_high_performance() { - echo -e "${gl_lv}切換到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}優化文件描述符...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}優化虛擬內存...${gl_bai}" + 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}" + 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 @@ -5220,14 +5219,14 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}優化CPU設置...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他優化...${gl_bai}" - # 禁用透明大頁面,減少延遲 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5235,21 +5234,21 @@ optimize_high_performance() { } -# 均衡模式優化函數 +# 均衡模式优化函数 optimize_balanced() { - echo -e "${gl_lv}切換到均衡模式...${gl_bai}" + echo -e "${gl_lv}切换到均衡模式...${gl_bai}" - echo -e "${gl_lv}優化文件描述符...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}優化虛擬內存...${gl_bai}" + 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}" + 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 @@ -5261,36 +5260,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}優化CPU設置...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他優化...${gl_bai}" - # 還原透明大頁面 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 還原 NUMA balancing + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 還原默認設置函數 +# 还原默认设置函数 restore_defaults() { - echo -e "${gl_lv}還原到默認設置...${gl_bai}" + echo -e "${gl_lv}还原到默认设置...${gl_bai}" - echo -e "${gl_lv}還原文件描述符...${gl_bai}" + echo -e "${gl_lv}还原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}還原虛擬內存...${gl_bai}" + 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}" + 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 @@ -5302,37 +5301,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}还原缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}還原CPU設置...${gl_bai}" + echo -e "${gl_lv}还原CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}還原其他優化...${gl_bai}" - # 還原透明大頁面 + echo -e "${gl_lv}还原其他优化...${gl_bai}" + # 还原透明大页面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 還原 NUMA balancing + # 还原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 網站搭建優化函數 +# 网站搭建优化函数 optimize_web_server() { - echo -e "${gl_lv}切換到網站搭建優化模式...${gl_bai}" + echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" - echo -e "${gl_lv}優化文件描述符...${gl_bai}" + echo -e "${gl_lv}优化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}優化虛擬內存...${gl_bai}" + 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}" + 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 @@ -5344,14 +5343,14 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}优化缓存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}優化CPU設置...${gl_bai}" + echo -e "${gl_lv}优化CPU设置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他優化...${gl_bai}" - # 禁用透明大頁面,減少延遲 + echo -e "${gl_lv}其他优化...${gl_bai}" + # 禁用透明大页面,减少延迟 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5364,62 +5363,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux內核調優管理" - echo "Linux系統內核參數優化" - echo "視頻介紹: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linux内核调优管理" + echo "Linux系统内核参数优化" + echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "提供多種系統參數調優模式,用戶可以根據自身使用場景進行選擇切換。" - echo -e "${gl_huang}提示:${gl_bai}生產環境請謹慎使用!" + echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" + echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" echo "--------------------" - echo "1. 高性能優化模式: 最大化系統性能,優化文件描述符、虛擬內存、網絡設置、緩存管理和CPU設置。" - echo "2. 均衡優化模式: 在性能與資源消耗之間取得平衡,適合日常使用。" - echo "3. 網站優化模式: 針對網站服務器進行優化,提高並發連接處理能力、響應速度和整體性能。" - echo "4. 直播優化模式: 針對直播推流的特殊需求進行優化,減少延遲,提高傳輸性能。" - echo "5. 遊戲服優化模式: 針對遊戲服務器進行優化,提高並發處理能力和響應速度。" - echo "6. 還原默認設置: 將系統設置還原為默認配置。" + echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式優化" + send_stats "高性能模式优化" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式優化" + send_stats "均衡模式优化" ;; 3) cd ~ clear optimize_web_server - send_stats "網站優化模式" + send_stats "网站优化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流優化" + send_stats "直播推流优化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "遊戲服優化" + send_stats "游戏服优化" ;; 6) cd ~ clear restore_defaults - send_stats "還原默認設置" + send_stats "还原默认设置" ;; *) break @@ -5446,7 +5445,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系統語言已經修改為:$lang重新連接SSH生效。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end @@ -5455,17 +5454,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系統語言已經修改為:$lang重新連接SSH生效。${gl_bai}" + echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "不支持的系統:$ID" + echo "不支持的系统: $ID" break_end ;; esac else - echo "不支持的系統,無法識別系統類型。" + echo "不支持的系统,无法识别系统类型。" break_end fi } @@ -5475,29 +5474,29 @@ update_locale() { linux_language() { root_use -send_stats "切換系統語言" +send_stats "切换系统语言" while true; do clear - echo "當前系統語言:$LANG" + echo "当前系统语言: $LANG" echo "------------------------" - echo "1. 英文 2. 簡體中文 3. 繁體中文" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切換到英文" + send_stats "切换到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切換到簡體中文" + send_stats "切换到简体中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切換到繁體中文" + send_stats "切换到繁体中文" ;; *) break @@ -5519,7 +5518,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}變更完成。重新連接SSH後可查看變化!${gl_bai}" +echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" hash -r break_end @@ -5543,9 +5542,9 @@ shell_bianse() { 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5590,7 +5589,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系統回收站" + send_stats "系统回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5605,17 +5604,17 @@ linux_trash() { fi clear - echo -e "當前回收站${trash_status}" - echo -e "啟用後rm刪除的文件先進入回收站,防止誤刪重要文件!" + echo -e "当前回收站 ${trash_status}" + echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站為空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" echo "------------------------" - echo "1. 啟用回收站 2. 關閉回收站" - echo "3. 還原內容 4. 清空回收站" + echo "1. 启用回收站 2. 关闭回收站" + echo "3. 还原内容 4. 清空回收站" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -5623,7 +5622,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已啟用,刪除的文件將移至回收站。" + echo "回收站已启用,删除的文件将移至回收站。" sleep 2 ;; 2) @@ -5631,20 +5630,20 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已關閉,文件將直接刪除。" + echo "回收站已关闭,文件将直接删除。" sleep 2 ;; 3) - read -e -p "輸入要還原的文件名:" file_to_restore + 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已還原到主目錄。" + echo "$file_to_restore 已还原到主目录。" else echo "文件不存在。" fi ;; 4) - read -e -p "確認清空回收站? [y/n]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty echo "回收站已清空。" @@ -5658,23 +5657,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夾" +send_stats "命令收藏夹" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 創建備份 +# 创建备份 create_backup() { - send_stats "創建備份" + send_stats "创建备份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用戶輸入備份目錄 - echo "創建備份示例:" - echo "- 備份單個目錄: /var/www" - echo "- 備份多個目錄: /etc /home /var/log" - echo "- 直接回車將使用默認目錄 (/etc /usr /home)" - read -r -p "請輸入要備份的目錄(多個目錄用空格分隔,直接回車則使用默認目錄):" input + # 提示用户输入备份目录 + echo "创建备份示例:" + echo " - 备份单个目录: /var/www" + echo " - 备份多个目录: /etc /home /var/log" + echo " - 直接回车将使用默认目录 (/etc /usr /home)" + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input - # 如果用戶沒有輸入目錄,則使用默認目錄 + # 如果用户没有输入目录,则使用默认目录 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5682,119 +5681,119 @@ create_backup() { "/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 "您選擇的備份目錄為:" + # 打印用户选择的目录 + echo "您选择的备份目录为:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 創建備份 - echo "正在創建備份$BACKUP_NAME..." + # 创建备份 + echo "正在创建备份 $BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 檢查命令是否成功 + # 检查命令是否成功 if [ $? -eq 0 ]; then - echo "備份創建成功:$BACKUP_DIR/$BACKUP_NAME" + echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" else - echo "備份創建失敗!" + echo "备份创建失败!" exit 1 fi } -# 恢復備份 +# 恢复备份 restore_backup() { - send_stats "恢復備份" - # 選擇要恢復的備份 - read -e -p "請輸入要恢復的備份文件名:" BACKUP_NAME + send_stats "恢复备份" + # 选择要恢复的备份 + read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME - # 檢查備份文件是否存在 + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "備份文件不存在!" + echo "备份文件不存在!" exit 1 fi - echo "正在恢復備份$BACKUP_NAME..." + echo "正在恢复备份 $BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "備份恢復成功!" + echo "备份恢复成功!" else - echo "備份恢復失敗!" + echo "备份恢复失败!" exit 1 fi } -# 列出備份 +# 列出备份 list_backups() { - echo "可用的備份:" + echo "可用的备份:" ls -1 "$BACKUP_DIR" } -# 刪除備份 +# 删除备份 delete_backup() { - send_stats "刪除備份" + send_stats "删除备份" - read -e -p "請輸入要刪除的備份文件名:" BACKUP_NAME + read -e -p "请输入要删除的备份文件名: " BACKUP_NAME - # 檢查備份文件是否存在 + # 检查备份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "備份文件不存在!" + echo "备份文件不存在!" exit 1 fi - # 刪除備份 + # 删除备份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "備份刪除成功!" + echo "备份删除成功!" else - echo "備份刪除失敗!" + echo "备份删除失败!" exit 1 fi } -# 備份主菜單 +# 备份主菜单 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系統備份功能" - echo "系統備份功能" + send_stats "系统备份功能" + echo "系统备份功能" echo "------------------------" list_backups echo "------------------------" - echo "1. 創建備份 2. 恢復備份 3. 刪除備份" + echo "1. 创建备份 2. 恢复备份 3. 删除备份" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回車鍵繼續..." + read -e -p "按回车键继续..." done } @@ -5806,56 +5805,56 @@ linux_backup() { -# 顯示連接列表 +# 显示连接列表 list_connections() { - echo "已保存的連接:" + 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 "- 用戶名: root" - echo "- 端口: 22" + send_stats "添加新连接" + echo "创建新连接示例:" + echo " - 连接名称: my_server" + echo " - IP地址: 192.168.1.100" + echo " - 用户名: root" + echo " - 端口: 22" echo "------------------------" - read -e -p "請輸入連接名稱:" name - read -e -p "請輸入IP地址:" ip - read -e -p "請輸入用戶名 (默認: root):" user + read -e -p "请输入连接名称: " name + read -e -p "请输入IP地址: " ip + read -e -p "请输入用户名 (默认: root): " user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "請輸入端口號 (默認: 22):" port + read -e -p "请输入端口号 (默认: 22): " port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "請選擇身份驗證方式:" - echo "1. 密碼" - echo "2. 密鑰" - read -e -p "請輸入選擇 (1/2):" auth_choice + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请输入选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "請輸入密碼:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 ;; 2) - echo "請粘貼密鑰內容 (粘貼完成後按兩次回車):" + 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" @@ -5864,89 +5863,89 @@ add_connection() { fi ;; *) - echo "無效的選擇!" + echo "无效的选择!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "連接已保存!" + echo "连接已保存!" } -# 刪除連接 +# 删除连接 delete_connection() { - send_stats "刪除連接" - read -e -p "請輸入要刪除的連接編號:" num + send_stats "删除连接" + read -e -p "请输入要删除的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "錯誤:未找到對應的連接。" + 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 "連接已刪除!" + echo "连接已删除!" } -# 使用連接 +# 使用连接 use_connection() { - send_stats "使用連接" - read -e -p "請輸入要使用的連接編號:" num + send_stats "使用连接" + read -e -p "请输入要使用的连接编号: " num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "錯誤:未找到對應的連接。" + echo "错误:未找到对应的连接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在連接到$name ($ip)..." + 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. 目標服務器是否允許使用密鑰登錄。" + 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 "错误:未安装 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 服務是否正常運行。" + echo "连接失败!请检查以下内容:" + echo "1. 用户名和密码是否正确。" + echo "2. 目标服务器是否允许密码登录。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } ssh_manager() { - send_stats "ssh遠程連接工具" + send_stats "ssh远程连接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 檢查配置文件和密鑰目錄是否存在,如果不存在則創建 + # 检查配置文件和密钥目录是否存在,如果不存在则创建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,21 +5957,21 @@ ssh_manager() { while true; do clear - echo "SSH 遠程連接工具" - echo "可以通過SSH連接到其他Linux系統上" + echo "SSH 远程连接工具" + echo "可以通过SSH连接到其他Linux系统上" echo "------------------------" list_connections - echo "1. 創建新連接 2. 使用連接 3. 刪除連接" + echo "1. 创建新连接 2. 使用连接 3. 删除连接" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "無效的選擇,請重試。" ;; + *) echo "无效的选择,请重试。" ;; esac done } @@ -5988,156 +5987,156 @@ ssh_manager() { -# 列出可用的硬盤分區 +# 列出可用的硬盘分区 list_partitions() { - echo "可用的硬盤分區:" + echo "可用的硬盘分区:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 掛載分區 +# 挂载分区 mount_partition() { - send_stats "掛載分區" - read -e -p "請輸入要掛載的分區名稱(例如 sda1):" PARTITION + send_stats "挂载分区" + read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION - # 檢查分區是否存在 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分區不存在!" + echo "分区不存在!" return fi - # 檢查分區是否已經掛載 + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分區已經掛載!" + echo "分区已经挂载!" return fi - # 創建掛載點 + # 创建挂载点 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 掛載分區 + # 挂载分区 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分區掛載成功:$MOUNT_POINT" + echo "分区挂载成功: $MOUNT_POINT" else - echo "分區掛載失敗!" + echo "分区挂载失败!" rmdir "$MOUNT_POINT" fi } -# 卸載分區 +# 卸载分区 unmount_partition() { - send_stats "卸載分區" - read -e -p "請輸入要卸載的分區名稱(例如 sda1):" PARTITION + send_stats "卸载分区" + read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION - # 檢查分區是否已經掛載 + # 检查分区是否已经挂载 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分區未掛載!" + echo "分区未挂载!" return fi - # 卸載分區 + # 卸载分区 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分區卸載成功:$MOUNT_POINT" + echo "分区卸载成功: $MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分區卸載失敗!" + echo "分区卸载失败!" fi } -# 列出已掛載的分區 +# 列出已挂载的分区 list_mounted_partitions() { - echo "已掛載的分區:" + echo "已挂载的分区:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分區 +# 格式化分区 format_partition() { - send_stats "格式化分區" - read -e -p "請輸入要格式化的分區名稱(例如 sda1):" PARTITION + send_stats "格式化分区" + read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION - # 檢查分區是否存在 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分區不存在!" + echo "分区不存在!" return fi - # 檢查分區是否已經掛載 + # 检查分区是否已经挂载 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分區已經掛載,請先卸載!" + echo "分区已经挂载,请先卸载!" return fi - # 選擇文件系統類型 - echo "請選擇文件系統類型:" + # 选择文件系统类型 + echo "请选择文件系统类型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "請輸入你的選擇:" FS_CHOICE + 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 ;; + *) echo "无效的选择!"; return ;; esac - # 確認格式化 - read -e -p "確認格式化分區 /dev/$PARTITION為$FS_TYPE嗎? (y/n):" CONFIRM + # 确认格式化 + read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM if [ "$CONFIRM" != "y" ]; then echo "操作已取消。" return fi - # 格式化分區 - echo "正在格式化分區 /dev/$PARTITION為$FS_TYPE ..." + # 格式化分区 + echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分區格式化成功!" + echo "分区格式化成功!" else - echo "分區格式化失敗!" + echo "分区格式化失败!" fi } -# 檢查分區狀態 +# 检查分区状态 check_partition() { - send_stats "檢查分區狀態" - read -e -p "請輸入要檢查的分區名稱(例如 sda1):" PARTITION + send_stats "检查分区状态" + read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION - # 檢查分區是否存在 + # 检查分区是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分區不存在!" + echo "分区不存在!" return fi - # 檢查分區狀態 - echo "檢查分區 /dev/$PARTITION的狀態:" + # 检查分区状态 + echo "检查分区 /dev/$PARTITION 的状态:" fsck "/dev/$PARTITION" } -# 主菜單 +# 主菜单 disk_manager() { - send_stats "硬盤管理功能" + send_stats "硬盘管理功能" while true; do clear - echo "硬盤分區管理" - echo -e "${gl_huang}該功能內部測試階段,請勿在生產環境使用。${gl_bai}" + echo "硬盘分区管理" + echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 掛載分區 2. 卸載分區 3. 查看已掛載分區" - echo "4. 格式化分區 5. 檢查分區狀態" + echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" + echo "4. 格式化分区 5. 检查分区状态" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6146,64 +6145,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回車鍵繼續..." + read -e -p "按回车键继续..." done } -# 顯示任務列表 +# 显示任务列表 list_tasks() { - echo "已保存的同步任務:" + 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 "- 遠程目錄: /backup/www" - echo "- 端口號 (默認 22)" + send_stats "添加新同步任务" + echo "创建新同步任务示例:" + echo " - 任务名称: backup_www" + echo " - 本地目录: /var/www" + echo " - 远程地址: user@192.168.1.100" + echo " - 远程目录: /backup/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 + 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 + echo "请选择身份验证方式:" + echo "1. 密码" + echo "2. 密钥" + read -e -p "请选择 (1/2): " auth_choice case $auth_choice in 1) - read -s -p "請輸入密碼:" password_or_key + read -s -p "请输入密码: " password_or_key echo # 换行 auth_method="password" ;; 2) - echo "請粘貼密鑰內容 (粘貼完成後按兩次回車):" + 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" @@ -6211,63 +6210,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "無效的密鑰內容!" + echo "无效的密钥内容!" return fi ;; *) - echo "無效的選擇!" + echo "无效的选择!" return ;; esac - echo "請選擇同步模式:" - echo "1. 標準模式 (-avz)" - echo "2. 刪除目標文件 (-avz --delete)" - read -e -p "請選擇 (1/2):" mode + 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" ;; + *) 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 "任務已保存!" + echo "任务已保存!" } -# 刪除任務 +# 删除任务 delete_task() { - send_stats "刪除同步任務" - read -e -p "請輸入要刪除的任務編號:" num + send_stats "删除同步任务" + read -e -p "请输入要删除的任务编号: " num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "錯誤:未找到對應的任務。" + 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 "任務已刪除!" + echo "任务已删除!" } run_task() { - send_stats "執行同步任務" + send_stats "执行同步任务" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析參數 + # 解析参数 local direction="push" # 默认是推送到远端 local num @@ -6278,51 +6277,51 @@ run_task() { num="$1" fi - # 如果沒有傳入任務編號,提示用戶輸入 + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then - read -e -p "請輸入要執行的任務編號:" num + read -e -p "请输入要执行的任务编号: " num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "錯誤: 未找到該任務!" + 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" + echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到遠端:$local_path -> $remote:$remote_path" + echo "正在推送同步到远端: $local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 連接通用參數 + # 添加 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 "错误:未安装 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" + echo "错误:密钥文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密鑰文件權限不正確,正在修復..." + echo "警告:密钥文件权限不正确,正在修复..." chmod 600 "$password_or_key" fi @@ -6332,30 +6331,30 @@ run_task() { if [[ $? -eq 0 ]]; then echo "同步完成!" else - echo "同步失敗! 請檢查以下內容:" - echo "1. 網絡連接是否正常" - echo "2. 遠程主機是否可訪問" - echo "3. 認證信息是否正確" - echo "4. 本地和遠程目錄是否有正確的訪問權限" + echo "同步失败! 请检查以下内容:" + echo "1. 网络连接是否正常" + echo "2. 远程主机是否可访问" + echo "3. 认证信息是否正确" + echo "4. 本地和远程目录是否有正确的访问权限" fi } -# 創建定時任務 +# 创建定时任务 schedule_task() { - send_stats "添加同步定時任務" + send_stats "添加同步定时任务" - read -e -p "請輸入要定時同步的任務編號:" num + read -e -p "请输入要定时同步的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "錯誤: 請輸入有效的任務編號!" + echo "错误: 请输入有效的任务编号!" return fi - echo "請選擇定時執行間隔:" - echo "1) 每小時執行一次" - echo "2) 每天執行一次" - echo "3) 每週執行一次" - read -e -p "請輸入選項 (1/2/3):" interval + 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="" @@ -6363,66 +6362,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "錯誤: 請輸入有效的選項!" ; return ;; + *) 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 "錯誤: 該任務的定時同步已存在!" + echo "错误: 该任务的定时同步已存在!" return fi - # 創建到用戶的 crontab + # 创建到用户的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定時任務已創建:$cron_job" + echo "定时任务已创建: $cron_job" } -# 查看定時任務 +# 查看定时任务 view_tasks() { - echo "當前的定時任務:" + echo "当前的定时任务:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 刪除定時任務 +# 删除定时任务 delete_task_schedule() { - send_stats "刪除同步定時任務" - read -e -p "請輸入要刪除的任務編號:" num + send_stats "删除同步定时任务" + read -e -p "请输入要删除的任务编号: " num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "錯誤: 請輸入有效的任務編號!" + echo "错误: 请输入有效的任务编号!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已刪除任務編號$num的定時任務" + echo "已删除任务编号 $num 的定时任务" } -# 任務管理主菜單 +# 任务管理主菜单 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 遠程同步工具" - echo "遠程目錄之間同步,支持增量同步,高效穩定。" + echo "Rsync 远程同步工具" + echo "远程目录之间同步,支持增量同步,高效稳定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 創建新任務 2. 刪除任務" - echo "3. 執行本地同步到遠端 4. 執行遠端同步到本地" - echo "5. 創建定時任務 6. 刪除定時任務" + echo "1. 创建新任务 2. 删除任务" + echo "3. 执行本地同步到远端 4. 执行远端同步到本地" + echo "5. 创建定时任务 6. 删除定时任务" echo "---------------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "---------------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6431,9 +6430,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "無效的選擇,請重試。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "按回車鍵繼續..." + read -e -p "按回车键继续..." done } @@ -6448,7 +6447,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系統信息查詢" + send_stats "系统信息查询" ip_address @@ -6498,41 +6497,41 @@ linux_ps() { echo "" - echo -e "系統信息查詢" + 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}Linux版本:${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}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}總接收:${gl_bai}$rx" - echo -e "${gl_kjlan}總發送:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}網絡算法:${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}運營商:${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址:${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址:${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo @@ -6545,111 +6544,111 @@ linux_tools() { while true; do clear - # send_stats "基礎工具" - echo -e "基礎工具" + # send_stats "基础工具" + echo -e "基础工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下載工具${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下載工具${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超級管理權限工具${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}unzip ZIP壓縮解壓工具${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}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}ranger 文件管理工具" - 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}nano 文本編輯器${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系統" + echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本编辑器 ${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}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}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}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" curl --help - send_stats "安裝curl" + send_stats "安装curl" ;; 2) clear install wget clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" wget --help - send_stats "安裝wget" + send_stats "安装wget" ;; 3) clear install sudo clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" sudo --help - send_stats "安裝sudo" + send_stats "安装sudo" ;; 4) clear install socat clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" socat -h - send_stats "安裝socat" + send_stats "安装socat" ;; 5) clear install htop clear htop - send_stats "安裝htop" + send_stats "安装htop" ;; 6) clear install iftop clear iftop - send_stats "安裝iftop" + send_stats "安装iftop" ;; 7) clear install unzip clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" unzip - send_stats "安裝unzip" + send_stats "安装unzip" ;; 8) clear install tar clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" tar --help - send_stats "安裝tar" + send_stats "安装tar" ;; 9) clear install tmux clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" tmux --help - send_stats "安裝tmux" + send_stats "安装tmux" ;; 10) clear install ffmpeg clear - echo "工具已安裝,使用方法如下:" + echo "工具已安装,使用方法如下:" ffmpeg --help - send_stats "安裝ffmpeg" + send_stats "安装ffmpeg" ;; 11) @@ -6657,7 +6656,7 @@ linux_tools() { install btop clear btop - send_stats "安裝btop" + send_stats "安装btop" ;; 12) clear @@ -6666,7 +6665,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安裝ranger" + send_stats "安装ranger" ;; 13) clear @@ -6675,7 +6674,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安裝ncdu" + send_stats "安装ncdu" ;; 14) clear @@ -6684,7 +6683,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安裝fzf" + send_stats "安装fzf" ;; 15) clear @@ -6693,7 +6692,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安裝vim" + send_stats "安装vim" ;; 16) clear @@ -6702,7 +6701,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安裝nano" + send_stats "安装nano" ;; @@ -6713,7 +6712,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安裝git" + send_stats "安装git" ;; 21) @@ -6721,67 +6720,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安裝cmatrix" + send_stats "安装cmatrix" ;; 22) clear install sl clear sl - send_stats "安裝sl" + send_stats "安装sl" ;; 26) clear install bastet clear bastet - send_stats "安裝bastet" + send_stats "安装bastet" ;; 27) clear install nsnake clear nsnake - send_stats "安裝nsnake" + send_stats "安装nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "安裝ninvaders" + send_stats "安装ninvaders" ;; 31) clear - send_stats "全部安裝" + 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 "全部安裝(不含遊戲和屏保)" + send_stats "全部安装(不含游戏和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸載" + 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 + read -e -p "请输入安装的工具名(wget curl sudo htop): " installname install $installname - send_stats "安裝指定軟件" + send_stats "安装指定软件" ;; 42) clear - read -e -p "請輸入卸載的工具名(htop ufw tmux cmatrix):" removename + read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename remove $removename - send_stats "卸載指定軟件" + send_stats "卸载指定软件" ;; 0) @@ -6789,7 +6788,7 @@ linux_tools() { ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -6809,21 +6808,21 @@ linux_bbr() { 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 "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1. 開啟BBRv3 2. 關閉BBRv3(會重啟)" + echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine開啟bbr3" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6868,18 +6867,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}當前備份列表:${NC}" - ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "無備份" + echo -e "${BLUE}当前备份列表:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } # ---------------------------- - # 備份 + # 备份 # ---------------------------- backup_docker() { - echo -e "${YELLOW}正在備份 Docker 容器...${NC}" - read -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers + send_stats "Docker备份" + + echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + docker ps --format '{{.Names}}' + read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip install_docker @@ -6890,7 +6892,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}沒有找到容器${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6898,28 +6900,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 自動生成的還原腳本" >> "$RESTORE_SCRIPT" + echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" - # 記錄已打包過的 Compose 項目路徑,避免重複打包 + # 记录已打包过的 Compose 项目路径,避免重复打包 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}備份容器:$c${NC}" + echo -e "${GREEN}备份容器: $c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}檢測到$c是 docker-compose 容器${NC}" + echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未檢測到 compose 目錄,請手動輸入路徑:" project_dir + read -p "未检测到 compose 目录,请手动输入路径: " project_dir fi - # 如果該 Compose 項目已經打包過,跳過 + # 如果该 Compose 项目已经打包过,跳过 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 項目 [$project_name] 已備份過,跳過重複打包...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6927,19 +6929,19 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose 恢復:$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose 項目 [$project_name] 已打包:${project_dir}${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" else - echo -e "${RED}未找到 docker-compose.yml,跳過此容器...${NC}" + echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" fi else - # 普通容器備份卷 + # 普通容器备份卷 local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "打包卷:$path" + echo "打包卷: $path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done @@ -6948,7 +6950,7 @@ docker_ssh_migration() { mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 環境變量 + # 环境变量 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done @@ -6957,90 +6959,91 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 鏡像 + # 镜像 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\n# 還原容器:$c" >> "$RESTORE_SCRIPT" + echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # 備份 /home/docker 下的所有文件(不含子目錄) + # 备份 /home/docker 下的所有文件(不含子目录) if [ -d "/home/docker" ]; then - echo -e "${BLUE}備份 /home/docker 下的文件...${NC}" - find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from - - echo -e "${GREEN}/home/docker 下的文件已打包到:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - + echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}備份完成:${BACKUP_DIR}${NC}" - echo -e "${GREEN}可用還原腳本:${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 還原 + # 还原 # ---------------------------- restore_docker() { - list_backups - read -p "請輸入要還原的備份目錄:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } - echo -e "${BLUE}開始執行還原操作...${NC}" + send_stats "Docker还原" + read -p "请输入要还原的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + + echo -e "${BLUE}开始执行还原操作...${NC}" install tar jq gzip install_docker - # --------- 優先還原 Compose 項目 --------- + # --------- 优先还原 Compose 项目 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路徑,請輸入還原目錄路徑:" original_path + [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path - # 檢查該 compose 項目的容器是否已經在運行 + # 检查该 compose 项目的容器是否已经在运行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose 項目 [$project_name] 已有容器在運行,跳過還原...${NC}" + echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" continue fi - read -p "確認還原 Compose 項目 [$project_name] 到路徑 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "請輸入新的還原路徑:" original_path + read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose 項目 [$project_name] 已解壓到:$original_path${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose 項目 [$project_name] 還原完成!${NC}" + echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" fi done - # --------- 繼續還原普通容器 --------- - echo -e "${BLUE}檢查並還原普通 Docker 容器...${NC}" + # --------- 继续还原普通容器 --------- + echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}處理容器:$container${NC}" + echo -e "${GREEN}处理容器: $container${NC}" - # 檢查容器是否已經存在且正在運行 + # 检查容器是否已经存在且正在运行 if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 已在運行,跳過還原...${NC}" + echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到鏡像信息,跳過:$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } # 端口映射 PORT_ARGS="" @@ -7049,14 +7052,14 @@ docker_ssh_migration() { [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 環境變量 + # 环境变量 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # 卷映射 + 卷數據恢復 + # 卷映射 + 卷数据恢复 VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7067,32 +7070,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "恢復卷數據:$VOL_SRC" + echo "恢复卷数据: $VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 刪除已存在但未運行的容器 + # 删除已存在但未运行的容器 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 存在但未運行,刪除舊容器...${NC}" + echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" docker rm -f "$container" fi - # 啟動容器 - echo "執行還原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # 启动容器 + echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的備份信息${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" - # 還原 /home/docker 下的文件 + # 还原 /home/docker 下的文件 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}正在還原 /home/docker 下的文件...${NC}" + echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home/docker 下的文件已還原完成${NC}" + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else - echo -e "${YELLOW}未找到 /home/docker 下文件的備份,跳過...${NC}" + echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" fi @@ -7100,66 +7103,68 @@ docker_ssh_migration() { # ---------------------------- - # 遷移 + # 迁移 # ---------------------------- migrate_docker() { - ensure_jq - list_backups - read -p "請輸入要遷移的備份目錄:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } + send_stats "Docker迁移" + install jq + read -p "请输入要迁移的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } - read -p "目標服務器IP:" TARGET_IP - read -p "目標服務器SSH用戶名:" TARGET_USER + read -p "目标服务器IP: " TARGET_IP + read -p "目标服务器SSH用户名: " TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}傳輸備份中...${NC}" + echo -e "${YELLOW}传输备份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 使用密鑰登錄 + # 使用密钥登录 scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 刪除備份 + # 删除备份 # ---------------------------- delete_backup() { - list_backups - read -p "請輸入要刪除的備份目錄:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } + send_stats "Docker备份文件删除" + read -p "请输入要删除的备份目录: " BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}已刪除備份:${BACKUP_DIR}${NC}" + echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" } # ---------------------------- - # 主菜單 + # 主菜单 # ---------------------------- main_menu() { + send_stats "Docker备份迁移还原" while true; do clear echo "------------------------" - echo -e "Docker備份/遷移/還原工具" + echo -e "Docker备份/迁移/还原工具" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. 備份docker項目" - echo -e "2. 遷移docker項目" - echo -e "3. 還原docker項目" - echo -e "4. 刪除docker項目的備份文件" + echo -e "1. 备份docker项目" + echo -e "2. 迁移docker项目" + echo -e "3. 还原docker项目" + echo -e "4. 删除docker项目的备份文件" echo "------------------------" - echo -e "0. 返回上一級菜單" + echo -e "0. 返回上一级菜单" echo "------------------------" - read -p "請選擇:" choice + read -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}無效選項${NC}" ;; + *) echo -e "${RED}无效选项${NC}" ;; esac + break_end done } @@ -7178,34 +7183,34 @@ linux_docker() { echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安裝更新Docker環境${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局狀態${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker鏡像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker網絡管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker捲管理" + echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清理無用的docker容器和鏡像網絡數據卷" + echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" 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}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}11. ${gl_bai}开启Docker-ipv6访问" + echo -e "${gl_kjlan}12. ${gl_bai}关闭Docker-ipv6访问" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}備份/遷移/還原Docker環境" - echo -e "${gl_kjlan}20. ${gl_bai}卸載Docker環境" + echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" + echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "安裝docker環境" + send_stats "安装docker环境" install_add_docker ;; @@ -7216,22 +7221,22 @@ linux_docker() { 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 "docker全局狀態" + send_stats "docker全局状态" echo "Docker版本" docker -v docker compose version echo "" - echo -e "Docker鏡像:${gl_lv}$image_count${gl_bai} " + echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器:${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker網絡:${gl_lv}$network_count${gl_bai}" + echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7246,8 +7251,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker網絡管理" - echo "Docker網絡列表" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7271,36 +7276,36 @@ linux_docker() { done echo "" - echo "網絡操作" + echo "网络操作" echo "------------------------" - echo "1. 創建網絡" - echo "2. 加入網絡" - echo "3. 退出網絡" - echo "4. 刪除網絡" + echo "1. 创建网络" + echo "2. 加入网络" + echo "3. 退出网络" + echo "4. 删除网络" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - send_stats "創建網絡" - read -e -p "設置新網絡名:" dockernetwork + send_stats "创建网络" + read -e -p "设置新网络名: " dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入網絡" - read -e -p "加入網絡名:" dockernetwork - read -e -p "那些容器加入該網絡(多個容器名請用空格分隔):" dockernames + 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 + send_stats "加入网络" + read -e -p "退出网络名: " dockernetwork + read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7309,8 +7314,8 @@ linux_docker() { ;; 4) - send_stats "刪除網絡" - read -e -p "請輸入要刪除的網絡名:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7324,29 +7329,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker捲管理" + send_stats "Docker卷管理" echo "Docker卷列表" docker volume ls echo "" echo "卷操作" echo "------------------------" - echo "1. 創建新卷" - echo "2. 刪除指定卷" - echo "3. 刪除所有捲" + echo "1. 创建新卷" + echo "2. 删除指定卷" + echo "3. 删除所有卷" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) send_stats "新建卷" - read -e -p "設置新卷名:" dockerjuan + read -e -p "设置新卷名: " dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "輸入刪除卷名(多個卷名請用空格分隔):" dockerjuans + read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7355,7 +7360,7 @@ linux_docker() { ;; 3) - send_stats "刪除所有捲" + send_stats "删除所有卷" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7364,7 +7369,7 @@ linux_docker() { [Nn]) ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7386,7 +7391,7 @@ linux_docker() { [Nn]) ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7408,13 +7413,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 開" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 關" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7425,7 +7430,7 @@ linux_docker() { 20) clear - send_stats "Docker卸載" + send_stats "Docker卸载" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7437,7 +7442,7 @@ linux_docker() { [Nn]) ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7446,7 +7451,7 @@ linux_docker() { kejilion ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -7463,151 +7468,151 @@ linux_test() { while true; do clear - # send_stats "測試腳本合集" - echo -e "測試腳本合集" + # 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}Region 流媒體解鎖測試" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒體解鎖檢測" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP質量體檢腳本${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解锁状态检测" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}網絡線路測速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三網回程延遲路由測試" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三網回程線路測試" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三網測速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程測試腳本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}besttrace 三网回程延迟路由测试" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}icu/gb5 CPU性能測試腳本" + echo -e "${gl_kjlan}硬件性能测试" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能测试" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能测试脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}綜合性測試" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能測試" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪測評${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}综合性测试" + echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" + 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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解鎖狀態檢測" + send_stats "ChatGPT解锁状态检测" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒體解鎖測試" + send_stats "Region流媒体解锁测试" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒體解鎖檢測" + send_stats "yeahwu流媒体解锁检测" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP質量體檢腳本" + send_stats "xykt_IP质量体检脚本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三網回程延遲路由測試" + send_stats "besttrace三网回程延迟路由测试" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三網回程線路測試" + send_stats "mtr_trace三网回程线路测试" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三網測速" + send_stats "Superspeed三网测速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程測試腳本" + send_stats "nxtrace快速回程测试脚本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程測試腳本" - echo "可參考的IP列表" + send_stats "nxtrace指定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 "廣州電信: 58.60.188.222" - echo "廣州聯通: 210.21.196.6" - echo "廣州移動: 120.196.165.24" - echo "成都電信: 61.139.2.69" - echo "成都聯通: 119.6.6.6" - echo "成都移動: 211.137.96.205" - echo "湖南電信: 36.111.200.100" - echo "湖南聯通: 42.48.16.100" - echo "湖南移動: 39.134.254.6" + 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 "广州电信: 58.60.188.222" + echo "广州联通: 210.21.196.6" + echo "广州移动: 120.196.165.24" + echo "成都电信: 61.139.2.69" + echo "成都联通: 119.6.6.6" + echo "成都移动: 211.137.96.205" + echo "湖南电信: 36.111.200.100" + echo "湖南联通: 42.48.16.100" + echo "湖南移动: 39.134.254.6" echo "------------------------" - read -e -p "輸入一個指定IP:" testip + read -e -p "输入一个指定IP: " testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三網線路測試" + send_stats "ludashi2020三网线路测试" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能測速腳本" + send_stats "i-abc多功能测速脚本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "網絡質量測試腳本" + send_stats "网络质量测试脚本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能測試" + send_stats "yabs性能测试" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能測試腳本" + send_stats "icu/gb5 CPU性能测试脚本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能測試" + send_stats "bench性能测试" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪測評" + 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 ;; @@ -7617,7 +7622,7 @@ linux_test() { ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -7633,51 +7638,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云腳本合集" - echo -e "甲骨文云腳本合集" + send_stats "甲骨文云脚本合集" + echo -e "甲骨文云脚本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安裝閒置機器活躍腳本" - echo -e "${gl_kjlan}2. ${gl_bai}卸載閒置機器活躍腳本" + 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}開啟ROOT密碼登錄模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢復工具" + echo -e "${gl_kjlan}3. ${gl_bai}DD重装系统脚本" + echo -e "${gl_kjlan}4. ${gl_bai}R探长开机脚本" + echo -e "${gl_kjlan}5. ${gl_bai}开启ROOT密码登录模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) clear - echo "活躍腳本: CPU佔用10-20% 內存佔用20%" - read -e -p "確定安裝嗎? (Y/N):" choice + 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 + # 提示用户输入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 + 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 + read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "請輸入Speedtest間隔時間(秒) [默認:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 運行Docker容器 + # 运行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7685,14 +7690,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安裝活躍腳本" + send_stats "甲骨文云安装活跃脚本" ;; [Nn]) ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7700,20 +7705,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸載活躍腳本" + send_stats "甲骨文云卸载活跃脚本" ;; 3) clear - echo "重裝系統" + echo "重装系统" echo "--------------------------------" - echo -e "${gl_hong}注意:${gl_bai}重裝有風險失聯,不放心者慎用。重裝預計花費15分鐘,請提前備份數據。" - read -e -p "確定繼續嗎? (Y/N):" choice + 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 + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7725,28 +7730,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "無效的選擇,請重新輸入。" + echo "无效的选择,请重新输入。" ;; esac done - read -e -p "請輸入你重裝後的密碼:" vpspasswd + 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 "甲骨文云重裝系統腳本" + send_stats "甲骨文云重装系统脚本" ;; [Nn]) echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 4) clear - echo "該功能處於開發階段,敬請期待!" + echo "该功能处于开发阶段,敬请期待!" ;; 5) clear @@ -7756,15 +7761,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "該功能由jhb大神提供,感謝他!" - send_stats "ipv6修復" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; 0) kejilion ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -7785,7 +7790,7 @@ docker_tato() { 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}" + 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 } @@ -7806,7 +7811,7 @@ 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" + echo -e "${gl_lv}环境已安装${gl_bai} 站点: $output 数据库: $db_output" fi fi @@ -7838,27 +7843,27 @@ linux_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}安裝WordPress${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安裝Discuz論壇${gl_huang}4. ${gl_bai}安裝可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安裝蘋果CMS影視站${gl_huang}6. ${gl_bai}安裝獨角數發卡網" - echo -e "${gl_huang}7. ${gl_bai}安裝flarum論壇網站${gl_huang}8. ${gl_bai}安裝typecho輕量博客網站" - echo -e "${gl_huang}9. ${gl_bai}安裝LinkStack共享鏈接平台${gl_huang}20. ${gl_bai}自定義動態站點" + echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" + echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${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}站點反向代理-IP+端口${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站點反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安裝Bitwarden密碼管理平台${gl_huang}26. ${gl_bai}安裝Halo博客網站" - echo -e "${gl_huang}27. ${gl_bai}安裝AI繪畫提示詞生成器${gl_huang}28. ${gl_bai}站點反向代理-負載均衡" - echo -e "${gl_huang}30. ${gl_bai}自定義靜態站點" + echo -e "${gl_huang}21. ${gl_bai}仅安装nginx ${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站点重定向" + echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" + echo -e "${gl_huang}27. ${gl_bai}安装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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -7872,10 +7877,10 @@ linux_ldnmp() { 3) clear - # Discuz論壇 + # Discuz论坛 webname="Discuz论坛" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,11 +7903,11 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫名:$dbname" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" - echo "表前綴: discuz_" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: discuz_" ;; @@ -7911,8 +7916,8 @@ linux_ldnmp() { clear # 可道云桌面 webname="可道云桌面" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,20 +7939,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "數據庫地址: mysql" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" - echo "數據庫名:$dbname" - echo "redis主機: redis" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # 蘋果CMS + # 苹果CMS webname="苹果CMS" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7978,24 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫端口: 3306" - echo "數據庫名:$dbname" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" - echo "數據庫前綴: mac_" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库前缀: mac_" echo "------------------------" - echo "安裝成功後登錄後台地址" + echo "安装成功后登录后台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 獨腳數卡 + # 独脚数卡 webname="独脚数卡" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,34 +8016,34 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫端口: 3306" - echo "數據庫名:$dbname" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" echo "" echo "redis地址: redis" - echo "redis密碼: 默認不填寫" + echo "redis密码: 默认不填写" echo "redis端口: 6379" echo "" - echo "網站url: https://$yuming" - echo "後台登錄路徑: /admin" + echo "网站url: https://$yuming" + echo "后台登录路径: /admin" echo "------------------------" - echo "用戶名: admin" - echo "密碼: admin" + echo "用户名: admin" + echo "密码: admin" echo "------------------------" - echo "登錄時右上角如果出現紅色error0請使用如下命令:" - echo "我也很氣憤獨角數卡為啥這麼麻煩,會有這樣的問題!" + echo "登录时右上角如果出现红色error0请使用如下命令: " + echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum論壇 + # flarum论坛 webname="flarum论坛" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8080,12 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫名:$dbname" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" - echo "表前綴: flarum_" - echo "管理員信息自行設置" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: flarum_" + echo "管理员信息自行设置" ;; @@ -8088,8 +8093,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8113,11 +8118,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "數據庫前綴: typecho_" - echo "數據庫地址: mysql" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" - echo "數據庫名:$dbname" + echo "数据库前缀: typecho_" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" ;; @@ -8126,8 +8131,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,18 +8157,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫端口: 3306" - echo "數據庫名:$dbname" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" + echo "数据库地址: mysql" + echo "数据库端口: 3306" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8180,10 +8185,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上傳PHP源碼" + echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" echo "-------------" - echo "目前只允許上傳zip格式的源碼包,請將源碼包放到/home/web/html/${yuming}目錄下" - read -e -p "也可以輸入下載鏈接,遠程下載源碼包,直接回車將跳過遠程下載:" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8198,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路徑" + 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 + 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 -e "[${gl_huang}3/6${gl_bai}] 请选择PHP版本" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 :" pho_v + 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 @@ -8217,15 +8222,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "無效的選擇,請重新輸入。" + echo "无效的选择,请重新输入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安裝指定擴展" + echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" echo "-------------" - echo "已經安裝的擴展" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8235,25 +8240,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 編輯站點配置" + echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 数据库管理" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有數據庫備份:" use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db case $use_db in 1) echo ;; 2) - echo "數據庫備份必須是.gz結尾的壓縮包。請放到/home/目錄下,支持寶塔/1panel備份數據導入。" - read -e -p "也可以輸入下載鏈接,遠程下載備份數據,直接回車將跳過遠程下載:" url_download_db + echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" + read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8263,10 +8268,10 @@ linux_ldnmp() { 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 "數據庫導入的表數據" + echo "数据库导入的表数据" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "數據庫導入完成" + echo "数据库导入完成" ;; *) echo @@ -8278,12 +8283,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "數據庫地址: mysql" - echo "數據庫名:$dbname" - echo "使用者名稱:$dbuse" - echo "密碼:$dbusepasswd" - echo "表前綴:$prefix" - echo "管理員登錄信息自行設置" + echo "数据库地址: mysql" + echo "数据库名: $dbname" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "表前缀: $prefix" + echo "管理员登录信息自行设置" ;; @@ -8296,10 +8301,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - read -e -p "請輸入跳轉域名:" reverseproxy + read -e -p "请输入跳转域名: " reverseproxy nginx_install_status install_ssltls certs_status @@ -8321,7 +8326,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口訪問該服務" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8332,11 +8337,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming - echo -e "域名格式:${gl_huang}google.com${gl_bai}" - read -e -p "請輸入你的反代域名:" fandai_yuming + echo -e "域名格式: ${gl_huang}google.com${gl_bai}" + read -e -p "请输入你的反代域名: " fandai_yuming nginx_install_status install_ssltls certs_status @@ -8356,8 +8361,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8379,8 +8384,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8397,8 +8402,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming nginx_install_status install_ssltls @@ -8431,8 +8436,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安裝$webname" - echo "開始部署$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming nginx_install_status @@ -8449,10 +8454,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上傳靜態源碼" + echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" echo "-------------" - echo "目前只允許上傳zip格式的源碼包,請將源碼包放到/home/web/html/${yuming}目錄下" - read -e -p "也可以輸入下載鏈接,遠程下載源碼包,直接回車將跳過遠程下載:" url_download + echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8462,12 +8467,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路徑" + 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 + 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 @@ -8492,21 +8497,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP環境備份" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在備份$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "備份文件已創建: /home/$backup_filename" - read -e -p "要傳送備份數據到遠程服務器嗎? (Y/N):" choice + echo "备份文件已创建: /home/$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "請輸入遠端服務器IP:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "錯誤: 請輸入遠端服務器IP。" + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8514,9 +8519,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已傳送至遠程服務器home目錄。" + echo "文件已传送至远程服务器home目录。" else - echo "未找到要傳送的文件。" + echo "未找到要传送的文件。" fi break ;; @@ -8524,7 +8529,7 @@ linux_ldnmp() { break ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8532,9 +8537,9 @@ linux_ldnmp() { 33) clear - send_stats "定時遠程備份" - read -e -p "輸入遠程服務器IP:" useip - read -e -p "輸入遠程服務器密碼:" usepasswd + 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 @@ -8544,18 +8549,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周備份 2. 每天備份" - read -e -p "請輸入你的選擇:" dingshi + echo "1. 每周备份 2. 每天备份" + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) check_crontab_installed - read -e -p "選擇每周備份的星期幾 (0-6,0代表星期日):" weekday + 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 + read -e -p "选择每天备份的时间(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8569,19 +8574,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP環境還原" - echo "可用的站點備份" + send_stats "LDNMP环境还原" + echo "可用的站点备份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回車鍵還原最新的備份,輸入備份文件名還原指定的備份,輸入0退出:" filename + 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 @@ -8591,7 +8596,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解壓$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8600,7 +8605,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "沒有找到壓縮包。" + echo "没有找到压缩包。" fi ;; @@ -8618,11 +8623,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP環境" - echo "更新LDNMP環境" + send_stats "更新LDNMP环境" + echo "更新LDNMP环境" echo "------------------------" ldnmp_v - echo "發現新版本的組件" + echo "发现新版本的组件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8644,11 +8649,11 @@ linux_ldnmp() { echo echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5. 更新完整環境" + echo "5. 更新完整环境" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) nginx_upgrade @@ -8657,7 +8662,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "請輸入${ldnmp_pods}版本號 (如: 8.0 8.3 8.4 9.0)(回車獲取最新版):" version + read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version local version=${version:-latest} cd /home/web/ @@ -8674,7 +8679,7 @@ linux_ldnmp() { ;; 3) local ldnmp_pods="php" - read -e -p "請輸入${ldnmp_pods}版本號 (如: 7.4 8.0 8.1 8.2 8.3)(回車獲取最新版):" version + 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 @@ -8727,7 +8732,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "完整更新LDNMP環境" + send_stats "完整更新LDNMP环境" cd /home/web/ docker compose down --rmi all @@ -8753,7 +8758,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸載LDNMP環境" + send_stats "卸载LDNMP环境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8767,7 +8772,7 @@ linux_ldnmp() { ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -8777,7 +8782,7 @@ linux_ldnmp() { ;; *) - echo "無效的輸入!" + echo "无效的输入!" esac break_end @@ -8797,12 +8802,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "應用市場" + echo -e "应用市场" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循環設置顏色 + # 用循环设置颜色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8811,67 +8816,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}寶塔面板官方版${gl_kjlan}2. ${color2}aaPanel寶塔國際版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板${gl_kjlan}4. ${color4}NginxProxyManager可視化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存儲文件列表程序${gl_kjlan}6. ${color6}Ubuntu遠程桌面網頁版" - echo -e "${gl_kjlan}7. ${color7}哪吒探針VPS監控面板${gl_kjlan}8. ${color8}QB離線BT磁力下載面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io郵件服務器程序${gl_kjlan}10. ${color10}RocketChat多人在線聊天系統" + echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" + echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禪道項目管理軟件${gl_kjlan}12. ${color12}青龍面板定時任務管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve網盤${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}簡單圖床圖片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒體管理系統${gl_kjlan}16. ${color16}Speedtest測速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去廣告軟件${gl_kjlan}18. ${color18}onlyoffice在線辦公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火牆面板${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode網頁版${gl_kjlan}22. ${color22}UptimeKuma監控工具" - echo -e "${gl_kjlan}23. ${color23}Memos網頁備忘錄${gl_kjlan}24. ${color24}Webtop遠程桌面網頁版${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud網盤${gl_kjlan}26. ${color26}QD-Today定時任務管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆棧管理面板${gl_kjlan}28. ${color28}LibreSpeed測速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相冊系統" + echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" + echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全${gl_kjlan}32. ${color32}drawio免費的在線圖表軟件${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel導航面板${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}極簡朋友圈${gl_kjlan}36. ${color36}LobeChatAI聊天聚合網站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播錄製工具${gl_kjlan}40. ${color40}webssh網頁版SSH連接工具" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板${gl_kjlan}42. ${color42}Nexterm遠程連接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk遠程桌面(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk遠程桌面(中繼端)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站${gl_kjlan}46. ${color46}GitHub加速站${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普羅米修斯監控${gl_kjlan}48. ${color48}普羅米修斯(主機監控)" - echo -e "${gl_kjlan}49. ${color49}普羅米修斯(容器監控)${gl_kjlan}50. ${color50}補貨監控工具" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" + echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE開小雞面板${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型${gl_kjlan}54. ${color54}AMH主機建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP內網穿透(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP內網穿透(客戶端)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型${gl_kjlan}58. ${color58}Dify大模型知識庫${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型資產管理${gl_kjlan}60. ${color60}JumpServer開源堡壘機" + echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在線翻譯服務器${gl_kjlan}62. ${color62}RAGFlow大模型知識庫" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自託管AI平台${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自動化工作流平台${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp視頻下載工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go動態DNS管理工具${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL證書管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件傳輸工具${gl_kjlan}70. ${color70}AstrBot聊天機器人框架" + echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音樂服務器${gl_kjlan}72. ${color72}bitwarden密碼管理器${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影視${gl_kjlan}74. ${color74}MoonTV私有影視" - echo -e "${gl_kjlan}75. ${color75}Melody音樂精靈${gl_kjlan}76. ${color76}在線DOS老遊戲" - echo -e "${gl_kjlan}77. ${color77}迅雷離線下載工具${gl_kjlan}78. ${color78}PandaWiki智能文檔管理系統" - echo -e "${gl_kjlan}79. ${color79}Beszel服務器監控${gl_kjlan}80. ${color80}linkwarden書籤管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" + echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" + echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" + echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet視頻會議${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服務器監控工具${gl_kjlan}84. ${color84}Wallos個人財務管理工具" - echo -e "${gl_kjlan}85. ${color85}immich圖片視頻管理器${gl_kjlan}86. ${color86}jellyfin媒體管理系統" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器${gl_kjlan}88. ${color88}Owncast自託管直播平台" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快遞${gl_kjlan}90. ${color90}matrix去中心化聊天協議" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" + echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea私有代碼倉庫${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" + echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice fi case $sub_choice in @@ -8990,6 +8998,9 @@ while true; do docker_rum() { + mkdir -p /home/docker/openlist + chmod -R 777 /home/docker/openlist + docker run -d \ --restart=always \ -v /home/docker/openlist:/opt/openlist/data \ @@ -9021,8 +9032,8 @@ while true; do docker_rum() { - read -e -p "設置登錄用戶名:" admin - read -e -p "設置登錄用戶密碼:" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9064,9 +9075,9 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒監控$check_docker $update_status" - echo "開源、輕量、易用的服務器監控與運維工具" - echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒监控 $check_docker $update_status" + echo "开源、轻量、易用的服务器监控与运维工具" + echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip @@ -9075,9 +9086,9 @@ while true; do echo "------------------------" echo "1. 使用" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9134,7 +9145,7 @@ while true; do ;; 9|mail) - send_stats "搭建郵局" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9144,43 +9155,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "郵局服務$check_docker $update_status" - echo "poste.io 是一個開源的郵件服務器解決方案," - echo "視頻介紹: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "邮局服务 $check_docker $update_status" + echo "poste.io 是一个开源的邮件服务器解决方案," + echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" else - echo -e "${gl_hong}端口$port當前不可用${gl_bai}" + echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "訪問地址:" + echo "访问地址: " echo "https://$yuming" fi echo "------------------------" - echo "1. 安裝 2. 更新 3. 卸載" + echo "1. 安装 2. 更新 3. 卸载" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) check_disk_space 2 - read -e -p "請設置郵箱域名 例如 mail.yuming.com :" yuming + read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析這些DNS記錄" + echo "先解析这些DNS记录" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9190,7 +9201,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意鍵繼續..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9209,9 +9220,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已經安裝完成" + echo "poste.io已经安装完成" echo "------------------------" - echo "您可以使用以下地址訪問poste.io:" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" @@ -9234,9 +9245,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已經安裝完成" + echo "poste.io已经安装完成" echo "------------------------" - echo "您可以使用以下地址訪問poste.io:" + echo "您可以使用以下地址访问poste.io:" echo "https://$yuming" echo "" ;; @@ -9247,7 +9258,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" + echo "应用已卸载" ;; *) @@ -9281,7 +9292,7 @@ while true; do clear ip_address - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -9291,7 +9302,7 @@ while true; do 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已經安裝完成" + echo "rocket.chat已经安装完成" check_docker_app_ip } @@ -9301,7 +9312,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -9385,7 +9396,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -9399,7 +9410,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -9552,20 +9563,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服務$check_docker" - echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" - echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "雷池服务 $check_docker" + echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" + echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安裝 2. 更新 3. 重置密碼 4. 卸載" + echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9575,7 +9586,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已經安裝完成" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9588,7 +9599,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已經更新完成" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9599,7 +9610,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默認安裝目錄那現在項目已經卸載。如果你是自定義安裝目錄你需要到安裝目錄下自行執行:" + echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9718,8 +9729,8 @@ while true; do docker_rum() { - read -e -p "設置登錄用戶名:" admin - read -e -p "設置登錄用戶密碼:" admin_password + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10007,7 +10018,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官網介紹:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10264,9 +10275,9 @@ while true; do prometheus_install clear ip_address - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip - echo "初始用戶名密碼均為: admin" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10284,7 +10295,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10371,7 +10382,7 @@ while true; do 51|pve) clear - send_stats "PVE開小雞" + send_stats "PVE开小鸡" 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 ;; @@ -10491,7 +10502,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10506,7 +10517,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10534,7 +10545,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10549,7 +10560,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10557,7 +10568,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10578,17 +10589,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip - echo "初始用戶名: admin" - echo "初始密碼: ChangeMe" + echo "初始用户名: admin" + echo "初始密码: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "應用已更新" + echo "应用已更新" } @@ -10598,7 +10609,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10645,7 +10656,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10661,7 +10672,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10923,7 +10934,7 @@ while true; do docker_rum() { - read -e -p "設置LibreTV的登錄密碼:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10957,9 +10968,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "設置登錄用戶名:" admin - read -e -p "設置登錄用戶密碼:" admin_password - read -e -p "輸入授權碼:" shouquanma + read -e -p "设置登录用户名: " admin + read -e -p "设置登录用户密码: " admin_password + read -e -p "输入授权码: " shouquanma mkdir -p /home/docker/moontv @@ -10969,13 +10980,13 @@ while true; do curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml - sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml + sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml cd /home/docker/moontv/ docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10989,7 +11000,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -11062,8 +11073,8 @@ while true; do docker_rum() { - read -e -p "設置登錄用戶名:" app_use - read -e -p "設置登錄密碼:" app_passwd + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd docker run -d \ --name xunlei \ @@ -11160,11 +11171,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下載官方 docker-compose 和 env 文件 + # 下载官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成隨機密鑰與密碼 + # 生成随机密钥与密码 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11173,17 +11184,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理員賬號信息 + # 追加管理员账号信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 啟動容器 + # 启动容器 docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11193,7 +11204,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的變量 + # 保留原本的变量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11210,7 +11221,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -11260,7 +11271,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -11278,7 +11289,7 @@ while true; do docker_rum() { - read -e -p "設定${docker_name}的登錄密鑰(sk-開頭字母和數字組合)如: sk-159kejilionyyds163:" app_passwd + read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11382,7 +11393,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11395,7 +11406,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -11556,7 +11567,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "創建初始用戶或管理員。請設置以下內容用戶名和密碼以及是否為管理員。" + echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11608,7 +11619,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11622,7 +11633,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -11661,24 +11672,282 @@ while true; do ;; + 93|dufs) + + local app_id="93" + local docker_name="dufs" + local docker_img="sigoden/dufs" + local docker_port=8093 + + docker_rum() { + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}:/data \ + -p ${docker_port}:5000 \ + ${docker_img} /data -A + + } + + local docker_describe="极简静态文件服务器,支持上传下载" + local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + 94|gopeed) + + local app_id="94" + local docker_name="gopeed" + local docker_img="liwei2633/gopeed" + local docker_port=8094 + + docker_rum() { + + read -e -p "设置登录用户名: " app_use + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name ${docker_name} \ + --restart unless-stopped \ + -v /home/docker/${docker_name}/downloads:/app/Downloads \ + -v /home/docker/${docker_name}/storage:/app/storage \ + -p ${docker_port}:9999 \ + ${docker_img} -u ${app_use} -p ${app_passwd} + + } + + local docker_describe="分布式高速下载工具,支持多种协议" + local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + + 95|paperless) + + local app_id="95" + + local app_name="paperless文档管理平台" + local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" + local app_url="视频介绍: https://docs.paperless-ngx.com/" + local docker_name="paperless-webserver-1" + local docker_port="8095" + local app_size="2" + + docker_app_install() { + + mkdir -p /home/docker/paperless + mkdir -p /home/docker/paperless/export + mkdir -p /home/docker/paperless/consume + cd /home/docker/paperless + + curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml + curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml + cd /home/docker/paperless + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/paperless/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/paperless/ && docker compose down --rmi all + rm -rf /home/docker/paperless + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + 97|wgs) + + local app_id="97" + local docker_name="wireguard" + local docker_img="lscr.io/linuxserver/wireguard:latest" + local docker_port=51820 + + docker_rum() { + + read -p "请输入组网的客户端数量 (默认 5): " COUNT + COUNT=${COUNT:-5} + + PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) + + stop_containers_or_kill_process 51820 &>/dev/null + + ip_address + docker run -d \ + --name=wireguard \ + --network host \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e SERVERURL=${ipv4_address} \ + -e SERVERPORT=51820 \ + -e PEERS=${PEERS} \ + -e INTERNAL_SUBNET=10.13.13.0 \ + -e ALLOWEDIPS=10.13.13.0/24 \ + -e PERSISTENTKEEPALIVE_PEERS=all \ + -e LOG_CONFS=true \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules \ + --restart unless-stopped \ + lscr.io/linuxserver/wireguard:latest + + + sleep 3 + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + for f in "$d"/*.conf; do + grep -q "^PersistentKeepalive *= *25$" "$f" || \ + sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + done + done + ' + + docker exec -it wireguard bash -c ' + for d in /config/peer_*; do + cd "$d" || continue + conf_file=$(ls *.conf) + base_name="${conf_file%.conf}" + echo "生成二维码: $base_name.png" + qrencode -o "$base_name.png" < "$conf_file" + done + ' + + sleep 2 + docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + sleep 2 + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + sleep 2 + echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" + echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" + echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 98|wgc) + + local app_id="98" + local docker_name="wireguardc" + local docker_img="kjlion/wireguard:alpine" + local docker_port=51820 + + docker_rum() { + + mkdir -p /home/docker/wireguard/config/ + + local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CONFIG_FILE")" + + echo "请粘贴你的客户端配置,连续按两次回车保存:" + + # 初始化变量 + input="" + empty_line_count=0 + + # 逐行读取用户输入 + while IFS= read -r line; do + if [[ -z "$line" ]]; then + ((empty_line_count++)) + if [[ $empty_line_count -ge 2 ]]; then + break + fi + else + empty_line_count=0 + input+="$line"$'\n' + fi + done + + # 写入配置文件 + echo "$input" > "$CONFIG_FILE" + + echo "客户端配置已保存到 $CONFIG_FILE" + + docker run -d \ + --name wireguardc \ + --network host \ + --cap-add NET_ADMIN \ + --cap-add SYS_MODULE \ + -v /home/docker/wireguard/config:/config \ + -v /lib/modules:/lib/modules:ro \ + --restart always \ + kjlion/wireguard:alpine + + sleep 3 + + docker logs wireguardc + + break_end + + } + + local docker_describe="现代化、高性能的虚拟专用网络工具" + local docker_url="官网介绍: https://www.wireguard.com/" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear - send_stats "全部應用備份" + send_stats "全部应用备份" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在備份$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "備份文件已創建: /$backup_filename" - read -e -p "要傳送備份數據到遠程服務器嗎? (Y/N):" choice + echo "备份文件已创建: /$backup_filename" + read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice case "$choice" in [Yy]) - read -e -p "請輸入遠端服務器IP:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "錯誤: 請輸入遠端服務器IP。" + echo "错误: 请输入远端服务器IP。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11686,14 +11955,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "文件已傳送至遠程服務器/根目錄。" + echo "文件已传送至远程服务器/根目录。" else - echo "未找到要傳送的文件。" + echo "未找到要传送的文件。" fi break ;; *) - echo "注意: 目前備份僅包含docker項目,不包含寶塔,1panel等建站面板的數據備份。" + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -11703,29 +11972,29 @@ while true; do r) root_use - send_stats "全部應用還原" - echo "可用的應用備份" + send_stats "全部应用还原" + echo "可用的应用备份" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "回車鍵還原最新的備份,輸入備份文件名還原指定的備份,輸入0退出:" filename + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # 如果用戶沒有輸入文件名,使用最新的壓縮包 + # 如果用户没有输入文件名,使用最新的压缩包 if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解壓$filename ...${gl_bai}" + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "應用數據已還原,目前請手動進入指定應用菜單,更新應用,即可還原應用。" + echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" else - echo "沒有找到壓縮包。" + echo "没有找到压缩包。" fi ;; @@ -11748,35 +12017,35 @@ linux_work() { while true; do clear - send_stats "後台工作區" - echo -e "後台工作區" - echo -e "系統將為你提供可以後台常駐運行的工作區,你可以用來執行長時間的任務" - echo -e "即使你斷開SSH,工作區中的任務也不會中斷,後台常駐任務。" - echo -e "${gl_huang}提示:${gl_bai}進入工作區後使用Ctrl+b再單獨按d,退出工作區!" + send_stats "后台工作区" + echo -e "后台工作区" + echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" + echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" + echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" echo -e "${gl_kjlan}------------------------" - echo "當前已存在的工作區列表" + 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}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}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}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -11784,7 +12053,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11792,63 +12061,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -11860,21 +12129,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常駐模式" - echo -e "SSH常駐模式${tmux_sshd_status}" - echo "開啟後SSH連接後會直接進入常駐模式,直接回到之前的工作狀態。" + send_stats "SSH常驻模式 " + echo -e "SSH常驻模式 ${tmux_sshd_status}" + echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" echo "------------------------" - echo "1. 開啟 2. 關閉" + echo "1. 开启 2. 关闭" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" gongzuoqu_del + 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 + 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 ;; @@ -11890,29 +12159,29 @@ linux_work() { ;; 22) - read -e -p "請輸入你創建或進入的工作區名稱,如1​​001 kj001 work1:" SESSION_NAME + read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME tmux_run - send_stats "自定義工作區" + send_stats "自定义工作区" ;; 23) - read -e -p "請輸入你要後台執行的命令,如:curl -fsSL https://get.docker.com | sh:" tmuxd + read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd tmux_run_d - send_stats "注入命令到後台工作區" + send_stats "注入命令到后台工作区" ;; 24) - read -e -p "請輸入要刪除的工作區名稱:" gongzuoqu_name + read -e -p "请输入要删除的工作区名称: " gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "刪除工作區" + send_stats "删除工作区" ;; 0) kejilion ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -11937,54 +12206,54 @@ linux_Settings() { while true; do clear - # send_stats "系統工具" - echo -e "系統工具" + # 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}ROOT密碼登錄模式${gl_kjlan}4. ${gl_bai}安裝Python指定版本" - 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}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" + 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}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}本機host解析${gl_kjlan}22. ${gl_bai}SSH防禦程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自動關機${gl_kjlan}24. ${gl_bai}ROOT私鑰登錄模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系統監控預警${gl_kjlan}26. ${gl_bai}修復OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}紅帽系Linux內核升級${gl_kjlan}28. ${gl_bai}Linux系統內核參數優化${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒掃描工具${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${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}39. ${gl_bai}命令收藏夾${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" 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}卸載科技lion腳本" + 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}卸载科技lion脚本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) while true; do clear - read -e -p "請輸入你的快捷按鍵(輸入0退出):" kuaijiejian + 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 "腳本快捷鍵已設置" + echo "快捷键已设置" + send_stats "脚本快捷键已设置" break_end linux_Settings done @@ -11992,13 +12261,13 @@ linux_Settings() { 2) clear - send_stats "設置你的登錄密碼" - echo "設置你的登錄密碼" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "root密碼模式" + send_stats "root密码模式" add_sshpasswd ;; @@ -12006,20 +12275,20 @@ linux_Settings() { root_use send_stats "py版本管理" echo "python版本管理" - echo "視頻介紹: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "該功能可無縫安裝python官方支持的任何版本!" + echo "该功能可无缝安装python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "當前python版本號:${gl_huang}$VERSION${gl_bai}" + echo -e "当前python版本号: ${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 "推荐版本: 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 + read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "腳本PY管理" + send_stats "脚本PY管理" break_end linux_Settings fi @@ -12081,17 +12350,17 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "當前python版本號:${gl_huang}$VERSION${gl_bai}" - send_stats "腳本PY版本切換" + echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + send_stats "脚本PY版本切换" ;; 5) root_use - send_stats "開放端口" + send_stats "开放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部開放" + echo "端口已全部开放" ;; 6) @@ -12102,19 +12371,19 @@ EOF clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 讀取當前的 SSH 端口號 + # 读取当前的 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}" + # 打印当前的 SSH 端口号 + echo -e "当前的 SSH 端口号是: ${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口號範圍1到65535之間的數字。 (輸入0退出)" + echo "端口号范围1到65535之间的数字。(输入0退出)" - # 提示用戶輸入新的 SSH 端口號 - read -e -p "請輸入新的 SSH 端口號:" new_port + # 提示用户输入新的 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端口已修改" @@ -12123,13 +12392,13 @@ EOF send_stats "退出SSH端口修改" break else - echo "端口號無效,請輸入1到65535之間的數字。" - send_stats "輸入無效SSH端口" + echo "端口号无效,请输入1到65535之间的数字。" + send_stats "输入无效SSH端口" break_end fi else - echo "輸入無效,請輸入數字。" - send_stats "輸入無效SSH端口" + echo "输入无效,请输入数字。" + send_stats "输入无效SSH端口" break_end fi done @@ -12148,8 +12417,8 @@ EOF ;; 9) root_use - send_stats "新用戶禁用root" - read -e -p "請輸入新用戶名(輸入0退出):" new_username + send_stats "新用户禁用root" + read -e -p "请输入新用户名(输入0退出): " new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12170,43 +12439,43 @@ EOF 10) root_use - send_stats "設置v4/v6優先級" + send_stats "设置v4/v6优先级" while true; do clear - echo "設置v4/v6優先級" + 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}優先" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai} 优先" else - echo -e "當前網絡優先級設置:${gl_huang}IPv6${gl_bai}優先" + echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" fi echo "" echo "------------------------" - echo "1. IPv4 優先 2. IPv6 優先 3. IPv6 修復工具" + echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "選擇優先的網絡:" choice + 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 優先" + echo "已切换为 IPv4 优先" + send_stats "已切换为 IPv4 优先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切換為 IPv6 優先" - send_stats "已切換為 IPv6 優先" + echo "已切换为 IPv6 优先" + send_stats "已切换为 IPv6 优先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "該功能由jhb大神提供,感謝他!" - send_stats "ipv6修復" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12224,43 +12493,43 @@ EOF 12) root_use - send_stats "設置虛擬內存" + send_stats "设置虚拟内存" while true; do clear - echo "設置虛擬內存" + 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 -e "当前虚拟内存: ${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定義大小" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" choice + read -e -p "请输入你的选择: " choice case "$choice" in 1) - send_stats "已設置1G虛擬內存" + send_stats "已设置1G虚拟内存" add_swap 1024 ;; 2) - send_stats "已設置2G虛擬內存" + send_stats "已设置2G虚拟内存" add_swap 2048 ;; 3) - send_stats "已設置4G虛擬內存" + send_stats "已设置4G虚拟内存" add_swap 4096 ;; 4) - read -e -p "請輸入虛擬內存大小(單位M):" new_swap + read -e -p "请输入虚拟内存大小(单位M): " new_swap add_swap "$new_swap" - send_stats "已設置自定義虛擬內存" + send_stats "已设置自定义虚拟内存" ;; *) @@ -12273,8 +12542,8 @@ EOF 13) while true; do root_use - send_stats "用戶管理" - echo "用戶列表" + send_stats "用户管理" + echo "用户列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12285,24 +12554,24 @@ EOF echo "" - echo "賬戶操作" + echo "账户操作" echo "------------------------" - echo "1. 創建普通賬戶 2. 創建高級賬戶" + echo "1. 创建普通账户 2. 创建高级账户" echo "------------------------" - echo "3. 賦予最高權限 4. 取消最高權限" + echo "3. 赋予最高权限 4. 取消最高权限" echo "------------------------" - echo "5. 刪除賬號" + echo "5. 删除账号" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - # 提示用戶輸入新用戶名 - read -e -p "請輸入新用戶名:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 創建新用戶並設置密碼 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" @@ -12310,14 +12579,14 @@ EOF ;; 2) - # 提示用戶輸入新用戶名 - read -e -p "請輸入新用戶名:" new_username + # 提示用户输入新用户名 + read -e -p "请输入新用户名: " new_username - # 創建新用戶並設置密碼 + # 创建新用户并设置密码 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 賦予新用戶sudo權限 + # 赋予新用户sudo权限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12326,21 +12595,21 @@ EOF ;; 3) - read -e -p "請輸入用戶名:" username - # 賦予新用戶sudo權限 + read -e -p "请输入用户名: " username + # 赋予新用户sudo权限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "請輸入用戶名:" username - # 從sudoers文件中移除用戶的sudo權限 + read -e -p "请输入用户名: " username + # 从sudoers文件中移除用户的sudo权限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "請輸入要刪除的用戶名:" username - # 刪除用戶及其主目錄 + read -e -p "请输入要删除的用户名: " username + # 删除用户及其主目录 userdel -r "$username" ;; @@ -12353,50 +12622,50 @@ EOF 14) clear - send_stats "用戶信息生成器" - echo "隨機用戶名" + send_stats "用户信息生成器" + echo "随机用户名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "隨機用戶名$i: $username" + echo "随机用户名 $i: $username" done echo "" - 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個隨機用戶姓名 + # 生成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" + echo "随机用户姓名 $i: $user_name" done echo "" - echo "隨機UUID" + echo "随机UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "隨機UUID$i: $uuid" + echo "随机UUID $i: $uuid" done echo "" - echo "16位隨機密碼" + 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" + echo "随机密码 $i: $password" done echo "" - echo "32位隨機密碼" + 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" + echo "随机密码 $i: $password" done echo "" @@ -12404,46 +12673,46 @@ EOF 15) root_use - send_stats "換時區" + send_stats "换时区" while true; do clear - echo "系統時間信息" + echo "系统时间信息" - # 獲取當前系統時區 + # 获取当前系统时区 local timezone=$(current_timezone) - # 獲取當前系統時間 + # 获取当前系统时间 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 顯示時區和時間 - echo "當前系統時區:$timezone" - echo "當前系統時間:$current_time" + # 显示时区和时间 + echo "当前系统时区:$timezone" + echo "当前系统时间:$current_time" echo "" - echo "時區切換" + echo "时区切换" echo "------------------------" - echo "亞洲" - echo "1. 中國上海時間 2. 中國香港時間" - echo "3. 日本東京時間 4. 韓國首爾時間" - echo "5. 新加坡時間 6. 印度加爾各答時間" - echo "7. 阿聯酋迪拜時間 8. 澳大利亞悉尼時間" - echo "9. 泰國曼谷時間" + 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 "11. 英国伦敦时间 12. 法国巴黎时间" + echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" + echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" echo "------------------------" echo "美洲" - echo "21. 美國西部時間 22. 美國東部時間" - echo "23. 加拿大時間 24. 墨西哥時間" - echo "25. 巴西時間 26. 阿根廷時間" + echo "21. 美国西部时间 22. 美国东部时间" + echo "23. 加拿大时间 24. 墨西哥时间" + echo "25. 巴西时间 26. 阿根廷时间" echo "------------------------" - echo "31. UTC全球標準時間" + echo "31. UTC全球标准时间" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -12486,21 +12755,21 @@ EOF 18) root_use - send_stats "修改主機名" + send_stats "修改主机名" while true; do clear local current_hostname=$(uname -n) - echo -e "當前主機名:${gl_huang}$current_hostname${gl_bai}" + echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "請輸入新的主機名(輸入0退出):" new_hostname + 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 等 + # 其他系统,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12518,11 +12787,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主機名已更改為:$new_hostname" - send_stats "主機名已更改" + echo "主机名已更改为: $new_hostname" + send_stats "主机名已更改" sleep 1 else - echo "已退出,未更改主機名。" + echo "已退出,未更改主机名。" break fi done @@ -12530,24 +12799,24 @@ EOF 19) root_use - send_stats "換系統更新源" + send_stats "换系统更新源" clear - echo "選擇更新源區域" - echo "接入LinuxMirrors切換系統更新源" + echo "选择更新源区域" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. 中國大陸【默認】 2. 中國大陸【教育網】 3. 海外地區" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "輸入你的選擇:" choice + read -e -p "输入你的选择: " choice case $choice in 1) - send_stats "中國大陸默認源" + send_stats "中国大陆默认源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中國大陸教育源" + send_stats "中国大陆教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) @@ -12563,62 +12832,62 @@ EOF ;; 20) - send_stats "定時任務管理" + send_stats "定时任务管理" while true; do clear check_crontab_installed clear - echo "定時任務列表" + echo "定时任务列表" crontab -l echo "" echo "操作" echo "------------------------" - echo "1. 添加定時任務 2. 刪除定時任務 3. 編輯定時任務" + echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - read -e -p "請輸入新任務的執行命令:" newquest + read -e -p "请输入新任务的执行命令: " newquest echo "------------------------" - echo "1. 每月任務 2. 每週任務" - echo "3. 每天任務 4. 每小時任務" + echo "1. 每月任务 2. 每周任务" + echo "3. 每天任务 4. 每小时任务" echo "------------------------" - read -e -p "請輸入你的選擇:" dingshi + read -e -p "请输入你的选择: " dingshi case $dingshi in 1) - read -e -p "選擇每月的幾號執行任務? (1-30):" day + 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 + 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 + read -e -p "选择每天几点执行任务?(小时,0-23): " hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "輸入每小時的第幾分鐘執行任務? (分鐘,0-60):" minute + read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定時任務" + send_stats "添加定时任务" ;; 2) - read -e -p "請輸入需要刪除任務的關鍵字:" kquest + read -e -p "请输入需要删除任务的关键字: " kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "刪除定時任務" + send_stats "删除定时任务" ;; 3) crontab -e - send_stats "編輯定時任務" + send_stats "编辑定时任务" ;; *) break # 跳出循环,退出菜单 @@ -12633,29 +12902,29 @@ EOF send_stats "本地host解析" while true; do clear - echo "本機host解析列表" - echo "如果你在這裡添加解析匹配,將不再使用動態解析了" + echo "本机host解析列表" + echo "如果你在这里添加解析匹配,将不再使用动态解析了" cat /etc/hosts echo "" echo "操作" echo "------------------------" - echo "1. 添加新的解析 2. 刪除解析地址" + echo "1. 添加新的解析 2. 删除解析地址" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - read -e -p "請輸入新的解析記錄 格式: 110.25.5.33 kejilion.pro :" addhost + read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost echo "$addhost" >> /etc/hosts send_stats "本地host解析新增" ;; 2) - read -e -p "請輸入需要刪除的解析內容關鍵字:" delhost + read -e -p "请输入需要删除的解析内容关键字: " delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析刪除" + send_stats "本地host解析删除" ;; *) break # 跳出循环,退出菜单 @@ -12666,7 +12935,7 @@ EOF 22) root_use - send_stats "ssh防禦" + send_stats "ssh防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12678,20 +12947,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防禦程序$check_docker" - echo "fail2ban是一個SSH防止暴力破解工具" - echo "官網介紹:${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御程序 $check_docker" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安裝防禦程序" + echo "1. 安装防御程序" echo "------------------------" - echo "2. 查看SSH攔截記錄" - echo "3. 日誌實時監控" + echo "2. 查看SSH拦截记录" + echo "3. 日志实时监控" echo "------------------------" - echo "9. 卸載防禦程序" + echo "9. 卸载防御程序" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" sub_choice + read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) install_docker @@ -12714,7 +12983,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防禦程序已卸載" + echo "Fail2Ban防御程序已卸载" ;; *) break @@ -12727,47 +12996,47 @@ EOF 23) root_use - send_stats "限流關機功能" + send_stats "限流关机功能" while true; do clear - echo "限流關機功能" - echo "視頻介紹: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "限流关机功能" + echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "當前流量使用情況,重啟服務器流量計算會清零!" + echo "当前流量使用情况,重启服务器流量计算会清零!" output_status - echo -e "${gl_kjlan}總接收:${gl_bai}$rx" - echo -e "${gl_kjlan}總發送:${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" - # 檢查是否存在 Limiting_Shut_down.sh 文件 + # 检查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # 獲取 threshold_gb 的值 + # 获取 threshold_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}" + 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}" + echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "系統每分鐘會檢測實際流量是否到達閾值,到達後會自動關閉服務器!" + echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" echo "------------------------" - echo "1. 開啟限流關機功能 2. 停用限流關機功能" + echo "1. 开启限流关机功能 2. 停用限流关机功能" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) - # 輸入新的虛擬內存大小 - echo "如果實際服務器就100G流量,可設置閾值為95G,提前關機,以免出現流量誤差或溢出。" - read -e -p "請輸入進站流量閾值(單位為G,默認100G):" rx_threshold_gb + # 输入新的虚拟内存大小 + echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" + read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "請輸入出站流量閾值(單位為G,默認100G):" tx_threshold_gb + read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "請輸入流量重置日期(默認每月1日重置):" cz_day + read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day cz_day=${cz_day:-1} cd ~ @@ -12780,15 +13049,15 @@ EOF (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 "限流關機已設置" + 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 "已關閉限流關機功能" + echo "已关闭限流关机功能" ;; *) break @@ -12801,40 +13070,40 @@ EOF 24) root_use - send_stats "私鑰登錄" + send_stats "私钥登录" while true; do clear - echo "ROOT私鑰登錄模式" - echo "視頻介紹: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "將會生成密鑰對,更安全的方式SSH登錄" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" - echo "1. 生成新密鑰 2. 導入已有密鑰 3. 查看本機密鑰" + echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" host_dns + read -e -p "请输入你的选择: " host_dns case $host_dns in 1) - send_stats "生成新密鑰" + send_stats "生成新密钥" add_sshkey break_end ;; 2) - send_stats "導入已有公鑰" + send_stats "导入已有公钥" import_sshkey break_end ;; 3) - send_stats "查看本機密鑰" + send_stats "查看本机密钥" echo "------------------------" - echo "公鑰信息" + echo "公钥信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私鑰信息" + echo "私钥信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -12850,18 +13119,18 @@ EOF 25) root_use - send_stats "電報預警" - echo "TG-bot監控預警功能" - echo "視頻介紹: https://youtu.be/vLL-eb3Z_TY" + send_stats "电报预警" + echo "TG-bot监控预警功能" + echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要配置tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬盤,流量,SSH登錄的實時監控預警" - echo "到達閾值後會向用戶發預警消息" - echo -e "${gl_hui}-關於流量,重啟服務器將重新計算-${gl_bai}" - read -e -p "確定繼續嗎? (Y/N):" choice + echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" + echo "到达阈值后会向用户发预警消息" + echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) - send_stats "電報預警啟用" + send_stats "电报预警启用" cd ~ install nano tmux bc jq check_crontab_installed @@ -12894,21 +13163,21 @@ EOF source ~/.profile clear - echo "TG-bot預警系統已啟動" - echo -e "${gl_hui}你還可以將root目錄中的TG-check-notify.sh預警文件放到其他機器上直接使用!${gl_bai}" + echo "TG-bot预警系统已启动" + echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" ;; [Nn]) echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "修復SSH高危漏洞" + 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 @@ -12952,7 +13221,7 @@ EOF ;; 37) clear - send_stats "命令行歷史記錄" + 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; } @@ -12976,60 +13245,60 @@ EOF 41) clear send_stats "留言板" - echo "科技lion留言板已遷移至官方社區!請在官方社區進行留言噢!" + echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一條龍調優" - echo "一條龍系統調優" + 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. Linux系統內核參數優化切換到${gl_huang}均衡優化模式${gl_bai}" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "確定一鍵保養嗎? (Y/N):" choice + read -e -p "确定一键保养吗?(Y/N): " choice case "$choice" in [Yy]) clear - send_stats "一條龍調優啟動" + send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系統到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系統垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13046,25 +13315,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自動優化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系統內核參數優化" - echo -e "${gl_lv}一條龍系統調優已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系统内核参数优化" + echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; [Nn]) echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac @@ -13072,7 +13341,7 @@ EOF 99) clear - send_stats "重啟系統" + send_stats "重启系统" server_reboot ;; 100) @@ -13088,32 +13357,32 @@ EOF local status_message="无法确定的状态" fi - echo "隱私與安全" - echo "腳本將收集用戶使用功能的數據,優化腳本體驗,製作更多好玩好用的功能" - echo "將收集腳本版本號,使用的時間,系統版本,CPU架構,機器所屬國家和使用的功能的名稱," + echo "隐私与安全" + echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" + echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," echo "------------------------------------------------" - echo -e "當前狀態:$status_message" + echo -e "当前状态: $status_message" echo "--------------------" - echo "1. 開啟採集" - echo "2. 關閉採集" + echo "1. 开启采集" + echo "2. 关闭采集" echo "--------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "--------------------" - read -e -p "請輸入你的選擇:" sub_choice + 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 "隱私與安全已開啟採集" + 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 "隱私與安全已關閉採集" + echo "已关闭采集" + send_stats "隐私与安全已关闭采集" ;; *) break @@ -13129,11 +13398,11 @@ EOF 102) clear - send_stats "卸載科技lion腳本" - echo "卸載科技lion腳本" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "將徹底卸載kejilion腳本,不影響你其他功能" - read -e -p "確定繼續嗎? (Y/N):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13141,7 +13410,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "腳本已卸載,再見!" + echo "脚本已卸载,再见!" break_end clear exit @@ -13150,7 +13419,7 @@ EOF echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -13160,7 +13429,7 @@ EOF ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -13183,182 +13452,182 @@ linux_file() { clear echo "文件管理器" echo "------------------------" - echo "當前路徑" + echo "当前路径" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 進入目錄 2. 創建目錄 3. 修改目錄權限 4. 重命名目錄" - echo "5. 刪除目錄 6. 返回上一級選單目錄" + echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" + echo "5. 删除目录 6. 返回上一级选单目录" echo "------------------------" - echo "11. 創建文件 12. 編輯文件 13. 修改文件權限 14. 重命名文件" - echo "15. 刪除文件" + echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" + echo "15. 删除文件" echo "------------------------" - echo "21. 壓縮文件目錄 22. 解壓文件目錄 23. 移動文件目錄 24. 複製文件目錄" - echo "25. 傳文件至其他服務器" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" + echo "25. 传文件至其他服务器" echo "------------------------" - echo "0. 返回上一級選單" + echo "0. 返回上一级选单" echo "------------------------" - read -e -p "請輸入你的選擇:" Limiting + read -e -p "请输入你的选择: " Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "請輸入目錄名:" dirname - cd "$dirname" 2>/dev/null || echo "無法進入目錄" - send_stats "進入目錄" + read -e -p "请输入目录名: " dirname + cd "$dirname" 2>/dev/null || echo "无法进入目录" + send_stats "进入目录" ;; 2) # 创建目录 - read -e -p "請輸入要創建的目錄名:" dirname - mkdir -p "$dirname" && echo "目錄已創建" || echo "創建失敗" - send_stats "創建目錄" + 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 "修改目錄權限" + 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 "重命名目錄" + 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 "刪除目錄" + read -e -p "请输入要删除的目录名: " dirname + rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" + send_stats "删除目录" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一級選單目錄" + send_stats "返回上一级选单目录" ;; 11) # 创建文件 - read -e -p "請輸入要創建的文件名:" filename - touch "$filename" && echo "文件已創建" || echo "創建失敗" - send_stats "創建文件" + read -e -p "请输入要创建的文件名: " filename + touch "$filename" && echo "文件已创建" || echo "创建失败" + send_stats "创建文件" ;; 12) # 编辑文件 - read -e -p "請輸入要編輯的文件名:" filename + read -e -p "请输入要编辑的文件名: " filename install nano nano "$filename" - send_stats "編輯文件" + send_stats "编辑文件" ;; 13) # 修改文件权限 - read -e -p "請輸入文件名:" filename - read -e -p "請輸入權限 (如 755):" perm - chmod "$perm" "$filename" && echo "權限已修改" || echo "修改失敗" - send_stats "修改文件權限" + 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 "重命名失敗" + 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 "刪除文件" + read -e -p "请输入要删除的文件名: " filename + rm -f "$filename" && echo "文件已删除" || echo "删除失败" + send_stats "删除文件" ;; 21) # 压缩文件/目录 - read -e -p "請輸入要壓縮的文件/目錄名:" name + read -e -p "请输入要压缩的文件/目录名: " name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已壓縮為$name.tar.gz" || echo "壓縮失敗" - send_stats "壓縮文件/目錄" + tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" + send_stats "压缩文件/目录" ;; 22) # 解压文件/目录 - read -e -p "請輸入要解壓的文件名 (.tar.gz):" filename + read -e -p "请输入要解压的文件名 (.tar.gz): " filename install tar - tar -xzvf "$filename" && echo "已解壓$filename" || echo "解壓失敗" - send_stats "解壓文件/目錄" + tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" + send_stats "解压文件/目录" ;; 23) # 移动文件或目录 - read -e -p "請輸入要移動的文件或目錄路徑:" src_path + read -e -p "请输入要移动的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "錯誤: 文件或目錄不存在。" - send_stats "移動文件或目錄失敗: 文件或目錄不存在" + echo "错误: 文件或目录不存在。" + send_stats "移动文件或目录失败: 文件或目录不存在" continue fi - read -e -p "請輸入目標路徑 (包括新文件名或目錄名):" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "錯誤: 請輸入目標路徑。" - send_stats "移動文件或目錄失敗: 目標路徑未指定" + echo "错误: 请输入目标路径。" + send_stats "移动文件或目录失败: 目标路径未指定" continue fi - mv "$src_path" "$dest_path" && echo "文件或目錄已移動到$dest_path" || echo "移動文件或目錄失敗" - send_stats "移動文件或目錄" + mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" + send_stats "移动文件或目录" ;; 24) # 复制文件目录 - read -e -p "請輸入要復制的文件或目錄路徑:" src_path + read -e -p "请输入要复制的文件或目录路径: " src_path if [ ! -e "$src_path" ]; then - echo "錯誤: 文件或目錄不存在。" - send_stats "複製文件或目錄失敗: 文件或目錄不存在" + echo "错误: 文件或目录不存在。" + send_stats "复制文件或目录失败: 文件或目录不存在" continue fi - read -e -p "請輸入目標路徑 (包括新文件名或目錄名):" dest_path + read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path if [ -z "$dest_path" ]; then - echo "錯誤: 請輸入目標路徑。" - send_stats "複製文件或目錄失敗: 目標路徑未指定" + echo "错误: 请输入目标路径。" + send_stats "复制文件或目录失败: 目标路径未指定" continue fi - # 使用 -r 選項以遞歸方式複制目錄 - cp -r "$src_path" "$dest_path" && echo "文件或目錄已復製到$dest_path" || echo "複製文件或目錄失敗" - send_stats "複製文件或目錄" + # 使用 -r 选项以递归方式复制目录 + cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" + send_stats "复制文件或目录" ;; 25) # 传送文件至远端服务器 - read -e -p "請輸入要傳送的文件路徑:" file_to_transfer + read -e -p "请输入要传送的文件路径: " file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "錯誤: 文件不存在。" - send_stats "傳送文件失敗: 文件不存在" + echo "错误: 文件不存在。" + send_stats "传送文件失败: 文件不存在" continue fi - read -e -p "請輸入遠端服務器IP:" remote_ip + read -e -p "请输入远端服务器IP: " remote_ip if [ -z "$remote_ip" ]; then - echo "錯誤: 請輸入遠端服務器IP。" - send_stats "傳送文件失敗: 未輸入遠端服務器IP" + echo "错误: 请输入远端服务器IP。" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi - read -e -p "請輸入遠端服務器用戶名 (默認root):" remote_user + read -e -p "请输入远端服务器用户名 (默认root): " remote_user remote_user=${remote_user:-root} - read -e -p "請輸入遠端服務器密碼:" -s remote_password + read -e -p "请输入远端服务器密码: " -s remote_password echo if [ -z "$remote_password" ]; then - echo "錯誤: 請輸入遠端服務器密碼。" - send_stats "傳送文件失敗: 未輸入遠端服務器密碼" + echo "错误: 请输入远端服务器密码。" + send_stats "传送文件失败: 未输入远端服务器密码" continue fi - read -e -p "請輸入登錄端口 (默認22):" remote_port + 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传输文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}腳本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "腳本已經最新$sh_v_new" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "脚本已经最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13656,15 +13925,15 @@ while true; do (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 "開啟腳本自動更新" + 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 "關閉腳本自動更新" + echo -e "${gl_lv}自动更新已关闭${gl_bai}" + send_stats "关闭脚本自动更新" break_end ;; *) @@ -13686,37 +13955,37 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion腳本工具箱 v$sh_v" -echo -e "命令行輸入${gl_huang}k${gl_kjlan}可快速啟動腳本${gl_bai}" +echo -e "科技lion脚本工具箱 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}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}Docker管理" echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}測試腳本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云腳本合集" +echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" 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}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}幻獸帕魯開服腳本" +echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "請輸入你的選擇:" choice +read -e -p "请输入你的选择: " choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系統更新" ; linux_update ;; - 3) clear ; send_stats "系統清理" ; linux_clean ;; + 2) clear ; send_stats "系统更新" ; linux_update ;; + 3) clear ; send_stats "系统清理" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; 6) linux_docker ;; @@ -13731,13 +14000,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻獸帕魯開服腳本" ; cd ~ + p) send_stats "幻兽帕鲁开服脚本" ; 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 "無效的輸入!" ;; + *) echo "无效的输入!" ;; esac break_end done @@ -13745,68 +14014,68 @@ done k_info() { -send_stats "k命令參考用例" +send_stats "k命令参考用例" echo "-------------------" -echo "視頻介紹: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令參考用例:" -echo "啟動腳本 k" -echo "安裝軟件包 k install nano wget | k add nano wget | k 安裝 nano wget" -echo "卸載軟件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸載 nano wget" -echo "更新系統 k update | k 更新" -echo "清理系統垃圾 k clean | k 清理" -echo "重裝系統面板 k dd | k 重裝" +echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令参考用例:" +echo "启动脚本 k" +echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" +echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" +echo "更新系统 k update | k 更新" +echo "清理系统垃圾 k clean | k 清理" +echo "重装系统面板 k dd | k 重装" echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "內核調優面板 k nhyh | k 內核優化" -echo "設置虛擬內存 k swap 2048" -echo "設置虛擬時區 k time Asia/Shanghai | k 時區 Asia/Shanghai" -echo "系統回收站 k trash | k hsz | k 回收站" -echo "系統備份功能 k backup | k bf | k 備份" -echo "ssh遠程連接工具 k ssh | k 遠程連接" -echo "rsync遠程同步工具 k rsync | k 遠程同步" -echo "硬盤管理工具 k disk | k 硬盤管理" -echo "內網穿透(服務端) k frps" -echo "內網穿透(客戶端) k frpc" -echo "軟件啟動 k start sshd | k 啟動 sshd" -echo "軟件停止 k stop sshd | k 停止 sshd" -echo "軟件重啟 k restart sshd | k 重啟 sshd" -echo "軟件狀態查看 k status sshd | k 狀態 sshd" -echo "軟件開機啟動 k enable docker | k autostart docke | k 開機啟動 docker" -echo "域名證書申請 k ssl" -echo "域名證書到期查詢 k ssl ps" -echo "docker環境安裝 k docker install |k docker 安裝" +echo "内核调优面板 k nhyh | k 内核优化" +echo "设置虚拟内存 k swap 2048" +echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" +echo "系统回收站 k trash | k hsz | k 回收站" +echo "系统备份功能 k backup | k bf | k 备份" +echo "ssh远程连接工具 k ssh | k 远程连接" +echo "rsync远程同步工具 k rsync | k 远程同步" +echo "硬盘管理工具 k disk | k 硬盘管理" +echo "内网穿透(服务端) k frps" +echo "内网穿透(客户端) k frpc" +echo "软件启动 k start sshd | k 启动 sshd " +echo "软件停止 k stop sshd | k 停止 sshd " +echo "软件重启 k restart sshd | k 重启 sshd " +echo "软件状态查看 k status sshd | k 状态 sshd " +echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " +echo "域名证书申请 k ssl" +echo "域名证书到期查询 k ssl ps" +echo "docker环境安装 k docker install |k docker 安装" echo "docker容器管理 k docker ps |k docker 容器" -echo "docker鏡像管理 k docker img |k docker 鏡像" -echo "LDNMP站點管理 k web" -echo "LDNMP緩存清理 k web cache" -echo "安裝WordPress k wp |k wordpress |k wp xxx.com" -echo "安裝反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安裝負載均衡 k loadbalance |k 負載均衡" -echo "防火牆面板 k fhq |k 防火牆" -echo "開放端口 k dkdk 8080 |k 打開端口 8080" -echo "關閉端口 k gbdk 7800 |k 關閉端口 7800" +echo "docker镜像管理 k docker img |k docker 镜像" +echo "LDNMP站点管理 k web" +echo "LDNMP缓存清理 k web cache" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" +echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "防火墙面板 k fhq |k 防火墙" +echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夾 k fav | k 命令收藏夾" -echo "應用市場管理 k app" -echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # 如果沒有參數,運行交互式邏輯 + # 如果没有参数,运行交互式逻辑 kejilion_sh else - # 如果有參數,執行相應函數 + # 如果有参数,执行相应函数 case $1 in install|add|安装) shift - send_stats "安裝軟件" + send_stats "安装软件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸載軟件" + send_stats "卸载软件" remove "$@" ;; update|更新) @@ -13840,7 +14109,7 @@ else rsync_run) shift - send_stats "定時rsync同步" + send_stats "定时rsync同步" run_task "$@" ;; @@ -13859,7 +14128,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口訪問該服務" + echo "已阻止IP+端口访问该服务" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -13872,13 +14141,13 @@ else swap) shift - send_stats "快速設置虛擬內存" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "快速設置時區" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -13926,42 +14195,42 @@ else status|状态) shift - send_stats "軟件狀態查看" + send_stats "软件状态查看" status "$@" ;; start|启动) shift - send_stats "軟件啟動" + send_stats "软件启动" start "$@" ;; stop|停止) shift - send_stats "軟件暫停" + send_stats "软件暂停" stop "$@" ;; restart|重启) shift - send_stats "軟件重啟" + send_stats "软件重启" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "軟件開機自啟" + send_stats "软件开机自启" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看證書狀態" + send_stats "查看证书状态" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申請證書" + send_stats "快速申请证书" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申請證書" + send_stats "快速申请证书" else k_info fi @@ -13971,7 +14240,7 @@ else shift case $1 in install|安装) - send_stats "快捷安裝docker" + send_stats "快捷安装docker" install_docker ;; ps|容器) @@ -13979,7 +14248,7 @@ else docker_ps ;; img|镜像) - send_stats "快捷鏡像管理" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14006,7 +14275,7 @@ else app) shift - send_stats "應用$@" + send_stats "应用$@" linux_panel "$@" ;; @@ -14016,4 +14285,3 @@ else ;; esac fi - From c8de270df5fd1544325962f48c5da510819e25d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 28 Aug 2025 07:29:49 +0800 Subject: [PATCH 133/553] Update kejilion.sh --- cn/kejilion.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index bf1361ecf..dc0846216 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -352,10 +352,11 @@ kejilion() { stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) - install lsof + if [ -n "$containers" ]; then docker stop $containers else + install lsof for pid in $(lsof -t -i:$port); do kill -9 $pid done @@ -11792,8 +11793,8 @@ while true; do COUNT=${COUNT:-5} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - - stop_containers_or_kill_process 51820 &>/dev/null + + ip link delete wg0 &>/dev/null ip_address docker run -d \ From 0dd466a8dd4f159cf7f433d89edae12ced10e0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 28 Aug 2025 07:30:22 +0800 Subject: [PATCH 134/553] Refactor process termination in kejilion.sh --- kejilion.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index f70cab559..e8af4649c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -352,10 +352,11 @@ kejilion() { stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) - install lsof + if [ -n "$containers" ]; then docker stop $containers else + install lsof for pid in $(lsof -t -i:$port); do kill -9 $pid done @@ -11792,8 +11793,8 @@ while true; do COUNT=${COUNT:-5} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - - stop_containers_or_kill_process 51820 &>/dev/null + + ip link delete wg0 &>/dev/null ip_address docker run -d \ From d357622eeb82b10cfe185e94dbbd304dd71cc665 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 28 Aug 2025 01:50:11 +0000 Subject: [PATCH 135/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-28=2001:50:11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 4729 ++++++++++++++++++++++++------------------------ jp/kejilion.sh | 4717 +++++++++++++++++++++++------------------------ kr/kejilion.sh | 4729 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 4505 ++++++++++++++++++++++----------------------- 4 files changed, 9342 insertions(+), 9338 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index cab3eb64a..1b54f388d 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 定义一个函数来执行命令 +# Define a function to execute commands run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 -# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 +# Functions that collect function buried point information, record the current script version number, usage time, system version, CPU architecture, the country of the machine and the function name used by the user. They absolutely do not involve any sensitive information, please rest assured! Please believe me! +# Why do we need to design this function? The purpose is to better understand the functions that users like to use, and further optimize the functions to launch more functions that meet user needs. +# For the full text, you can search for the send_stats function call location, transparent and open source, and you can refuse to use it if you have any concerns. @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用户同意条款 +# Prompt the user to agree to the terms UserLicenseAgreement() { clear - echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" - echo "首次使用脚本,请先阅读并同意用户许可协议。" - echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}Welcome to the Tech lion script toolbox${gl_bai}" + echo "For the first time using the script, please read and agree to the user license agreement." + echo "User License Agreement: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上条款?(y/n): " user_input + read -r -p "Do you agree to the above terms? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "许可同意" + send_stats "License consent" 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 "许可拒绝" + send_stats "Rejection of permission" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "Package parameters are not provided!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安装 $package...${gl_bai}" + echo -e "${gl_huang}Installing$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "未知的包管理器!" + echo "Unknown package manager!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "当前可用空间: $((available_space_mb/1024))G" - echo "最小需求空间: ${required_gb}G" - echo "无法继续安装,请清理磁盘空间后重试。" - send_stats "磁盘空间不足" + echo -e "${gl_huang}hint:${gl_bai}Insufficient disk space!" + echo "Current available space: $((available_space_mb/1024))G" + echo "Minimum demand space:${required_gb}G" + echo "The installation cannot be continued. Please clean the disk space and try again." + send_stats "Insufficient disk space" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "Package parameters are not provided!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸载 $package...${gl_bai}" + echo -e "${gl_huang}Uninstalling$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf remove -y "$package" elif command -v yum &>/dev/null; then @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "未知的包管理器!" + echo "Unknown package manager!" return 1 fi done } -# 通用 systemctl 函数,适用于各种发行版 +# Universal systemctl function, suitable for various distributions systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重启服务 +# Restart the service restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1 服务已重启。" + echo "$1The service has been restarted." else - echo "错误:重启 $1 服务失败。" + echo "Error: Restart$1Service failed." fi } -# 启动服务 +# Start the service start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1 服务已启动。" + echo "$1The service has been started." else - echo "错误:启动 $1 服务失败。" + echo "Error: Start$1Service failed." fi } -# 停止服务 +# Stop service stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1 服务已停止。" + echo "$1Service has been stopped." else - echo "错误:停止 $1 服务失败。" + echo "Error: Stop$1Service failed." fi } -# 查看服务状态 +# Check service status status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1 服务状态已显示。" + echo "$1The service status is displayed." else - echo "错误:无法显示 $1 服务状态。" + echo "Error: Unable to display$1Service status." fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME 已设置为开机自启。" + echo "$SERVICE_NAMESet to power on." } break_end() { - echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意键继续..." + echo -e "${gl_lv}Operation completed${gl_bai}" + echo "Press any key to continue..." read -n 1 -s -r -p "" echo "" clear @@ -352,10 +352,11 @@ kejilion() { stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) - install lsof + if [ -n "$containers" ]; then docker stop $containers else + install lsof for pid in $(lsof -t -i:$port); do kill -9 $pid done @@ -424,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}Installing docker environment...${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 @@ -499,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker容器管理" - echo "Docker容器列表" + send_stats "Docker container management" + echo "Docker container list" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "容器操作" + echo "Container operation" echo "------------------------" - echo "1. 创建新的容器" + echo "1. Create a new container" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" - echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "2. Start the specified container 6. Start all containers" + echo "3. Stop the specified container 7. Stop all containers" + echo "4. Delete the specified container 8. Delete all containers" + echo "5. Restart the specified container 9. Restart all containers" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11. Enter the specified container 12. View the container log" + echo "13. View container network 14. View container occupancy" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15. Turn on container port access 16. Turn off container port access" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + send_stats "Create a new container" + read -e -p "Please enter the creation command:" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "Start the specified container" + read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername docker start $dockername ;; 3) - send_stats "停止指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "Stop the specified container" + read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "Delete the specified container" + read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "Restart the specified container" + read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "Start all containers" docker start $(docker ps -a -q) ;; 7) - send_stats "停止所有容器" + send_stats "Stop all containers" docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "Delete all containers" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -564,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "Restart all containers" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "Enter the container" + read -e -p "Please enter the container name:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "View container log" + read -e -p "Please enter the container name:" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "View container network" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -603,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "View container occupancy" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "Allow container port access" + read -e -p "Please enter the container name:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -619,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "Block container port access" + read -e -p "Please enter the container name:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -639,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "Docker image management" + echo "Docker image list" docker image ls echo "" - echo "镜像操作" + echo "Mirror operation" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1. Get the specified image 3. Delete the specified image" + echo "2. Update the specified image 4. Delete all images" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "Pull the mirror" + read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}Getting the image:$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "Update the image" + read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}Updated image:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "Delete the mirror" + read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "Delete all images" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -685,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; @@ -753,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "Unsupported distributions:$ID" return ;; esac else - echo "无法确定操作系统。" + echo "The operating system cannot be determined." return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}crontab is installed and the cron service is running.${gl_bai}" } @@ -774,27 +775,27 @@ docker_ipv6_on() { local CONFIG_FILE="/etc/docker/daemon.json" local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}' - # 检查配置文件是否存在,如果不存在则创建文件并写入默认设置 + # Check if the configuration file exists, create the file and write the default settings if it does not exist if [ ! -f "$CONFIG_FILE" ]; then echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE" restart docker else - # 使用jq处理配置文件的更新 + # Use jq to handle updates of configuration files local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # Check whether the current configuration already has ipv6 settings local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # Update configuration and enable 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 - # 对比原始配置与新配置 + # Comparing original configuration with new configuration if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then - echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 access is currently enabled${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -809,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # Check if the configuration file exists if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}配置文件不存在${gl_bai}" + echo -e "${gl_hong}The configuration file does not exist${gl_bai}" return fi - # 读取当前配置 + # Read the current configuration local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 使用jq处理配置文件的更新 + # Use jq to handle updates of configuration files local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # Check the current ipv6 status local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # Comparing original configuration with new configuration if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 access is currently closed${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 access has been successfully closed${gl_bai}" fi } @@ -869,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "Please provide at least one port number" return 1 fi install iptables for port in "${ports[@]}"; do - # 删除已存在的关闭规则 + # Delete existing closing rules iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null - # 添加打开规则 + # Add Open Rules 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" + echo "The port has been opened$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "The port has been opened" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "Please provide at least one port number" return 1 fi install iptables for port in "${ports[@]}"; do - # 删除已存在的打开规则 + # Delete existing open rules iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # 添加关闭规则 + # Add a close rule 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" + echo "Port closed$port" fi done - # 删除已存在的规则(如果有) + # Delete existing rules (if any) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # Insert new rules to first iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "Port closed" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "Please provide at least one IP address or IP segment" return 1 fi install iptables for ip in "${ips[@]}"; do - # 删除已存在的阻止规则 + # Delete existing blocking rules iptables -D INPUT -s $ip -j DROP 2>/dev/null - # 添加允许规则 + # Add allow rules if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "已放行IP $ip" + echo "Released IP$ip" fi done save_iptables_rules - send_stats "已放行IP" + send_stats "Released IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "Please provide at least one IP address or IP segment" return 1 fi install iptables for ip in "${ips[@]}"; do - # 删除已存在的允许规则 + # Delete existing allow rules iptables -D INPUT -s $ip -j ACCEPT 2>/dev/null - # 添加阻止规则 + # Add blocking rules if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then iptables -I INPUT 1 -s $ip -j DROP - echo "已阻止IP $ip" + echo "IP blocked$ip" fi done save_iptables_rules - send_stats "已阻止IP" + send_stats "IP blocked" } @@ -989,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # Turn on defense DDoS 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 @@ -999,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "Turn on DDoS defense" } -# 关闭DDoS防御 +# Turn off DDoS Defense disable_ddos_defense() { - # 关闭防御 DDoS + # Turn off defense DDoS 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 @@ -1014,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "Turn off DDoS Defense" } -# 管理国家IP规则的函数 +# Functions that manage national IP rules manage_country_rules() { local action="$1" local country_code="$2" @@ -1032,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # Create if ipset does not exist if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # Download IP area file if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "Error: Download$country_codeIP zone file failed" exit 1 fi - # 将 IP 添加到 ipset + # Add IP to ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 使用 iptables 阻止 IP + # Block IP with 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 地址" + echo "Blocked successfully$country_codeIP address" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # Create an ipset for allowed countries (if not exist) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # Download IP area file if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "Error: Download$country_codeIP zone file failed" exit 1 fi - # 删除现有的国家规则 + # Delete existing national rules 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 + # Add IP to ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # Only IPs in designated countries are allowed 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 地址" + echo "Successfully only allowed$country_codeIP address" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # Delete the iptables rules for the country 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 + # Destroy ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "Successfully lifted$country_codeIP address restrictions" ;; *) @@ -1115,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "Advanced Firewall Management" + send_stats "Advanced Firewall Management" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "Firewall Management" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1. Open the specified port 2. Close the specified port" + echo "3. Open all ports 4. Close all ports" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" - echo "7. 清除指定IP" + echo "5. IP whitelist 6. IP blacklist" + echo "7. Clear the specified IP" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. Allow PING 12. Disable PING" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13. Start DDOS Defense 14. Turn off DDOS Defense" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15. Block specified country IP 16. Only specified country IPs are allowed" + echo "17. Release IP restrictions in designated countries" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "Please enter the open port number:" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "Open a specified port" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "Please enter the closed port number:" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "Close the specified port" ;; 3) - # 开放所有端口 + # Open all ports current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1163,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "Open all ports" ;; 4) - # 关闭所有端口 + # Close all ports current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1179,40 +1180,40 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "Close all ports" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IP whitelist + read -e -p "Please enter the IP or IP segment to release:" o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IP blacklist + read -e -p "Please enter the blocked IP or IP segment:" c_ip block_ip $c_ip ;; 7) - # 清除指定 IP - read -e -p "请输入清除的IP: " d_ip + # Clear the specified IP + read -e -p "Please enter the cleared 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" + send_stats "Clear the specified IP" ;; 11) - # 允许 PING + # Allow PING 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 "允许PING" + send_stats "Allow PING" ;; 12) - # 禁用 PING + # Disable PING 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 "禁用PING" + send_stats "Disable PING" ;; 13) enable_ddos_defense @@ -1222,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "Please enter the blocked country code (such as CN, US, JP):" country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "Allowed countries$country_codeIP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "Please enter the allowed country code (such as CN, US, JP):" country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "Block the country$country_codeIP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "Please enter the cleared country code (such as CN, US, JP):" country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "Clear the country$country_codeIP" ;; *) @@ -1256,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # Get all swap partitions in the current system local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # Iterate over and delete all swap partitions for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # Make sure /swapfile is no longer used swapoff /swapfile - # 删除旧的 /swapfile + # Delete the old /swapfile rm -f /swapfile - # 创建新的 swap 分区 + # Create a new swap partition fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1287,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "The virtual memory size has been resized to${gl_huang}${new_swap}${gl_bai}M" } @@ -1297,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# Determine whether virtual memory needs to be created [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1313,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # Get nginx version 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版本 + # Get the mysql version 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版本 + # Get the php version 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版本 + # Get the redis version 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}" @@ -1340,7 +1341,7 @@ ldnmp_v() { install_ldnmp_conf() { - # 创建必要的目录和文件 + # Create necessary directories and files 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 @@ -1349,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # Download the docker-compose.yml file and replace it 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 文件中进行替换 + # Replace in docker-compose.yml file 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 @@ -1398,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP environment has been installed" echo "------------------------" ldnmp_v @@ -1415,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "Renewal task has been updated" } @@ -1452,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yumingPublic key information${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yumingPrivate key information${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}Certificate storage path${gl_bai}" + echo "Public key: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "Private key: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1469,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}Quickly apply for an SSL certificate, automatically renew your signature before expiration${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1485,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}The expiration of the applied certificate${gl_bai}" + echo "Site information Certificate expiration time" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1525,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + send_stats "Successful application for domain name certificate" 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + send_stats "Application for domain name certificate failed" + echo -e "${gl_hong}Notice:${gl_bai}The certificate application failed. Please check the following possible reasons and try again:" + echo -e "1. Domain name spelling error ➠ Please check whether the domain name is entered correctly" + echo -e "2. DNS resolution problem ➠ Confirm that the domain name has been correctly resolved to this server IP" + echo -e "3. Network configuration issues ➠ If you use Cloudflare Warp and other virtual networks, please temporarily shut down" + echo -e "4. Firewall restrictions ➠ Check whether port 80/443 is open to ensure verification is accessible" + echo -e "5. The number of applications exceeds the limit ➠ Let's Encrypt has a weekly limit (5 times/domain name/week)" + echo -e "6. Domestic registration restrictions ➠ Please confirm whether the domain name is registered in mainland China" break_end clear - echo "请再次尝试部署 $webname" + echo "Please try deploying again$webname" add_yuming install_ssltls certs_status @@ -1548,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "Domain name reuse" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1557,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -1622,8 +1623,8 @@ nginx_upgrade() { 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}完成" + send_stats "renew$ldnmp_pods" + echo "renew${ldnmp_pods}Finish" } @@ -1642,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "Login information:" + echo "username:$dbuse" + echo "password:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "start up$ldnmp_pods" } @@ -1656,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # Check if the configuration file exists if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # Read API_TOKEN and zone_id from configuration files read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # Convert ZONE_IDS to an array ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # Prompt the user whether to clean the cache + read -e -p "Need to clean Cloudflare's cache? (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 + echo "CF information is saved in$CONFIG_FILE, you can modify CF information later" + read -e -p "Please enter your API_TOKEN:" API_TOKEN + read -e -p "Please enter your CF username:" EMAIL + read -e -p "Please enter zone_id (multiple separated by spaces):" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" fi fi - # 循环遍历每个 zone_id 并执行清除缓存命令 + # Loop through each zone_id and execute the clear cache command for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + echo "Clearing cache for 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" \ @@ -1686,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "The cache clear request has been sent." } web_cache() { - send_stats "清理站点缓存" + send_stats "Clean up site cache" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1702,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "Delete site data" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "To delete site data, please enter your domain name (multiple domain names are separated by spaces):" yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + echo "Deleting the domain name:$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 - # 将域名转换为数据库名 + # Convert domain name to database name 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" + # Check whether the database exists before deleting it to avoid errors + echo "Deleting the database:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1739,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # Decide to turn on or off WAF according to mode parameters if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # Turn on WAF: Remove comments 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:加上注释 + # Close WAF: Add Comments 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' 或 'off'" + echo "Invalid parameter: Use 'on' or 'off'" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Check nginx images and handle them according to the situation if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1802,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # Delete old definition sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # Insert a new definition before the line with "Happy publishing" awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1829,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # Delete old definition sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # Insert a new definition before the line with "Happy publishing" awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1857,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # Turn on Brotli: Remove comments sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1871,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # Close Brotli: Add comments sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1887,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "Invalid parameter: Use 'on' or 'off'" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Check nginx images and handle them according to the situation if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1913,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # Turn on Zstd: Remove comments sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1928,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # Close Zstd: Add comments sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1944,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "Invalid parameter: Use 'on' or 'off'" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Check nginx images and handle them according to the situation if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1975,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "Invalid parameter: Use 'on' or 'off'" return 1 fi @@ -1989,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP environment defense" while true; do check_waf_status check_cf_mode @@ -2003,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "Server website defense program${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1. Install the defense program" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. View SSH interception record 6. View website interception record" + echo "7. View the list of defense rules 8. View real-time monitoring of logs" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11. Configure intercept parameters 12. Clear all blocked IPs" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21. cloudflare mode 22. High load on 5 seconds shield" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31. Turn on WAF 32. Turn off WAF" + echo "33. Turn on DDOS Defense 34. Turn off DDOS Defense" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. Uninstall the defense program" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2081,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban defense program has been uninstalled" ;; 11) @@ -2096,11 +2097,11 @@ web_security() { ;; 21) - send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "cloudflare mode" + echo "Go to the upper right corner of the cf background, select the API token on the left, and obtain the Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "Enter CF account number:" cfuser + read -e -p "Enter the Global API Key for 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 @@ -2115,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "Cloudflare mode is configured to view intercept records in the cf background, site-security-events" ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "High load on 5 seconds shield" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "Get CF parameters:" + echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" + echo -e "Go to the bottom right of the cf background domain name summary page to get${gl_huang}Region ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "Enter CF account number:" cfuser + read -e -p "Enter the Global API Key for CF:" cftoken + read -e -p "Enter the region ID of the domain name in CF:" cfzonID cd ~ install jq bc @@ -2146,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "High load automatic shield opening script has been added" else - echo "自动开盾脚本已存在,无需添加" + echo "Automatic shield script already exists, no need to add it" fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "Site WAF is enabled" + send_stats "Site WAF is enabled" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "Site WAF has been closed" + send_stats "Site WAF has been closed" ;; 33) @@ -2188,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# Get the current worker_processes setting value current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# Set mode information according to value if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2207,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # Check whether zstd is enabled and not commented (the whole line starts with zstd on;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # Check if brotli is enabled and not commented if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # Check if gzip is enabled and not commented if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2237,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "Optimize LDNMP environment" + echo -e "Optimize LDNMP environment${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1. Standard mode 2. High performance mode (recommended 2H4G or above)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3. Turn on gzip compression 4. Turn off gzip compression" + echo "5. Turn on br compression 6. Turn off br compression" + echo "7. Turn on zstd compression 8. Turn off zstd compression" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "Site standard mode" - # nginx调优 + # nginx tuning 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调优 + # php tuning 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调优 + # php tuning 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 @@ -2275,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # mysql tuning 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 @@ -2287,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP environment has been set to standard mode" ;; 2) - send_stats "站点高性能模式" + send_stats "Site high performance mode" - # nginx调优 + # nginx tuning 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调优 + # php tuning 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调优 + # php tuning 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 @@ -2315,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # mysql tuning 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 @@ -2325,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP environment has been set to high performance mode" ;; 3) @@ -2385,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker="${gl_lv}${gl_bai} installed" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker="${gl_hui}${gl_bai} is not installed" # fi # } @@ -2395,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "Access address:" ip_address @@ -2433,31 +2434,31 @@ check_docker_image_update() { return fi - # 获取容器的创建时间和镜像名称 + # Get the container creation time and image name 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) - # 提取镜像仓库和标签 + # Extract mirror warehouses and tags local image_repo=${image_name%%:*} local image_tag=${image_name##*:} - # 默认标签为 latest + # The default label is latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # Add support for official images [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # Get image publishing time from 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) - # 验证获取的时间 + # Verify the time of acquisition 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) - # 比较时间戳 + # Compare timestamps if [[ $container_created_ts -lt $last_updated_ts ]]; then update_status="${gl_huang}发现新版本!${gl_bai}" else @@ -2476,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # Get the IP address of the container local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2486,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # Check and block all other IPs 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 + # Check and release the specified 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 + # Check and release the local network 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 + # Check and block all other IPs 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 + # Check and release the specified 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 + # Check and release the local network 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 @@ -2523,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ ports have been blocked from accessing the service" save_iptables_rules } @@ -2534,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # Get the IP address of the container local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2544,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # Clear rules that block all other IPs 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 的规则 + # Clear the rules for releasing the specified 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 的规则 + # Clear the rules for release local network 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 @@ -2563,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # Clear rules that block all other IPs 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 的规则 + # Clear the rules for releasing the specified 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 的规则 + # Clear the rules for release local network 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 @@ -2584,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ports have been allowed to access the service" save_iptables_rules } @@ -2598,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "Error: Please provide the port number and the IP that is allowed to access." + echo "Usage: block_host_port " return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # Denied all other IP access if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -j DROP fi - # 允许指定 IP 访问 + # Allow specified IP access 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 - # 允许本机访问 + # Allow local access 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 @@ -2625,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # Denied all other IP access if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi - # 允许指定 IP 访问 + # Allow specified IP access 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 - # 允许本机访问 + # Allow local access 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 - # 允许已建立和相关连接的流量 + # Allow traffic for established and related connections 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+端口访问该服务" + echo "IP+ ports have been blocked from accessing the service" save_iptables_rules } @@ -2657,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "Error: Please provide the port number and the IP that is allowed to access." + echo "Usage: clear_host_port_rules " return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # Clear rules that block all other IP access if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi - # 清除允许本机访问的规则 + # Clear rules that allow native access 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 访问的规则 + # Clear rules that allow specified IP access 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 访问的规则 + # Clear rules that block all other IP access if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi - # 清除允许本机访问的规则 + # Clear rules that allow native access 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 访问的规则 + # Clear rules that allow specified IP access 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+端口访问该服务" + echo "IP+ports have been allowed to access the service" save_iptables_rules } @@ -2726,7 +2727,7 @@ grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker docker_app() { -send_stats "${docker_name}管理" +send_stats "${docker_name}manage" while true; do clear @@ -2746,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. Add domain name access 6. Delete domain name access" + echo "7. Allow IP+ port access 8. Block IP+ port access" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2770,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_nameInstalled" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "Install$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2785,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_nameInstalled" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新$docker_name" + send_stats "renew$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2799,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "The app has been uninstalled" + send_stats "uninstall$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}Domain access settings" + send_stats "${docker_name}Domain access settings" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "Domain name format example.com does not come with https://" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "Allow IP access${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "Block IP access${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2859,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. Add domain name access 6. Delete domain name access" + echo "7. Allow IP+ port access 8. Block IP+ port access" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2894,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}Domain access settings" + send_stats "${docker_name}Domain access settings" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "Domain name format example.com does not come with https://" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "Allow IP access${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "Block IP access${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2994,17 +2995,17 @@ tmux_run_d() { local base_name="tmuxd" local tmuxd_ID=1 -# 检查会话是否存在的函数 +# Functions that check whether the session exists session_exists() { tmux has-session -t $1 2>/dev/null } -# 循环直到找到一个不存在的会话名称 +# Loop until a non-existent session name is found while session_exists "$base_name-$tmuxd_ID"; do local tmuxd_ID=$((tmuxd_ID + 1)) done -# 创建新的 tmux 会话 +# Create a new tmux session tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3079,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "Restarted" reboot ;; *) - echo "已取消" + echo "Canceled" ;; esac @@ -3126,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "Unable to install LDNMP environment again" + echo -e "${gl_huang}hint:${gl_bai}The website construction environment is installed. No need to install again!" break_end linux_ldnmp fi @@ -3137,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "Install LDNMP environment" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}The LDNMP environment is not installed, start installing the LDNMP environment...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3154,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "Install nginx environment" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}nginx is not installed, start installing nginx environment...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3168,8 +3169,8 @@ 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 "nginx has been installed" +echo -e "Current version:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3180,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "Please install the LDNMP environment first" ldnmp_install_all fi @@ -3190,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "Please install nginx environment first" nginx_install_all fi @@ -3201,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "Yours$webnameBuilt!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webnameThe installation information is as follows:" } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "Yours$webnameBuilt!" echo "https://$yuming" } @@ -3222,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3263,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "Please enter your anti-generation IP:" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "Please enter your anti-generation port:" port fi nginx_install_status install_ssltls @@ -3296,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "Please enter your multiple anti-generation IP+ ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3356,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMP site management" + echo "LDNMP environment" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "Site:${output}Certificate expiration time" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3374,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + echo -e "database:${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 "Site Directory" 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 -e "data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" echo "------------------------" echo "" - echo "操作" + echo "operate" echo "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" - echo "3. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1. Apply for/update the domain name certificate 2. Change the site domain name" + echo "3. Clean up the site cache 4. Create an associated site" + echo "5. View access log 6. View error log" + echo "7. Edit global configuration 8. Edit site configuration" + echo "9. Manage site database 10. View site analysis report" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20. Delete the specified site data" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + send_stats "Apply for a domain name certificate" + read -e -p "Please enter your domain name:" yuming install_certbot docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls @@ -3411,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "Change the site domain name" + echo -e "${gl_hong}Highly recommended:${gl_bai}First back up the entire site data and then change the site domain name!" + read -e -p "Please enter the old domain name:" oddyuming + read -e -p "Please enter the new domain name:" yuming install_certbot install_ssltls certs_status - # mysql替换 + # mysql replacement add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3437,7 +3438,7 @@ ldnmp_web_status() { done done - # 网站目录替换 + # Website directory replacement mv /home/web/html/$oddyuming /home/web/html/$yuming find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} + @@ -3458,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "Create an associated site" + echo -e "Associate a new domain name for the existing site for access" + read -e -p "Please enter the existing domain name:" oddyuming + read -e -p "Please enter the new domain name:" yuming install_certbot install_ssltls certs_status @@ -3475,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "View access log" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "View error log" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "Edit global configuration" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "Edit site configuration" + read -e -p "To edit the site configuration, please enter the domain name you want to edit:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3503,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "View site data" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3534,21 +3535,21 @@ fi install_panel() { -send_stats "${panelname}管理" +send_stats "${panelname}manage" while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}It is a popular and powerful operation and maintenance management panel nowadays." + echo "Official website introduction:$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1. Install 2. Management 3. Uninstall" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case $choice in 1) check_disk_space 1 @@ -3557,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安装" + send_stats "${panelname}Install" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}控制" + send_stats "${panelname}control" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}uninstall" ;; *) break @@ -3614,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "Install the frp server" + # Generate random ports and credentials local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3636,17 +3637,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # Output generated information ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + echo "Parameters required for client deployment" + echo "Service 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 "FRP panel information" + echo "FRP panel address: http://$ipv4_address:$dashboard_port" + echo "FRP panel username:$dashboard_user" + echo "FRP panel password:$dashboard_pwd" echo open_port 8055 8056 @@ -3656,9 +3657,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "Install the frp client" + read -e -p "Please enter the external network docking IP:" server_addr + read -e -p "Please enter the external network docking token:" token echo mkdir -p /home/frp @@ -3678,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "Add FRP intranet service" + # Prompt the user to enter the service name and forwarding information + read -e -p "Please enter the service name:" service_name + read -e -p "Please enter the forwarding type (tcp/udp) [Enter default tcp]:" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "Please enter the intranet IP [Enter default 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 + read -e -p "Please enter the intranet port:" local_port + read -e -p "Please enter the external network port:" remote_port - # 将用户输入写入配置文件 + # Write user input to configuration file cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3698,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # Output generated information + echo "Serve$service_nameAdded successfully to frpc.toml" docker restart frpc @@ -3710,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "Delete the frp intranet service" + # Prompt the user to enter the service name that needs to be deleted + read -e -p "Please enter the service name that needs to be deleted:" service_name + # Use sed to delete the service and its related configurations sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "Serve$service_nameDeleted successfully from frpc.toml" docker restart frpc @@ -3725,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # Print the header printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3746,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # If there is service information, print the current service before processing the new service if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3755,11 +3756,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # Update the current service name if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # Clear the previous value local_ip="" local_port="" remote_port="" @@ -3788,7 +3789,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # Print the information for the last service if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3801,17 +3802,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# Get the FRP server port get_frp_ports() { mapfile -t ports < <(ss -tulnape | grep frps | awk '{print $5}' | awk -F':' '{print $NF}' | sort -u) } -# 生成访问地址 +# Generate access address generate_access_urls() { - # 首先获取所有端口 + # Get all ports first get_frp_ports - # 检查是否有非 8055/8056 的端口 + # Check if there are ports other than 8055/8056 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3820,18 +3821,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # Show title and content only when there is a valid port if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRP service external access address:" - # 处理 IPv4 地址 + # Process IPv4 address for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # Process IPv6 addresses (if present) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3840,7 +3841,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # Handling HTTPS configuration for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3867,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRP server" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3875,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRP server$check_frp $update_status" + echo "Build an FRP intranet penetration service environment to expose devices without public IP to the Internet" + echo "Official website introduction: https://github.com/fatedier/frp/" + echo "Video teaching: 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 "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5. Domain name access for intranet service 6. Delete domain name access" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. Allow IP+ port access 8. Block IP+ port access" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00. Refresh service status 0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) install jq grep ss @@ -3901,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经安装完成" + echo "The FRP server has been installed" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3911,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经更新完成" + echo "The FRP server has been updated" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3922,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "The app has been uninstalled" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "Reverse intranet penetration service into domain name access" + send_stats "FRP access to external domain names" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "Please enter your intranet penetration service port:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "Domain name format example.com does not come with https://" web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + send_stats "Allow IP access" + read -e -p "Please enter the port to be released:" frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; 8) - send_stats "阻止IP访问" - echo "如果你已经反代域名访问了,可用此功能阻止IP+端口访问,这样更安全。" - read -e -p "请输入需要阻止的端口: " frps_port + send_stats "Block IP access" + echo "If you have accessed the anti-generation domain name, you can use this function to block IP+ port access, which is more secure." + read -e -p "Please enter the port you need to block:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "Refresh the FRP service status" + echo "FRP service status has been refreshed" ;; *) @@ -3965,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRP Client" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3973,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRP Client$check_frp $update_status" + echo "Docking with the server, after docking, you can create intranet penetration service to the Internet access" + echo "Official website introduction: https://github.com/fatedier/frp/" + echo "Video teaching: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3984,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4. Add external services 5. Delete external services 6. Configure services manually" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) install jq grep ss @@ -3998,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经安装完成" + echo "The FRP client has been installed" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4008,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经更新完成" + echo "The FRP client has been updated" ;; 3) @@ -4019,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "The app has been uninstalled" ;; 4) @@ -4065,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + send_stats "yt-dlp download tool" echo -e "yt-dlp $YTDLP_STATUS" - echo -e "yt-dlp 是一个功能强大的视频下载工具,支持 YouTube、Bilibili、Twitter 等数千站点。" - echo -e "官网地址:https://github.com/yt-dlp/yt-dlp" + echo -e "yt-dlp is a powerful video download tool that supports thousands of sites including YouTube, Bilibili, Twitter, etc." + echo -e "Official website address: https://github.com/yt-dlp/yt-dlp" echo "-------------------------" - echo "已下载视频列表:" - ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暂无)" + echo "Downloaded video list:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(None yet)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. Install 2. Update 3. Uninstall" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5. Single video download 6. Batch video download 7. Custom parameter download" + echo "8. Download as MP3 audio 9. Delete the video directory 10. Cookie management (under development)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "Please enter the option number:" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "Installing yt-dlp..." + echo "Installing yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安装完成。按任意键继续..." + echo "The installation is complete. Press any key to continue..." read ;; 2) - send_stats "正在更新 yt-dlp..." - echo "正在更新 yt-dlp..." + send_stats "Update yt-dlp..." + echo "Update yt-dlp..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意键继续..." + echo "Update completed. Press any key to continue..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "Uninstalling yt-dlp..." + echo "Uninstalling yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "Uninstall is complete. Press any key to continue..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + send_stats "Single video download" + read -e -p "Please enter the video link:" 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 "下载完成,按任意键继续..." ;; + read -e -p "After the download is complete, press any key to continue..." ;; 6) - send_stats "批量视频下载" + send_stats "Batch video download" install nano if [ ! -f "$URL_FILE" ]; then - echo -e "# 输入多个视频链接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# Enter multiple video link addresses\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "Now start batch download..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4134,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "The batch download is completed, press any key to continue..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + send_stats "Custom video download" + read -e -p "Please enter the full yt-dlp parameter (excluding 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 "执行完成,按任意键继续..." ;; + read -e -p "After the execution is completed, press any key to continue..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + send_stats "MP3 download" + read -e -p "Please enter the video link:" 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 "音频下载完成,按任意键继续..." ;; + read -e -p "The audio download is completed, press any key to continue..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "Delete video" + read -e -p "Please enter the name of the delete video:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4194,7 +4195,7 @@ set_timedate() { -# 修复dpkg中断问题 +# Fix dpkg interrupt problem fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4203,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}System update...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4222,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "Unknown package manager!" return fi } @@ -4230,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}Cleaning up the system...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4259,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "Clean the package manager cache..." apk cache clean - echo "删除系统日志..." + echo "Delete the system log..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "Delete APK cache..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "Delete temporary files..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4283,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "Delete the system log..." rm -rf /var/log/* - echo "删除临时文件..." + echo "Delete temporary files..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "Clean up unused dependencies..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "Clean the package manager cache..." pkg clean -y - echo "删除系统日志..." + echo "Delete the system log..." rm -rf /var/log/* - echo "删除临时文件..." + echo "Delete temporary files..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "Unknown package manager!" return fi return @@ -4339,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "Optimize DNS" while true; do clear - echo "优化DNS地址" + echo "Optimize DNS address" echo "------------------------" - echo "当前DNS地址" + echo "Current DNS address" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + echo "1. Foreign DNS optimization:" echo " v4: 1.1.1.1 8.8.8.8" echo " v6: 2606:4700:4700::1111 2001:4860:4860::8888" - echo "2. 国内DNS优化: " + echo "2. Domestic DNS optimization:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3. Manually edit DNS configuration" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "Please enter your selection:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4366,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "Foreign DNS optimization" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4374,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "Domestic DNS optimization" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "Manually edit DNS configuration" ;; *) break @@ -4402,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # If PasswordAuthentication is found, set to yes 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 设置为 yes + # If found PubkeyAuthentication is set to yes 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/' \ @@ -4416,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # If neither PasswordAuthentication nor PubkeyAuthentication matches, set the default value 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" @@ -4427,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # Backup SSH configuration files cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4440,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "The SSH port has been modified to:$new_port" sleep 1 @@ -4458,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "The private key information has been generated. Be sure to copy and save it.${gl_huang}${ipv4_address}_ssh.key${gl_bai}File for future SSH login" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4470,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}ROOT private key login is enabled, ROOT password login has been closed, reconnection will take effect${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "Please enter your SSH public key contents (usually starting with 'ssh-rsa' or 'ssh-ed25519'):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}Error: The public key content was not entered.${gl_bai}" return 1 fi @@ -4498,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}The public key has been successfully imported, the ROOT private key login has been enabled, the ROOT password login has been closed, and the reconnection will take effect${gl_bai}" } @@ -4507,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +echo "Set your ROOT password" 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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}ROOT login is set up!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + send_stats "Reinstall the system" 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 @@ -4537,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + echo -e "Initial username after reinstallation:${gl_huang}root${gl_bai}Initial password:${gl_huang}LeitboGi0ro${gl_bai}Initial port:${gl_huang}22${gl_bai}" + echo -e "Press any key to continue..." 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 "按任意键继续..." + echo -e "Initial username after reinstallation:${gl_huang}Administrator${gl_bai}Initial password:${gl_huang}Teddysun.com${gl_bai}Initial port:${gl_huang}3389${gl_bai}" + echo -e "Press any key to continue..." 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 "按任意键继续..." + echo -e "Initial username after reinstallation:${gl_huang}root${gl_bai}Initial password:${gl_huang}123@@@${gl_bai}Initial port:${gl_huang}22${gl_bai}" + echo -e "Press any key to continue..." 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 "按任意键继续..." + echo -e "Initial username after reinstallation:${gl_huang}Administrator${gl_bai}Initial password:${gl_huang}123@@@${gl_bai}Initial port:${gl_huang}3389${gl_bai}" + echo -e "Press any key to continue..." read -n 1 -s -r -p "" dd_xitong_bin456789 } while true; do root_use - echo "重装系统" + echo "Reinstall the system" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." + echo -e "${gl_hui}Thanks to the script support of leitbogioro and bin456789!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4587,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35. openSUSE Tumbleweed 36. fnos Feiniu public beta version" 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 "0. Return to the previous menu" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "Please select the system to reinstall:" sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "Reinstall debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4609,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "Reinstall debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "Reinstall debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "Reinstall debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "Reinstall ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "Reinstall ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "Reinstall ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "Reinstall ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4660,7 +4661,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "Reinstall rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4668,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "Reinstall rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4676,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "Reinstall alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4684,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "Reinstall alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4692,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "Reinstall oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4700,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "Reinstall oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4708,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "Reinstall fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4716,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "Reinstall fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4724,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "Reinstall centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4732,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "Reinstall centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4740,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "Reinstall alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4748,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "Reinstall arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4756,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "Reinstall kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4764,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "Reinstall openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4772,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "Reinstall opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4780,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "Reload flying cow" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4789,7 +4790,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "Reinstall windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4797,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "Reinstall Windows 10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "Reinstall Windows 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 @@ -4811,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "Reinstall windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "Reinstall windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "Reinstall windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4833,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "Reinstall windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4850,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3管理" + send_stats "bbrv3 management" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4863,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "You have installed xanmod's BBRv3 kernel" + echo "Current kernel version:$kernel_version" echo "" - echo "内核管理" + echo "Kernel Management" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1. Update the BBRv3 kernel 2. Uninstall the BBRv3 kernel" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) @@ -4883,7 +4884,7 @@ bbrv3() { # 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:添加存储库 + # Step 3: Add a repository 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+') @@ -4892,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "The XanMod kernel has been updated. Take effect after restart" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4902,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "The XanMod kernel is uninstalled. Take effect after restart" server_reboot ;; @@ -4915,13 +4916,13 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "Set up BBR3 acceleration" + echo "Video introduction: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "Only support Debian/Ubuntu" + echo "Please back up the data and will enable BBR3 for you to upgrade the Linux kernel." echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in [Yy]) @@ -4929,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "The current environment does not support it, only supports Debian and Ubuntu systems" break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "Unable to determine the operating system type" break_end linux_Settings fi @@ -4945,7 +4946,7 @@ bbrv3() { # 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:添加存储库 + # Step 3: Add a repository 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+') @@ -4956,17 +4957,17 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + echo "XanMod kernel is installed and BBR3 is enabled successfully. Take effect after restart" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot ;; [Nn]) - echo "已取消" + echo "Canceled" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac fi @@ -4975,40 +4976,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # Import ELRepo GPG public key + echo "Import the ELRepo GPG public key..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - # 检测系统版本 + # Detect system version 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) - # 确保我们在一个支持的操作系统上运行 + # Make sure we run on a supported operating system if [[ "$os_name" != *"Red Hat"* && "$os_name" != *"AlmaLinux"* && "$os_name" != *"Rocky"* && "$os_name" != *"Oracle"* && "$os_name" != *"CentOS"* ]]; then - echo "不支持的操作系统:$os_name" + echo "Unsupported operating systems:$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # Print detected operating system information + echo "Operating system detected:$os_name $os_version" + # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + echo "Install ELRepo repository configuration (version 8)..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm elif [[ "$os_version" == 9 ]]; then - echo "安装 ELRepo 仓库配置 (版本 9)..." + echo "Install ELRepo repository configuration (version 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "Install ELRepo repository configuration (version 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "Unsupported system versions:$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # Enable the ELRepo kernel repository and install the latest mainline kernel + echo "Enable the ELRepo kernel repository and install the latest mainline kernel..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "The ELRepo repository configuration is installed and updated to the latest mainline kernel." server_reboot } @@ -5016,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "Red Hat Kernel Management" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "You have installed the elrepo kernel" + echo "Current kernel version:$kernel_version" echo "" - echo "内核管理" + echo "Kernel Management" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. Update the elrepo kernel 2. Uninstall the elrepo kernel" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" 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 "更新红帽内核" + send_stats "Update the Red Hat kernel" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo内核已卸载。重启后生效" - send_stats "卸载红帽内核" + echo "The elrepo kernel is uninstalled. Take effect after restart" + send_stats "Uninstall the Red Hat kernel" server_reboot ;; @@ -5059,26 +5060,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "Please back up the data and will upgrade the Linux kernel for you" + echo "Video introduction: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "Only support Red Hat series distributions CentOS/RedHat/Alma/Rocky/oracle" + echo "Upgrading the Linux kernel can improve system performance and security. It is recommended to try it if conditions permit and upgrade the production environment with caution!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "Upgrade the Red Hat kernel" server_reboot ;; [Nn]) - echo "已取消" + echo "Canceled" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac fi @@ -5089,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}Update the virus database...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5099,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "Please specify the directory to scan." return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + echo -e "${gl_huang}Scanning directory $@...${gl_bai}" - # 构建 mount 参数 + # Build mount parameters local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # 构建 clamscan 命令参数 + # Build clamscan command parameters local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5120,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # Execute Docker commands docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5129,8 +5130,8 @@ clamav_scan() { 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}" + echo -e "${gl_lv}$@ Scan is completed, virus report is stored${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}If there is a virus, please${gl_huang}scan.log${gl_lv}Search for FOUND keyword in the file to confirm the location of the virus${gl_bai}" } @@ -5142,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "Virus Scan Management" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "clamav virus scanning tool" + echo "Video introduction: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "It is an open source antivirus software tool, mainly used to detect and remove various types of malware." + echo "Including viruses, Trojan horses, spyware, malicious scripts and other harmful software." echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1. Full disk scan${gl_bai} ${gl_huang}2. Scan the important directory${gl_bai} ${gl_kjlan}3. Custom directory scanning${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "Full disk scan" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5167,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "Important directory scan" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5175,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "Custom directory scanning" + read -e -p "Please enter the directory to scan, separated by spaces (for example: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5193,21 +5194,21 @@ clamav() { -# 高性能模式优化函数 +# High-performance mode optimization function optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}Switch to${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + echo -e "${gl_lv}Optimize virtual memory...${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}" + echo -e "${gl_lv}Optimize network settings...${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 @@ -5219,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}Optimize cache management...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}Optimize CPU settings...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}Other optimizations...${gl_bai}" + # Disable large transparent pages to reduce latency echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # Disable NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 均衡模式优化函数 +# Equalization mode optimization function optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}Switch to equalization mode...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + echo -e "${gl_lv}Optimize virtual memory...${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}" + echo -e "${gl_lv}Optimize network settings...${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 @@ -5260,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}Optimize cache management...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}Optimize CPU settings...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}Other optimizations...${gl_bai}" + # Restore transparent page echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # Restore NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# Restore the default settings function restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}Restore to default settings...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}Restore file descriptor...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + echo -e "${gl_lv}Restore virtual memory...${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}" + echo -e "${gl_lv}Restore network settings...${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 @@ -5301,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}Restore cache management...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}Restore CPU settings...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}Restore other optimizations...${gl_bai}" + # Restore transparent page echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # Restore NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 网站搭建优化函数 +# Website building optimization function optimize_web_server() { - echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" + echo -e "${gl_lv}Switch to the website building optimization mode...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + echo -e "${gl_lv}Optimize virtual memory...${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}" + echo -e "${gl_lv}Optimize network settings...${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 @@ -5343,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}Optimize cache management...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}Optimize CPU settings...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}Other optimizations...${gl_bai}" + # Disable large transparent pages to reduce latency echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # Disable NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5363,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linux kernel tuning management" + echo "Optimization of kernel parameters in Linux system" + echo "Video introduction: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "A variety of system parameter tuning modes are provided, and users can choose and switch according to their own usage scenarios." + echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in the production environment!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1. High-performance optimization mode: Maximize system performance and optimize file descriptors, virtual memory, network settings, cache management and CPU settings." + echo "2. Balanced optimization mode: Balance between performance and resource consumption, suitable for daily use." + echo "3. Website optimization mode: Optimize for the website server to improve concurrent connection processing capabilities, response speed and overall performance." + echo "4. Live broadcast optimization mode: Optimize the special needs of live broadcast streaming to reduce latency and improve transmission performance." + echo "5. Game server optimization mode: Optimize for game servers to improve concurrent processing capabilities and response speed." + echo "6. Restore the default settings: Restore the system settings to the default configuration." echo "--------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "High performance mode optimization" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "Balanced mode optimization" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "Website optimization model" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "Live streaming optimization" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "Game server optimization" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "Restore default settings" ;; *) break @@ -5445,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}The system language has been modified to:$langReconnecting SSH takes effect.${gl_bai}" hash -r break_end @@ -5454,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}The system language has been modified to:$langReconnecting SSH takes effect.${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "Unsupported systems:$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "Unsupported systems, system type cannot be recognized." break_end fi } @@ -5474,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "Switch system language" while true; do clear - echo "当前系统语言: $LANG" + echo "Current system language:$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1. English 2. Simplified Chinese 3. Traditional Chinese" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "Switch to English" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "Switch to Simplified Chinese" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "Switch to Traditional Chinese" ;; *) break @@ -5518,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}Change is completed. Reconnect SSH to view changes!${gl_bai}" hash -r break_end @@ -5529,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "命令行美化工具" + send_stats "Command line beautification tool" while true; do clear - echo "命令行美化工具" + echo "Command line beautification tool" 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}#" @@ -5542,9 +5543,9 @@ shell_bianse() { 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 "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) @@ -5589,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "System Recycling Station" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5604,17 +5605,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "Current recycling bin${trash_status}" + echo -e "After enabling, the files deleted by rm will first enter the recycling bin to prevent the mistaken deletion of important files!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "The recycling bin is empty" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1. Enable the Recycle Bin 2. Close the Recycle Bin" + echo "3. Restore content 4. Clear the recycling bin" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) @@ -5622,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "The Recycle Bin is enabled and deleted files will be moved to the Recycle Bin." sleep 2 ;; 2) @@ -5630,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "The recycling bin is closed and the file will be deleted directly." sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + read -e -p "Enter the file name to restore:" file_to_restore if [ -e "$TRASH_DIR/$file_to_restore" ]; then mv "$TRASH_DIR/$file_to_restore" "$HOME/" - echo "$file_to_restore 已还原到主目录。" + echo "$file_to_restoreRestored to the home directory." else - echo "文件不存在。" + echo "The file does not exist." fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "Confirm to clear the recycling bin? [y/n]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "The recycling bin has been cleared." fi ;; *) @@ -5657,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夹" +send_stats "Command Favorites" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 创建备份 +# Create a backup create_backup() { - send_stats "创建备份" + send_stats "Create a backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # Prompt the user to enter the backup directory + echo "Create a backup example:" + echo "- Backup a single directory: /var/www" + echo "- Backup multiple directories: /etc /home /var/log" + echo "- Direct Enter will use the default directory (/etc /usr /home)" + read -r -p "Please enter the directory to back up (multiple directories are separated by spaces, and if you enter directly, use the default directory):" input - # 如果用户没有输入目录,则使用默认目录 + # If the user does not enter a directory, use the default directory if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5681,119 +5682,119 @@ create_backup() { "/home" # 用户数据 ) else - # 将用户输入的目录按空格分隔成数组 + # Separate the directory entered by the user into an array by spaces IFS=' ' read -r -a BACKUP_PATHS <<< "$input" fi - # 生成备份文件前缀 + # Generate backup file prefix local PREFIX="" for path in "${BACKUP_PATHS[@]}"; do - # 提取目录名称并去除斜杠 + # Extract directory name and remove slashes dir_name=$(basename "$path") PREFIX+="${dir_name}_" done - # 去除最后一个下划线 + # Remove the last underscore local PREFIX=${PREFIX%_} - # 生成备份文件名 + # Generate backup file name local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" - # 打印用户选择的目录 - echo "您选择的备份目录为:" + # Print the directory selected by the user + echo "The backup directory you selected is:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # Create a backup + echo "Creating a backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # Check if the command is successful if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "The backup was created successfully:$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "Backup creation failed!" exit 1 fi } -# 恢复备份 +# Restore backup restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "Restore backup" + # Select the backup you want to restore + read -e -p "Please enter the backup file name to restore:" BACKUP_NAME - # 检查备份文件是否存在 + # Check if the backup file exists if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "The backup file does not exist!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "Recovering backup$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "Backup and restore successfully!" else - echo "备份恢复失败!" + echo "Backup recovery failed!" exit 1 fi } -# 列出备份 +# List backups list_backups() { - echo "可用的备份:" + echo "Available backups:" ls -1 "$BACKUP_DIR" } -# 删除备份 +# Delete backup delete_backup() { - send_stats "删除备份" + send_stats "Delete backup" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "Please enter the backup file name to delete:" BACKUP_NAME - # 检查备份文件是否存在 + # Check if the backup file exists if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "The backup file does not exist!" exit 1 fi - # 删除备份 + # Delete backup rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "The backup was deleted successfully!" else - echo "备份删除失败!" + echo "Backup deletion failed!" exit 1 fi } -# 备份主菜单 +# Backup main menu linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "System backup function" + echo "System backup function" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1. Create a backup 2. Restore a backup 3. Delete the backup" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Press Enter to continue..." done } @@ -5805,56 +5806,56 @@ linux_backup() { -# 显示连接列表 +# Show connection list list_connections() { - echo "已保存的连接:" + echo "Saved connection:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" } -# 添加新连接 +# Add a new connection add_connection() { - send_stats "添加新连接" - echo "创建新连接示例:" - echo " - 连接名称: my_server" - echo " - IP地址: 192.168.1.100" - echo " - 用户名: root" - echo " - 端口: 22" + send_stats "Add a new connection" + echo "Example to create a new connection:" + echo "- Connection name: my_server" + echo "- IP address: 192.168.1.100" + echo "- Username: root" + echo "- Port: 22" echo "------------------------" - read -e -p "请输入连接名称: " name - read -e -p "请输入IP地址: " ip - read -e -p "请输入用户名 (默认: root): " user + read -e -p "Please enter the connection name:" name + read -e -p "Please enter your IP address:" ip + read -e -p "Please enter the username (default: root):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "Please enter the port number (default: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "Please select the authentication method:" + echo "1. Password" + echo "2. Key" + read -e -p "Please enter the selection (1/2):" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "Please enter your password:" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "Please paste the key content (press press Enter twice after pasting):" local password_or_key="" while IFS= read -r line; do - # 如果输入为空行且密钥内容已经包含了开头,则结束输入 + # If the input is empty and the key content already contains the beginning, the input ends if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # 如果是第一行或已经开始输入密钥内容,则继续添加 + # If it is the first line or the key content has been entered, continue to add if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi done - # 检查是否是密钥内容 + # Check if it is the key content 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" @@ -5863,89 +5864,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "Invalid choice!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "The connection is saved!" } -# 删除连接 +# Delete a connection delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "Delete a connection" + read -e -p "Please enter the connection number to delete:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "Error: The corresponding connection was not found." return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - # 如果连接使用的是密钥文件,则删除该密钥文件 + # If the connection is using a key file, delete the key file if [[ "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi sed -i "${num}d" "$CONFIG_FILE" - echo "连接已删除!" + echo "The connection has been deleted!" } -# 使用连接 +# Use connection use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "Use connection" + read -e -p "Please enter the connection number to use:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "Error: The corresponding connection was not found." return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + echo "Connecting to$name ($ip)..." if [[ -f "$password_or_key" ]]; then - # 使用密钥连接 + # Connect with a key 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. 目标服务器是否允许使用密钥登录。" + echo "Connection failed! Please check the following:" + echo "1. Is the key file path correct?$password_or_key" + echo "2. Whether the key file permissions are correct (should be 600)." + echo "3. Whether the target server allows login using the key." fi else - # 使用密码连接 + # Connect with a password if ! command -v sshpass &> /dev/null; then - echo "错误:未安装 sshpass,请先安装 sshpass。" - echo "安装方法:" + echo "Error: sshpass is not installed, please install sshpass first." + echo "Installation method:" 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 服务是否正常运行。" + echo "Connection failed! Please check the following:" + echo "1. Whether the username and password are correct." + echo "2. Whether the target server allows password login." + echo "3. Whether the SSH service of the target server is running normally." fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "ssh remote connection tool" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # Check if the configuration file and key directory exist, and if it does not exist, create it if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5957,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSH Remote Connection Tool" + echo "Can be connected to other Linux systems via SSH" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1. Create a new connection 2. Use a connection 3. Delete a connection" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "Invalid selection, please try again." ;; esac done } @@ -5987,156 +5988,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# List available hard disk partitions list_partitions() { - echo "可用的硬盘分区:" + echo "Available hard disk partitions:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# Mount the partition mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "Mount the partition" + read -e -p "Please enter the partition name to be mounted (for example, sda1):" PARTITION - # 检查分区是否存在 + # Check if the partition exists if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "The partition does not exist!" return fi - # 检查分区是否已经挂载 + # Check if the partition is already mounted if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "The partition is already mounted!" return fi - # 创建挂载点 + # Create a mount point MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # Mount the partition mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "Partition mount successfully:$MOUNT_POINT" else - echo "分区挂载失败!" + echo "Partition mount failed!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# Uninstall the partition unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "Uninstall the partition" + read -e -p "Please enter the partition name (for example, sda1):" PARTITION - # 检查分区是否已经挂载 + # Check if the partition is already mounted MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "The partition is not mounted!" return fi - # 卸载分区 + # Uninstall the partition umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "Partition uninstallation successfully:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "Partition uninstallation failed!" fi } -# 列出已挂载的分区 +# List mounted partitions list_mounted_partitions() { - echo "已挂载的分区:" + echo "Mounted partition:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# Format partition format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "Format partition" + read -e -p "Please enter the partition name to format (for example, sda1):" PARTITION - # 检查分区是否存在 + # Check if the partition exists if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "The partition does not exist!" return fi - # 检查分区是否已经挂载 + # Check if the partition is already mounted if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "The partition has been mounted, please uninstall it first!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # Select a file system type + echo "Please select the file system type:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + read -e -p "Please enter your selection:" FS_CHOICE case $FS_CHOICE in 1) FS_TYPE="ext4" ;; 2) FS_TYPE="xfs" ;; 3) FS_TYPE="ntfs" ;; 4) FS_TYPE="vfat" ;; - *) echo "无效的选择!"; return ;; + *) echo "Invalid choice!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # Confirm formatting + read -e -p "Confirm formatting partition /dev/$PARTITIONfor$FS_TYPEIs it? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作已取消。" + echo "The operation has been cancelled." return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # Format partition + echo "Formatting partition /dev/$PARTITIONfor$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "The partition format was successful!" else - echo "分区格式化失败!" + echo "Partition formatting failed!" fi } -# 检查分区状态 +# Check partition status check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "Check partition status" + read -e -p "Please enter the partition name to check (for example sda1):" PARTITION - # 检查分区是否存在 + # Check if the partition exists if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "The partition does not exist!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # Check partition status + echo "Check partition /dev/$PARTITIONStatus:" fsck "/dev/$PARTITION" } -# 主菜单 +# Main Menu disk_manager() { - send_stats "硬盘管理功能" + send_stats "Hard disk management function" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "Hard disk partition management" + echo -e "${gl_huang}This function is internally tested during the test period, please do not use it in the production environment.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1. Mount the partition 2. Uninstall the partition 3. View mounted partition" + echo "4. Format the partition 5. Check the partition status" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6145,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Press Enter to continue..." done } -# 显示任务列表 +# Show task list list_tasks() { - echo "已保存的同步任务:" + echo "Saved synchronization tasks:" echo "---------------------------------" awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE" echo "---------------------------------" } -# 添加新任务 +# Add a new task add_task() { - send_stats "添加新同步任务" - echo "创建新同步任务示例:" - echo " - 任务名称: backup_www" - echo " - 本地目录: /var/www" - echo " - 远程地址: user@192.168.1.100" - echo " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + send_stats "Add a new synchronization task" + echo "Create a new synchronization task example:" + echo "- Task name: backup_www" + echo "- Local Directory: /var/www" + echo "- Remote address: user@192.168.1.100" + echo "- Remote Directory: /backup/www" + echo "- Port number (default 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 + read -e -p "Please enter the task name:" name + read -e -p "Please enter the local directory:" local_path + read -e -p "Please enter the remote directory:" remote_path + read -e -p "Please enter the remote user @IP:" remote + read -e -p "Please enter the SSH port (default 22):" port port=${port:-22} - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请选择 (1/2): " auth_choice + echo "Please select the authentication method:" + echo "1. Password" + echo "2. Key" + read -e -p "Please select (1/2):" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "Please enter your password:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "Please paste the key content (press press Enter twice after pasting):" local password_or_key="" while IFS= read -r line; do - # 如果输入为空行且密钥内容已经包含了开头,则结束输入 + # If the input is empty and the key content already contains the beginning, the input ends if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # 如果是第一行或已经开始输入密钥内容,则继续添加 + # If it is the first line or the key content has been entered, continue to add if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi done - # 检查是否是密钥内容 + # Check if it is the key content 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" @@ -6210,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "Invalid key content!" return fi ;; *) - echo "无效的选择!" + echo "Invalid choice!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + echo "Please select the synchronization mode:" + echo "1. Standard mode (-avz)" + echo "2. Delete the target file (-avz --delete)" + read -e -p "Please select (1/2):" mode case $mode in 1) options="-avz" ;; 2) options="-avz --delete" ;; - *) echo "无效选择,使用默认 -avz"; options="-avz" ;; + *) echo "Invalid selection, use default -avz"; options="-avz" ;; esac echo "$name|$local_path|$remote|$remote_path|$port|$options|$auth_method|$password_or_key" >> "$CONFIG_FILE" install rsync rsync - echo "任务已保存!" + echo "Task saved!" } -# 删除任务 +# Delete a task delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "Delete synchronization tasks" + read -e -p "Please enter the task number to delete:" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + echo "Error: The corresponding task was not found." return fi IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" - # 如果任务使用的是密钥文件,则删除该密钥文件 + # If the task is using a key file, delete the key file if [[ "$auth_method" == "key" && "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi sed -i "${num}d" "$CONFIG_FILE" - echo "任务已删除!" + echo "Task deleted!" } run_task() { - send_stats "执行同步任务" + send_stats "Perform synchronization tasks" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # Analyze parameters local direction="push" # 默认是推送到远端 local num @@ -6277,51 +6278,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # If there is no incoming task number, prompt the user to enter if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "Please enter the task number to be executed:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + echo "Error: The task was not found!" return fi IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" - # 根据同步方向调整源和目标路径 + # Adjust source and target path according to synchronization direction if [[ "$direction" == "pull" ]]; then - echo "正在拉取同步到本地: $remote:$local_path -> $remote_path" + echo "Pulling synchronization to local:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "Push synchronization to the remote end:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # Add SSH connection common parameters 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 "Error: sshpass is not installed, please install sshpass first." + echo "Installation method:" 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 - # 检查密钥文件是否存在和权限是否正确 + # Check whether the key file exists and whether the permissions are correct if [[ ! -f "$password_or_key" ]]; then - echo "错误:密钥文件不存在:$password_or_key" + echo "Error: The key file does not exist:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "Warning: The key file permissions are incorrect, and are being repaired..." chmod 600 "$password_or_key" fi @@ -6329,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同步完成!" + echo "Synchronization is complete!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "Synchronization failed! Please check the following:" + echo "1. Is the network connection normal?" + echo "2. Is the remote host accessible?" + echo "3. Is the authentication information correct?" + echo "4. Do local and remote directories have correct access permissions" fi } -# 创建定时任务 +# Create a timed task schedule_task() { - send_stats "添加同步定时任务" + send_stats "Add synchronization timing tasks" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "Please enter the task number to be synchronized regularly:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "Error: Please enter a valid task number!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + echo "Please select the timed execution interval:" + echo "1) Execute once an hour" + echo "2) Perform once a day" + echo "3) Execute once a week" + read -e -p "Please enter options (1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" @@ -6362,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) echo "Error: Please enter a valid option!" ; return ;; esac local cron_job="$cron_time k rsync_run $num" local cron_job="$cron_time k rsync_run $num" - # 检查是否已存在相同任务 + # Check if the same task already exists if crontab -l | grep -q "k rsync_run $num"; then - echo "错误: 该任务的定时同步已存在!" + echo "Error: The timing synchronization of this task already exists!" return fi - # 创建到用户的 crontab + # Create a crontab to the user (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "The timing task has been created:$cron_job" } -# 查看定时任务 +# View scheduled tasks view_tasks() { - echo "当前的定时任务:" + echo "Current timing tasks:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# Delete timing tasks delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "Delete synchronization timing tasks" + read -e -p "Please enter the task number to delete:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "Error: Please enter a valid task number!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "Deleted task number$numTiming tasks" } -# 任务管理主菜单 +# Task Management Main Menu rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "Rsync remote synchronization tool" + echo "Synchronization between remote directories supports incremental synchronization, efficient and stable." echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1. Create a new task 2. Delete a task" + echo "3. Perform local synchronization to the remote end 4. Perform remote synchronization to the local end" + echo "5. Create a timing task 6. Delete a timing task" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6430,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "Invalid selection, please try again." ;; esac - read -e -p "按回车键继续..." + read -e -p "Press Enter to continue..." done } @@ -6447,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "System information query" ip_address @@ -6497,41 +6498,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + echo -e "System information query" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" - echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" - echo -e "${gl_kjlan}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}Host Name:${gl_bai}$hostname" + echo -e "${gl_kjlan}System version:${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux version:${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}CPU architecture:${gl_bai}$cpu_arch" + echo -e "${gl_kjlan}CPU model:${gl_bai}$cpu_info" + echo -e "${gl_kjlan}Number of CPU cores:${gl_bai}$cpu_cores" + echo -e "${gl_kjlan}CPU frequency:${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}CPU occupancy:${gl_bai}$cpu_usage_percent%" + echo -e "${gl_kjlan}System load:${gl_bai}$load" + echo -e "${gl_kjlan}Physical memory:${gl_bai}$mem_info" + echo -e "${gl_kjlan}Virtual memory:${gl_bai}$swap_info" + echo -e "${gl_kjlan}Hard disk occupation:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" + echo -e "${gl_kjlan}Total send:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}Network algorithm:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}Operator:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4 address:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + echo -e "${gl_kjlan}IPv6 address:${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}DNS address:${gl_bai}$dns_addresses" + echo -e "${gl_kjlan}Geographical location:${gl_bai}$country $city" + echo -e "${gl_kjlan}System time:${gl_bai}$timezone $current_time" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" + echo -e "${gl_kjlan}Runtime:${gl_bai}$runtime" echo @@ -6544,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats "Basic Tools" + echo -e "Basic tools" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo super management permission tool${gl_kjlan}4. ${gl_bai}socat communication connection tool" + echo -e "${gl_kjlan}5. ${gl_bai}htop system monitoring tool${gl_kjlan}6. ${gl_bai}iftop network traffic monitoring tool" + echo -e "${gl_kjlan}7. ${gl_bai}unzip ZIP compression decompression tool${gl_kjlan}8. ${gl_bai}tar GZ compression decompression tool" + echo -e "${gl_kjlan}9. ${gl_bai}tmux multi-channel background running tool${gl_kjlan}10. ${gl_bai}ffmpeg video encoding live streaming tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + echo -e "${gl_kjlan}11. ${gl_bai}btop modern monitoring tools${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}range file management tool" + echo -e "${gl_kjlan}13. ${gl_bai}ncdu disk occupation viewing tool${gl_kjlan}14. ${gl_bai}fzf global search tool" + echo -e "${gl_kjlan}15. ${gl_bai}vim text editor${gl_kjlan}16. ${gl_bai}nano text editor${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}17. ${gl_bai}git version control system" 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}21. ${gl_bai}The Matrix Screen Guarantee${gl_kjlan}22. ${gl_bai}Train screen security" + echo -e "${gl_kjlan}26. ${gl_bai}Tetris game${gl_kjlan}27. ${gl_bai}Snake-eating game" + echo -e "${gl_kjlan}28. ${gl_bai}Space Invader Game" 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}31. ${gl_bai}Install all${gl_kjlan}32. ${gl_bai}All installations (excluding screen savers and games)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}Uninstall all" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}安装指定工具 ${gl_kjlan}42. ${gl_bai}卸载指定工具" + echo -e "${gl_kjlan}41. ${gl_bai}Install the specified tool${gl_kjlan}42. ${gl_bai}Uninstall the specified tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" curl --help - send_stats "安装curl" + send_stats "Install curl" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" wget --help - send_stats "安装wget" + send_stats "Install wget" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" sudo --help - send_stats "安装sudo" + send_stats "Install sudo" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" socat -h - send_stats "安装socat" + send_stats "Install socat" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "Install htop" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "Install iftop" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" unzip - send_stats "安装unzip" + send_stats "Install unzip" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" tar --help - send_stats "安装tar" + send_stats "Install tar" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" tmux --help - send_stats "安装tmux" + send_stats "Install tmux" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "The tool has been installed and the usage method is as follows:" ffmpeg --help - send_stats "安装ffmpeg" + send_stats "Install ffmpeg" ;; 11) @@ -6656,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "Install btop" ;; 12) clear @@ -6665,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "Install ranger" ;; 13) clear @@ -6674,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "Install ncdu" ;; 14) clear @@ -6683,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "Install fzf" ;; 15) clear @@ -6692,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "Install vim" ;; 16) clear @@ -6701,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "Install nano" ;; @@ -6712,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "Install git" ;; 21) @@ -6720,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "Install cmatrix" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "Install sl" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "Install bastet" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "Install nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "Install ninvaders" ;; 31) clear - send_stats "全部安装" + send_stats "Install all" 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 "全部安装(不含游戏和屏保)" + send_stats "Install all (excluding games and screen savers)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + send_stats "Uninstall all" 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 + read -e -p "Please enter the installed tool name (wget curl sudo htop):" installname install $installname - send_stats "安装指定软件" + send_stats "Install the specified software" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "Please enter the uninstalled tool name (htop ufw tmux cmatrix):" removename remove $removename - send_stats "卸载指定软件" + send_stats "Uninstall the specified software" ;; 0) @@ -6788,7 +6789,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "Invalid input!" ;; esac break_end @@ -6802,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr管理" + send_stats "bbr management" 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 "Current TCP blocking algorithm:$congestion_algorithm $queue_algorithm" echo "" - echo "BBR管理" + echo "BBR Management" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1. Turn on BBRv3 2. Turn off BBRv3 (restarts)" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "Alpine enable bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6867,21 +6868,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}当前备份列表:${NC}" - ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + echo -e "${BLUE}Current backup list:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "No backup" } # ---------------------------- - # 备份 + # Backup # ---------------------------- backup_docker() { - send_stats "Docker备份" + send_stats "Docker backup" - echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + echo -e "${YELLOW}Backing up Docker container...${NC}" docker ps --format '{{.Names}}' - read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + read -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers install tar jq gzip install_docker @@ -6892,7 +6893,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}No container found${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6900,28 +6901,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" + echo "# Automatically generated restore script" >> "$RESTORE_SCRIPT" - # 记录已打包过的 Compose 项目路径,避免重复打包 + # Record the path of the packaged Compose project to avoid duplicate packaging declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}备份容器: $c${NC}" + echo -e "${GREEN}Backup container:$c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" + echo -e "${BLUE}Detected$cYes docker-compose container${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未检测到 compose 目录,请手动输入路径: " project_dir + read -p "The compose directory is not detected, please enter the path manually:" project_dir fi - # 如果该 Compose 项目已经打包过,跳过 + # If the Compose project has been packaged, skip it if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}Compose project [$project_name] Backed up, skip duplicate packaging...${NC}" continue fi @@ -6929,137 +6930,137 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose recovery:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" + echo -e "${GREEN}Compose project [$project_name] Packed:${project_dir}${NC}" else - echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" + echo -e "${RED}docker-compose.yml not found, skip this container...${NC}" fi else - # 普通容器备份卷 + # Normal container backup volume local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "打包卷: $path" + echo "Packing rolls:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done - # 端口 + # port local PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 环境变量 + # Environment variables local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # 卷映射 + # Volume Mapping local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 镜像 + # Mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" + echo -e "\n# Restore container:$c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # 备份 /home/docker 下的所有文件(不含子目录) + # Backup all files under /home/docker (excluding subdirectories) if [ -d "/home/docker" ]; then - echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + echo -e "${BLUE}Backup the files under /home/docker...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}The file under /home/docker has been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" - echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}Backup is complete:${BACKUP_DIR}${NC}" + echo -e "${GREEN}Available restore scripts:${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 还原 + # reduction # ---------------------------- restore_docker() { - send_stats "Docker还原" - read -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker restore" + read -p "Please enter the backup directory to restore:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } - echo -e "${BLUE}开始执行还原操作...${NC}" + echo -e "${BLUE}Start the restore operation...${NC}" install tar jq gzip install_docker - # --------- 优先还原 Compose 项目 --------- + # ------------------------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + [[ -z "$original_path" ]] && read -p "The original path was not found, please enter the restore directory path:" original_path - # 检查该 compose 项目的容器是否已经在运行 + # Check if the container for the compose project is already running running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" + echo -e "${YELLOW}Compose project [$project_name] There is already a container running, skip restore...${NC}" continue fi - read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + read -p "Confirm restoring the Compose project [$project_name] to path [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "Please enter a new restore path:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" + echo -e "${GREEN}Compose project [$project_name] Decompressed to:$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" + echo -e "${GREEN}Compose project [$project_name] Restore is complete!${NC}" fi done - # --------- 继续还原普通容器 --------- - echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" + # ------------------------- + echo -e "${BLUE}Check and restore a normal Docker container...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}处理容器: $container${NC}" + echo -e "${GREEN}Processing container:$container${NC}" - # 检查容器是否已经存在且正在运行 + # Check if the container already exists and is running if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" + echo -e "${YELLOW}Container [$container] is running, skip restore...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information was not found, skip:$container${NC}"; continue; } - # 端口映射 + # Port Mapping PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 环境变量 + # Environment variables ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # 卷映射 + 卷数据恢复 + # Volume Mapping + Volume Data Recovery VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7070,32 +7071,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "恢复卷数据: $VOL_SRC" + echo "Recover volume data:$VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 删除已存在但未运行的容器 + # Delete existing but not running containers if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" + echo -e "${YELLOW}Container [$container] Exist but not running, delete the old container...${NC}" docker rm -f "$container" fi - # 启动容器 - echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # Start the container + echo "Execute the restore command: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for normal containers was found${NC}" - # 还原 /home/docker 下的文件 + # Restore the file under /home/docker if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" + echo -e "${BLUE}Restore the file under /home/docker...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" + echo -e "${GREEN}The file under /home/docker has been restored${NC}" else - echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" + echo -e "${YELLOW}No backup of the file under /home/docker was found, skip...${NC}" fi @@ -7103,66 +7104,66 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # migrate # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "Docker migration" install jq - read -p "请输入要迁移的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + read -p "Please enter the backup directory to migrate:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } - read -p "目标服务器IP: " TARGET_IP - read -p "目标服务器SSH用户名: " TARGET_USER + read -p "Target server IP:" TARGET_IP + read -p "Target server SSH username:" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}传输备份中...${NC}" + echo -e "${YELLOW}Transfer backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 使用密钥登录 + # Log in with a key scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 删除备份 + # Delete backup # ---------------------------- delete_backup() { - send_stats "Docker备份文件删除" - read -p "请输入要删除的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker backup file deletion" + read -p "Please enter the backup directory to delete:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}Deleted backup:${BACKUP_DIR}${NC}" } # ---------------------------- - # 主菜单 + # Main Menu # ---------------------------- main_menu() { - send_stats "Docker备份迁移还原" + send_stats "Docker backup migration and restore" while true; do clear echo "------------------------" - echo -e "Docker备份/迁移/还原工具" + echo -e "Docker backup/migration/restore tool" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. 备份docker项目" - echo -e "2. 迁移docker项目" - echo -e "3. 还原docker项目" - echo -e "4. 删除docker项目的备份文件" + echo -e "1. Backup the docker project" + echo -e "2. Migrate docker projects" + echo -e "3. Restore the docker project" + echo -e "4. Delete the backup file of the docker project" echo "------------------------" - echo -e "0. 返回上一级菜单" + echo -e "0. Return to the previous menu" echo "------------------------" - read -p "请选择: " choice + read -p "Please select:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}Invalid option${NC}" ;; esac break_end done @@ -7179,38 +7180,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # send_stats "docker management" + echo -e "Docker Management" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Install and update Docker environment${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}View Docker global status${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + echo -e "${gl_kjlan}3. ${gl_bai}Docker container management${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker image management" + echo -e "${gl_kjlan}5. ${gl_bai}Docker Network Management" + echo -e "${gl_kjlan}6. ${gl_bai}Docker volume management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" + echo -e "${gl_kjlan}7. ${gl_bai}Clean useless docker containers and mirror network data volumes" 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}8. ${gl_bai}Replace Docker source" + echo -e "${gl_kjlan}9. ${gl_bai}Edit daemon.json file" 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}11. ${gl_bai}Enable Docker-ipv6 access" + echo -e "${gl_kjlan}12. ${gl_bai}Close Docker-ipv6 access" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" - echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" + echo -e "${gl_kjlan}19. ${gl_bai}Backup/Migration/Restore Docker Environment" + echo -e "${gl_kjlan}20. ${gl_bai}Uninstall the Docker environment" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "Install docker environment" install_add_docker ;; @@ -7221,22 +7222,22 @@ linux_docker() { 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 "docker全局状态" - echo "Docker版本" + send_stats "Docker global status" + echo "Docker version" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "Docker image:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "Docker container:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "Docker volume:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "Docker Network:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7251,8 +7252,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Docker Network Management" + echo "Docker network list" echo "------------------------------------------------------------" docker network ls echo "" @@ -7276,36 +7277,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "Network operation" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1. Create a network" + echo "2. Join the Internet" + echo "3. Exit the network" + echo "4. Delete the network" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "Create a network" + read -e -p "Set a new network name:" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + send_stats "Join the Internet" + read -e -p "Join the network name:" dockernetwork + read -e -p "Those containers are added to the network (multiple container names are separated by spaces):" dockernames for dockername in $dockernames; do docker network connect $dockernetwork $dockername done ;; 3) - send_stats "加入网络" - read -e -p "退出网络名: " dockernetwork - read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames + send_stats "Join the Internet" + read -e -p "Exit network name:" dockernetwork + read -e -p "Those containers exit the network (multiple container names are separated by spaces):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7314,8 +7315,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "Delete the network" + read -e -p "Please enter the network name to delete:" dockernetwork docker network rm $dockernetwork ;; @@ -7329,29 +7330,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" - echo "Docker卷列表" + send_stats "Docker volume management" + echo "Docker volume list" docker volume ls echo "" - echo "卷操作" + echo "Volume operation" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1. Create a new volume" + echo "2. Delete the specified volume" + echo "3. Delete all volumes" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + send_stats "Create a new volume" + read -e -p "Set the new volume name:" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "Enter the delete volume name (please separate multiple volume names with spaces):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7360,7 +7361,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "Delete all volumes" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7369,7 +7370,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; @@ -7382,7 +7383,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker清理" + send_stats "Docker cleaning" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7391,13 +7392,13 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; 8) clear - send_stats "Docker源" + send_stats "Docker source" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7413,13 +7414,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker v6 open" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker v6 level" docker_ipv6_off ;; @@ -7430,7 +7431,7 @@ linux_docker() { 20) clear - send_stats "Docker卸载" + send_stats "Docker uninstall" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7442,7 +7443,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; @@ -7451,7 +7452,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "Invalid input!" ;; esac break_end @@ -7468,151 +7469,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # send_stats "Test script collection" + echo -e "Test script collection" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}IP及解锁状态检测" - echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解锁状态检测" - echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP and unlock status detection" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT Unlock Status Detection" + echo -e "${gl_kjlan}2. ${gl_bai}Region streaming media unlock test" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu streaming media unlock detection" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP quality physical examination script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}Network speed measurement" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace three network backhaul delay routing test" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace Three-network backhaul line test" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed three-net speed measurement" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace Specifies IP backhaul test script" + echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three-network line test" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunction speed test script" + echo -e "${gl_kjlan}18. ${gl_bai}NetQuality Network Quality Physical Examination Script${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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}Hardware performance testing" + echo -e "${gl_kjlan}21. ${gl_bai}yabs performance testing" + echo -e "${gl_kjlan}22. ${gl_bai}iicu/gb5 CPU performance test script" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}Comprehensive test" + echo -e "${gl_kjlan}31. ${gl_bai}bench performance test" + echo -e "${gl_kjlan}32. ${gl_bai}Spiritysdx Fusion Monster Review${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "ChatGPT unlock status detection" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "Region streaming media unlock test" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "yeahwu streaming media unlock detection" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "xykt_IP quality physical examination script" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "Besttrace three network backhaul delay routing test" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "mtr_trace three network return line test" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "Superspeed three-net speed measurement" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace fast backhaul test script" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "nxtrace specifies IP backhaul test script" + echo "List of IPs that can be referenced" 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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + echo "Beijing Telecom: 219.141.136.12" + echo "Beijing Unicom: 202.106.50.1" + echo "Beijing Mobile: 221.179.155.161" + echo "Shanghai Telecom: 202.96.209.133" + echo "Shanghai Unicom: 210.22.97.1" + echo "Shanghai Mobile: 211.136.112.200" + echo "Guangzhou Telecom: 58.60.188.222" + echo "Guangzhou Unicom: 210.21.196.6" + echo "Guangzhou Mobile: 120.196.165.24" + echo "Chengdu Telecom: 61.139.2.69" + echo "Chengdu Unicom: 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 + read -e -p "Enter a specified IP:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "ludashi2020 three-network line test" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "i-abc multifunction speed test script" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "Network quality test script" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "yabs performance testing" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "iicu/gb5 CPU performance test script" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "bench performance test" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + send_stats "Spiritysdx Fusion Monster Review" clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; @@ -7622,7 +7623,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "Invalid input!" ;; esac break_end @@ -7638,51 +7639,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + send_stats "Oracle Cloud Script Collection" + echo -e "Oracle Cloud Script Collection" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装闲置机器活跃脚本" - echo -e "${gl_kjlan}2. ${gl_bai}卸载闲置机器活跃脚本" + echo -e "${gl_kjlan}1. ${gl_bai}Install idle machine active script" + echo -e "${gl_kjlan}2. ${gl_bai}Uninstall idle machine active script" 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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + echo -e "${gl_kjlan}3. ${gl_bai}DD reinstall system script" + echo -e "${gl_kjlan}4. ${gl_bai}Detective R start script" + echo -e "${gl_kjlan}5. ${gl_bai}Turn on ROOT password login mode" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6 recovery tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + echo "Active script: CPU occupies 10-20% memory occupies 20%" + read -e -p "Are you sure to install it? (Y/N):" choice case "$choice" in [Yy]) install_docker - # 设置默认值 + # Set default values 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 + # Prompt the user to enter the number of CPU cores and occupancy percentage, and if entered, use the default value. + read -e -p "Please enter the number of CPU cores [default:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} - read -e -p "请输入CPU占用百分比范围(例如10-20) [默认: $DEFAULT_CPU_UTIL]: " cpu_util + read -e -p "Please enter the CPU usage percentage range (for example, 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL} - read -e -p "请输入内存占用百分比 [默认: $DEFAULT_MEM_UTIL]: " mem_util + read -e -p "Please enter the memory usage percentage [default:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "Please enter the Speedtest interval time (seconds) [default:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # Run Docker container docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7690,14 +7691,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "Oracle Cloud Installation Active Script" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; @@ -7705,20 +7706,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "Oracle Cloud Uninstall Active Script" ;; 3) clear - echo "重装系统" + echo "Reinstall the system" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." + read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in [Yy]) while true; do - read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice + read -e -p "Please select the system to reinstall: 1. Debian12 | 2. Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7730,28 +7731,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "Invalid selection, please re-enter." ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + read -e -p "Please enter your reinstalled password:" 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 "甲骨文云重装系统脚本" + send_stats "Oracle Cloud Reinstall System Script" ;; [Nn]) - echo "已取消" + echo "Canceled" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "This feature is in the development stage, so stay tuned!" ;; 5) clear @@ -7761,15 +7762,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "This function is provided by the master jhb, thanks to him!" + send_stats "ipv6 fix" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "Invalid input!" ;; esac break_end @@ -7790,7 +7791,7 @@ docker_tato() { 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}" + echo -e "${gl_lv}The environment has been installed${gl_bai}container:${gl_lv}$container_count${gl_bai}Mirror:${gl_lv}$image_count${gl_bai}network:${gl_lv}$network_count${gl_bai}roll:${gl_lv}$volume_count${gl_bai}" fi } @@ -7811,7 +7812,7 @@ 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" + echo -e "${gl_lv}The environment is installed${gl_bai}Site:$outputdatabase:$db_output" fi fi @@ -7839,31 +7840,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP建站" - echo -e "${gl_huang}LDNMP建站" + # send_stats "LDNMP website building" + echo -e "${gl_huang}LDNMP website building" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}Install LDNMP environment${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}Install WordPress${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Install Discuz Forum${gl_huang}4. ${gl_bai}Install the Kadao Cloud Desktop" + echo -e "${gl_huang}5. ${gl_bai}Install Apple CMS Film and Television Station${gl_huang}6. ${gl_bai}Install a Unicorn Digital Card Network" + echo -e "${gl_huang}7. ${gl_bai}Install the flarum forum website${gl_huang}8. ${gl_bai}Install typecho lightweight blog website" + echo -e "${gl_huang}9. ${gl_bai}Install LinkStack Shared Link Platform${gl_huang}20. ${gl_bai}Customize dynamic site" 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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" + echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy - domain name" + echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" + echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" + echo -e "${gl_huang}30. ${gl_bai}Customize static site" 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}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up the entire site data" + echo -e "${gl_huang}33. ${gl_bai}Timed remote backup${gl_huang}34. ${gl_bai}Restore the entire site data" 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}35. ${gl_bai}Protect LDNMP environment${gl_huang}36. ${gl_bai}Optimize LDNMP environment" + echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall LDNMP environment" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}0. ${gl_bai}返回主菜单" + echo -e "${gl_huang}0. ${gl_bai}Return to main menu" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in @@ -7877,10 +7878,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # Discuz Forum webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7903,21 +7904,21 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "Database address: mysql" + echo "Database name:$dbname" + echo "username:$dbuse" + echo "password:$dbusepasswd" + echo "Table prefix: discuz_" ;; 4) clear - # 可道云桌面 + # Kedao Cloud Desktop webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7939,20 +7940,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "Database address: mysql" + echo "username:$dbuse" + echo "password:$dbusepasswd" + echo "Database name:$dbname" + echo "redis host: redis" ;; 5) clear - # 苹果CMS + # Apple CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7978,24 +7979,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "Database address: mysql" + echo "Database port: 3306" + echo "Database name:$dbname" + echo "username:$dbuse" + echo "password:$dbusepasswd" + echo "Database prefix: mac_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "Log in to the background address after installation is successful" echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # One-legged counting card webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8016,34 +8017,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "Database address: mysql" + echo "Database port: 3306" + echo "Database name:$dbname" + echo "username:$dbuse" + echo "password:$dbusepasswd" echo "" - echo "redis地址: redis" - echo "redis密码: 默认不填写" - echo "redis端口: 6379" + echo "redis address: redis" + echo "Redis password: Not filled in by default" + echo "Redis port: 6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "Website url: https://$yuming" + echo "Background login path: /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "Username: admin" + echo "Password: admin" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "If red error0 appears in the upper right corner when logging in, please use the following command:" + echo "I am also very angry that the unicorn number card is so troublesome, and there will be such problems!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # Flarum Forum webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8080,12 +8081,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "Database address: mysql" + echo "Database name:$dbname" + echo "username:$dbuse" + echo "password:$dbusepasswd" + echo "Table prefix: flarum_" + echo "Administrator information is set by yourself" ;; @@ -8093,8 +8094,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8118,11 +8119,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "Database prefix: typecho_" + echo "Database address: mysql" + echo "username:$dbuse" + echo "password:$dbusepasswd" + echo "Database name:$dbname" ;; @@ -8131,8 +8132,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8157,18 +8158,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "Database address: mysql" + echo "Database port: 3306" + echo "Database name:$dbname" + echo "username:$dbuse" + echo "password:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8185,10 +8186,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] Upload PHP source code" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" + read -e -p "You can also enter the download link to remotely download the source code package. Directly press Enter to skip remote download:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8198,20 +8199,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + echo -e "[${gl_huang}2/6${gl_bai}] The path where index.php is located" 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 + read -e -p "Please enter the path of index.php, similar to (/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 -e "[${gl_huang}3/6${gl_bai}] Please select the PHP version" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + read -e -p "1. The latest version of 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 @@ -8222,15 +8223,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "Invalid selection, please re-enter." ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}] Install the specified extension" echo "-------------" - echo "已经安装的扩展" + echo "Installed extensions" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8240,25 +8241,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}] Edit site configuration" echo "-------------" - echo "按任意键继续,可以详细设置站点配置,如伪静态等内容" + echo "Press any key to continue, and you can set the site configuration in detail, such as pseudo-static contents, etc." 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 -e "[${gl_huang}6/6${gl_bai}] Database Management" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1. I build a new site 2. I build an old site and have a database backup:" use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." + read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8268,10 +8269,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "Database import table data" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "Database import completed" ;; *) echo @@ -8283,12 +8284,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "Database address: mysql" + echo "Database name:$dbname" + echo "username:$dbuse" + echo "password:$dbusepasswd" + echo "Table prefix:$prefix" + echo "Administrator login information is set by yourself" ;; @@ -8301,10 +8302,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "Please enter the jump domain name:" reverseproxy nginx_install_status install_ssltls certs_status @@ -8326,7 +8327,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ ports have been blocked from accessing the service" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8337,11 +8338,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "Domain name format:${gl_huang}google.com${gl_bai}" + read -e -p "Please enter your anti-generation domain name:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8361,8 +8362,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming nginx_install_status install_ssltls @@ -8384,8 +8385,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming nginx_install_status install_ssltls @@ -8402,8 +8403,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming nginx_install_status install_ssltls @@ -8436,8 +8437,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "Install$webname" + echo "Start deployment$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8454,10 +8455,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}] Upload static source code" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" + read -e -p "You can also enter the download link to remotely download the source code package. Directly press Enter to skip remote download:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8467,12 +8468,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + echo -e "[${gl_huang}2/2${gl_bai}] The path where index.html is located" 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 + read -e -p "Please enter the path to index.html, similar to (/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 @@ -8497,21 +8498,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP environment backup" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}Backing up$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "The backup file has been created: /home/$backup_filename" + read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "Please enter the remote server IP:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "Error: Please enter the remote server IP." continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8519,9 +8520,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "The file has been transferred to the remote server home directory." else - echo "未找到要传送的文件。" + echo "The file to be transferred was not found." fi break ;; @@ -8529,7 +8530,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac done @@ -8537,9 +8538,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + send_stats "Timed remote backup" + read -e -p "Enter the remote server IP:" useip + read -e -p "Enter the remote server password:" usepasswd cd ~ wget -O ${useip}_beifen.sh ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/beifen.sh > /dev/null 2>&1 @@ -8549,18 +8550,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1. Weekly backup 2. Daily backup" + read -e -p "Please enter your selection:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + read -e -p "Select the day of the week for your weekly backup (0-6, 0 represents Sunday):" 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 + read -e -p "Select the time for daily backup (hours, 0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8574,19 +8575,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP environment restoration" + echo "Available site backups" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename if [ "$filename" == "0" ]; then break_end linux_ldnmp fi - # 如果用户没有输入文件名,使用最新的压缩包 + # If the user does not enter the file name, use the latest compressed package if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8596,7 +8597,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8605,7 +8606,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "No compression package was found." fi ;; @@ -8623,11 +8624,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "Update LDNMP environment" + echo "Update LDNMP environment" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "Discover new version of components" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8647,13 +8648,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" + echo "1. Update nginx 2. Update mysql 3. Update php 4. Update redis" echo "------------------------" - echo "5. 更新完整环境" + echo "5. Update the complete environment" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8662,7 +8663,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "Please enter${ldnmp_pods}Version number (such as: 8.0 8.3 8.4 9.0) (Enter to get the latest version):" version local version=${version:-latest} cd /home/web/ @@ -8673,13 +8674,13 @@ linux_ldnmp() { 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}完成" + send_stats "renew$ldnmp_pods" + echo "renew${ldnmp_pods}Finish" ;; 3) local ldnmp_pods="php" - read -e -p "请输入${ldnmp_pods}版本号 (如: 7.4 8.0 8.1 8.2 8.3)(回车获取最新版): " version + read -e -p "Please enter${ldnmp_pods}Version number (such as: 7.4 8.0 8.1 8.2 8.3) (Enter to get the latest version):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8712,8 +8713,8 @@ linux_ldnmp() { 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}完成" + send_stats "renew$ldnmp_pods" + echo "renew${ldnmp_pods}Finish" ;; 4) @@ -8724,15 +8725,15 @@ linux_ldnmp() { 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}完成" + send_stats "renew$ldnmp_pods" + echo "renew${ldnmp_pods}Finish" ;; 5) read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "完整更新LDNMP环境" + send_stats "Completely update the LDNMP environment" cd /home/web/ docker compose down --rmi all @@ -8758,7 +8759,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "Uninstall LDNMP environment" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8772,7 +8773,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; @@ -8782,7 +8783,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "Invalid input!" esac break_end @@ -8802,12 +8803,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "应用市场" + echo -e "Application Market" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # Set the color with loop for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8816,70 +8817,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}Official version of Baota Panel${gl_kjlan}2. ${color2}aaPanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager Visual Panel" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB Offline BT Magnetic Download Panel" + echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multiplayer online chat system" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}Zendao project management software${gl_kjlan}12. ${color12}Qinglong Panel Timed Task Management Platform" + echo -e "${gl_kjlan}13. ${color13}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}Simple picture bed picture management program" + echo -e "${gl_kjlan}15. ${color15}emby multimedia management system${gl_kjlan}16. ${color16}Speedtest speed test panel" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome Adware${gl_kjlan}18. ${color18}onlyoffice online office OFFICE" + echo -e "${gl_kjlan}19. ${color19}Thunder Pool WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" + echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop Remote Desktop Web Edition${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed ​​Speed ​​Test Tool" + echo -e "${gl_kjlan}29. ${color29}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF tool collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel Navigation Panel${gl_kjlan}34. ${color34}Pingvin-Share file sharing platform" + echo -e "${gl_kjlan}35. ${color35}Minimalist circle of friends${gl_kjlan}36. ${color36}LobeChatAI Chat Aggregation Website" + echo -e "${gl_kjlan}37. ${color37}MyIP Toolbox${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist family bucket" + echo -e "${gl_kjlan}39. ${color39}Bililive live broadcast recording tool${gl_kjlan}40. ${color40}webssh web version SSH connection tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}Mouse Management Panel${gl_kjlan}42. ${color42}Nexte remote connection tool" + echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk Remote Desk (Relay)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub Acceleration Station${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}Prometheus Monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVE Chicken Panel${gl_kjlan}52. ${color52}DPanel Container Management Panel" + echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" + echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" + echo -e "${gl_kjlan}65. ${color65}n8n Automation Workflow Platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" + echo -e "${gl_kjlan}67. ${color67}ddns-go Dynamic DNS Management Tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL Certificate Management Platform" + echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot Chat Robot Framework" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome Private Music Server${gl_kjlan}72. ${color72}bitwarden Password Manager${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV Private Film and Television${gl_kjlan}74. ${color74}MoonTV Private Movie" + echo -e "${gl_kjlan}75. ${color75}Melody Music Elf${gl_kjlan}76. ${color76}Online DOS old games" + echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki Intelligent Document Management System" + echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" - echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" + echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tools" + echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" + echo -e "${gl_kjlan}87. ${color87}SyncTV movie watching artifact${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" - echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" - echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" - echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser File Manager" + echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" + echo -e "${gl_kjlan}95. ${color95}paperless document management platform" + echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" + echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice fi case $sub_choice in @@ -9032,8 +9033,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "Set login username:" admin + read -e -p "Set the login user password:" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9066,7 +9067,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "Build Nezha" local app_id="7" local docker_name="nezha-dashboard" @@ -9075,20 +9076,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒监控 $check_docker $update_status" - echo "开源、轻量、易用的服务器监控与运维工具" - echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + echo -e "Nezha Monitoring$check_docker $update_status" + echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" + echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 使用" + echo "1. Use" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) @@ -9145,7 +9146,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "Build a post office" clear install telnet local app_id="9" @@ -9155,43 +9156,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "Post Office Services$check_docker $update_status" + echo "poste.io is an open source mail server solution." + echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - echo "端口检测" + echo "Port detection" port=25 timeout=3 if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then - echo -e "${gl_lv}端口 $port 当前可用${gl_bai}" + echo -e "${gl_lv}port$portCurrently available${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}port$portNot currently available${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "Access address:" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "Please set the email domain name, for example, mail.yuming.com:" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "Parse these DNS records first" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9201,7 +9202,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "Press any key to continue..." read -n 1 -s -r -p "" install jq @@ -9220,9 +9221,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "poste.io has been installed" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "You can access poste.io using the following address:" echo "https://$yuming" echo "" @@ -9245,9 +9246,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "poste.io has been installed" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "You can access poste.io using the following address:" echo "https://$yuming" echo "" ;; @@ -9258,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "The app has been uninstalled" ;; *) @@ -9292,7 +9293,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -9302,7 +9303,7 @@ while true; do 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已经安装完成" + echo "rocket.chat has been installed" check_docker_app_ip } @@ -9312,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -9396,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -9410,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -9555,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "Build a Thunder Pool" local app_id="19" local docker_name=safeline-mgt @@ -9563,20 +9564,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "Thunder Pool Service$check_docker" + echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." + echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1. Install 2. Update 3. Reset Password 4. Uninstall" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) @@ -9586,7 +9587,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经安装完成" + echo "The Thunder Pool WAF panel has been installed" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9599,7 +9600,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经更新完成" + echo "Thunder Pool WAF panel has been updated" check_docker_app_ip ;; 3) @@ -9610,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9729,8 +9730,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "Set login username:" admin + read -e -p "Set the login user password:" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10018,7 +10019,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + local docker_url="Official website introduction:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" local docker_use="echo \"账号: admin 密码: a123456\"" local docker_passwd="" local app_size="1" @@ -10071,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya Family Bucket" clear install_docker check_disk_space 1 @@ -10275,9 +10276,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "Installed" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "The initial username and password are: admin" } docker_app_update() { @@ -10295,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -10382,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVE开小鸡" + send_stats "PVE Chicken" 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 ;; @@ -10502,7 +10503,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -10517,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -10545,7 +10546,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -10560,7 +10561,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -10568,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -10589,17 +10590,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "Initial username: admin" + echo "Initial password: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "The app has been updated" } @@ -10609,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -10656,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -10672,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -10934,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "Set the LibreTV login password:" app_passwd docker run -d \ --name libretv \ @@ -10968,9 +10969,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password - read -e -p "输入授权码: " shouquanma + read -e -p "Set login username:" admin + read -e -p "Set the login user password:" admin_password + read -e -p "Enter the authorization code:" shouquanma mkdir -p /home/docker/moontv @@ -10986,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -11000,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -11073,8 +11074,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "Set login username:" app_use + read -e -p "Set login password:" app_passwd docker run -d \ --name xunlei \ @@ -11171,11 +11172,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # Download the official docker-compose and env files curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # Generate random keys and passwords local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11184,17 +11185,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # Add administrator account information echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # Start the container docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -11204,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # Keep the original variable source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11221,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -11271,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -11289,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd + read -e -p "set up${docker_name}The login key (sk-staring letters and numbers combinations) such as: sk-159kejilionyyds163:" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11393,7 +11394,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -11406,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -11567,7 +11568,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" + echo "Create an initial user or administrator. Please set the following username and password and whether you are an administrator." docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11619,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -11633,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -11708,8 +11709,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "Set login username:" app_use + read -e -p "Set login password:" app_passwd docker run -d \ --name ${docker_name} \ @@ -11757,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "Installed" check_docker_app_ip } @@ -11771,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "应用已卸载" + echo "The app has been uninstalled" } docker_app_plus @@ -11788,12 +11789,12 @@ while true; do docker_rum() { - read -p "请输入组网的客户端数量 (默认 5): " COUNT + read -p "Please enter the number of clients to form the network (default 5):" COUNT COUNT=${COUNT:-5} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - - stop_containers_or_kill_process 51820 &>/dev/null + + ip link delete wg0 &>/dev/null ip_address docker run -d \ @@ -11833,7 +11834,7 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二维码: $base_name.png" + echo "Generate QR code:$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' @@ -11843,11 +11844,11 @@ while true; do sleep 2 docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" - echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" - echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + echo -e "${gl_lv}${COUNT}All outputs are provided by each client. The usage method is as follows:${gl_bai}" + echo -e "${gl_lv}1. Download wg's APP on your mobile phone, scan the QR code above to quickly connect to the network${gl_bai}" + echo -e "${gl_lv}2. Download the Windows client and copy the configuration code to connect to the network.${gl_bai}" + echo -e "${gl_lv}3. Linux uses scripts to deploy WG clients and copy configuration code to connect to the network.${gl_bai}" + echo -e "${gl_lv}Official client download method: https://www.wireguard.com/install/${gl_bai}" break_end } @@ -11875,16 +11876,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # Create a directory (if it does not exist) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "Please paste your client configuration and press Enter twice in a row to save:" - # 初始化变量 + # Initialize variables input="" empty_line_count=0 - # 逐行读取用户输入 + # Read user input line by line while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11897,10 +11898,10 @@ while true; do fi done - # 写入配置文件 + # Write to the configuration file echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "Client configuration has been saved to$CONFIG_FILE" docker run -d \ --name wireguardc \ @@ -11933,21 +11934,21 @@ while true; do b) clear - send_stats "全部应用备份" + send_stats "All applications backup" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}Backing up$backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "备份文件已创建: /$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "The backup file has been created: /$backup_filename" + read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "Please enter the remote server IP:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "Error: Please enter the remote server IP." continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11955,14 +11956,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "文件已传送至远程服务器/根目录。" + echo "The file has been transferred to the remote server/root directory." else - echo "未找到要传送的文件。" + echo "The file to be transferred was not found." fi break ;; *) - echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "Note: Currently, the backup only includes docker projects, and does not include data backup of website building panels such as Pagoda and 1panel." break ;; esac @@ -11972,29 +11973,29 @@ while true; do r) root_use - send_stats "全部应用还原" - echo "可用的应用备份" + send_stats "All applications restore" + echo "Available app backups" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # 如果用户没有输入文件名,使用最新的压缩包 + # If the user does not enter the file name, use the latest compressed package if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + echo "The application data has been restored. Please manually enter the specified application menu and update the application to restore the application." else - echo "没有找到压缩包。" + echo "No compression package was found." fi ;; @@ -12017,35 +12018,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "Backend workspace" + echo -e "Backend workspace" + echo -e "The system will provide you with a workspace that can be run on the backend, which you can use to perform long-term tasks." + echo -e "Even if you disconnect SSH, tasks in the workspace will not be interrupted, and tasks in the background will be resident." + echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and press d alone to exit the workspace!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + echo "List of currently existing workspaces" 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}1. ${gl_bai}Workspace No. 1" + echo -e "${gl_kjlan}2. ${gl_bai}Workspace No. 2" + echo -e "${gl_kjlan}3. ${gl_bai}Workspace No. 3" + echo -e "${gl_kjlan}4. ${gl_bai}Workspace No. 4" + echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" + echo -e "${gl_kjlan}6. ${gl_bai}Workspace No. 6" + echo -e "${gl_kjlan}7. ${gl_bai}Workspace No. 7" + echo -e "${gl_kjlan}8. ${gl_bai}Workspace No. 8" + echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" + echo -e "${gl_kjlan}10. ${gl_bai}Workspace No. 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}21. ${gl_bai}SSH resident mode${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}22. ${gl_bai}Create/enter the workspace" + echo -e "${gl_kjlan}23. ${gl_bai}Inject commands into the background workspace" + echo -e "${gl_kjlan}24. ${gl_bai}Delete the specified workspace" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in @@ -12053,7 +12054,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; @@ -12061,63 +12062,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "Start the workspace$SESSION_NAME" tmux_run ;; @@ -12129,21 +12130,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH resident mode" + echo -e "SSH resident mode${tmux_sshd_status}" + echo "After SSH connection is enabled, it will directly enter the resident mode and return to the previous working state." echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1. Turn on 2. Turn off" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + read -e -p "Please enter your selection:" 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 + send_stats "Start the workspace$SESSION_NAME" + grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\n# Automatically enter the tmux session\nif [[ -z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc source ~/.bashrc tmux_run ;; @@ -12159,29 +12160,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "Please enter the name of the workspace you created or entered, such as 1001 kj001 work1:" SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "Custom workspace" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "Please enter the command you want to execute in the background, such as: curl -fsSL https://get.docker.com | sh:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "Inject commands into the background workspace" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "Please enter the name of the workspace you want to delete:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "Delete the workspace" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "Invalid input!" ;; esac break_end @@ -12206,54 +12207,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # send_stats "System Tools" + echo -e "System Tools" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}设置脚本启动快捷键 ${gl_kjlan}2. ${gl_bai}修改登录密码" - echo -e "${gl_kjlan}3. ${gl_bai}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}Set script startup shortcut keys${gl_kjlan}2. ${gl_bai}Modify the login password" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" + echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify the SSH connection port" + echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}One-click reinstallation system${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account to create a new account${gl_kjlan}10. ${gl_bai}Switch priority 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}11. ${gl_bai}Check port occupation status${gl_kjlan}12. ${gl_bai}Modify virtual memory size" + echo -e "${gl_kjlan}13. ${gl_bai}User Management${gl_kjlan}14. ${gl_bai}User/Password Generator" + echo -e "${gl_kjlan}15. ${gl_bai}System time zone adjustment${gl_kjlan}16. ${gl_bai}Set up BBR3 acceleration" + echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" + echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tool${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}File Manager" 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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}31. ${gl_bai}Switch system language${gl_kjlan}32. ${gl_bai}Command line beautification tool${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}Set up a system recycling bin${gl_kjlan}34. ${gl_bai}System backup and recovery" + echo -e "${gl_kjlan}35. ${gl_bai}ssh remote connection tool${gl_kjlan}36. ${gl_bai}Hard disk partition management tool" + echo -e "${gl_kjlan}37. ${gl_bai}Command line history${gl_kjlan}38. ${gl_bai}rsync remote synchronization tool" + echo -e "${gl_kjlan}39. ${gl_bai}Command Favorites${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system optimization${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and Security" + echo -e "${gl_kjlan}101. ${gl_bai}Advanced usage of k command${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}Uninstall tech lion script" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + read -e -p "Please enter your shortcut key (enter 0 to exit):" 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 "脚本快捷键已设置" + echo "Shortcut keys are set" + send_stats "Script shortcut keys have been set" break_end linux_Settings done @@ -12261,34 +12262,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "Set your login password" + echo "Set your login password" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "root password mode" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "py version management" + echo "Python version management" + echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "This feature seamlessly installs any version officially supported by python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + echo -e "Current python version number:${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 "Recommended version: 3.12 3.11 3.10 3.9 3.8 2.7" + echo "Query more versions: https://www.python.org/downloads/" echo "------------" - read -e -p "输入你要安装的python版本号(输入0退出): " py_new_v + read -e -p "Enter the python version number you want to install (enter 0 to exit):" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "Script PY Management" break_end linux_Settings fi @@ -12321,7 +12322,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "Unknown package manager!" return fi @@ -12350,55 +12351,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" + send_stats "Switch script PY version" ;; 5) root_use - send_stats "开放端口" + send_stats "Open port" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "All ports are open" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "Modify SSH port" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # Read the current SSH port number 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}" + # Print the current SSH port number + echo -e "The current SSH port number is:${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "Numbers with port numbers ranging from 1 to 65535. (Enter 0 to exit)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # Prompt the user to enter a new SSH port number + read -e -p "Please enter the new SSH port number:" new_port - # 判断端口号是否在有效范围内 + # Determine whether the port number is within the valid range if [[ $new_port =~ ^[0-9]+$ ]]; then # 检查输入是否为数字 if [[ $new_port -ge 1 && $new_port -le 65535 ]]; then - send_stats "SSH端口已修改" + send_stats "SSH port has been modified" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "Exit SSH port modification" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "The port number is invalid, please enter a number between 1 and 65535." + send_stats "Invalid SSH port input" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "The input is invalid, please enter the number." + send_stats "Invalid SSH port input" break_end fi done @@ -12417,8 +12418,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "New users disable root" + read -e -p "Please enter the new username (enter 0 to exit):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12433,49 +12434,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "The operation has been completed." ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "Set v4/v6 priority" while true; do clear - echo "设置v4/v6优先级" + echo "Set v4/v6 priority" 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} 优先" + echo -e "Current network priority settings:${gl_huang}IPv4${gl_bai}priority" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "Current network priority settings:${gl_huang}IPv6${gl_bai}priority" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1. IPv4 priority 2. IPv6 priority 3. IPv6 repair tool" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "选择优先的网络: " choice + read -e -p "Choose a preferred network:" choice case $choice in 1) sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 - echo "已切换为 IPv4 优先" - send_stats "已切换为 IPv4 优先" + echo "Switched to IPv4 priority" + send_stats "Switched to IPv4 priority" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "Switched to IPv6 priority" + send_stats "Switched to IPv6 priority" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "This function is provided by the master jhb, thanks to him!" + send_stats "ipv6 fix" ;; *) @@ -12493,43 +12494,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "Set up virtual memory" while true; do clear - echo "设置虚拟内存" + echo "Set up virtual memory" 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 -e "Current virtual memory:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1. Assign 1024M 2. Assign 2048M 3. Assign 4096M 4. Custom size" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "Please enter your selection:" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G virtual memory has been set" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G virtual memory has been set" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G virtual memory has been set" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "Please enter the virtual memory size (unit M):" new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "Custom virtual memory has been set" ;; *) @@ -12542,8 +12543,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "User Management" + echo "User List" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12554,62 +12555,62 @@ EOF echo "" - echo "账户操作" + echo "Account operation" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1. Create a normal account 2. Create a premium account" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3. Give the highest permissions 4. Cancel the highest permissions" echo "------------------------" - echo "5. 删除账号" + echo "5. Delete the account" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # Prompt the user to enter a new username + read -e -p "Please enter a new username:" new_username - # 创建新用户并设置密码 + # Create a new user and set a password useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "The operation has been completed." ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # Prompt the user to enter a new username + read -e -p "Please enter a new username:" new_username - # 创建新用户并设置密码 + # Create a new user and set a password useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # Grant new users sudo permissions echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作已完成。" + echo "The operation has been completed." ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "Please enter your username:" username + # Grant new users sudo permissions echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "Please enter your username:" username + # Remove user's sudo permissions from sudoers file sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "Please enter the username to delete:" username + # Delete the user and its home directory userdel -r "$username" ;; @@ -12622,50 +12623,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "User Information Generator" + echo "Random username" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "Random username$i: $username" done echo "" - echo "随机姓名" + echo "Random name" 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个随机用户姓名 + # Generate 5 random user names 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" + echo "Random user name$i: $user_name" done echo "" - echo "随机UUID" + echo "Random UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "Random UUID$i: $uuid" done echo "" - echo "16位随机密码" + echo "16-bit random password" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - echo "随机密码 $i: $password" + echo "Random password$i: $password" done echo "" - echo "32位随机密码" + echo "32-bit random password" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32) - echo "随机密码 $i: $password" + echo "Random password$i: $password" done echo "" @@ -12673,46 +12674,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "Change time zone" while true; do clear - echo "系统时间信息" + echo "System time information" - # 获取当前系统时区 + # Get the current system time zone local timezone=$(current_timezone) - # 获取当前系统时间 + # Get the current system time local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # Show time zone and time + echo "Current system time zone:$timezone" + echo "Current system time:$current_time" echo "" - echo "时区切换" + echo "Time zone switching" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + echo "Asia" + echo "1. Shanghai time in China 2. Hong Kong time in China" + echo "3. Tokyo time in Japan 4. Seoul time in South Korea" + echo "5. Singapore time 6. Kolkata time in India" + echo "7. Dubai time in the UAE 8. Sydney time in Australia" + echo "9. Time in Bangkok, Thailand" echo "------------------------" - echo "欧洲" - echo "11. 英国伦敦时间 12. 法国巴黎时间" - echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" - echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" + echo "Europe" + echo "11. London time in the UK 12. Paris time in France" + echo "13. Berlin time, Germany 14. Moscow time, Russia" + echo "15. Utrecht time in the Netherlands 16. Madrid time in Spain" echo "------------------------" - echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "America" + echo "21. Western Time 22. Eastern Time" + echo "23. Canadian time 24. Mexican time" + echo "25. Brazil time 26. Argentina time" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31. UTC Global Standard Time" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in @@ -12755,21 +12756,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "Modify the host name" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "Current host name:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + read -e -p "Please enter the new host name (enter 0 to exit):" 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 等 + # Other systems, such as Debian, Ubuntu, CentOS, etc. hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12787,11 +12788,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "The host name has been changed to:$new_hostname" + send_stats "Host name has been changed" sleep 1 else - echo "已退出,未更改主机名。" + echo "Exited, hostname not changed." break fi done @@ -12799,32 +12800,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "Change the system update source" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "Select the update source area" + echo "Connect to LinuxMirrors to switch system update source" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas Regions" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "Enter your choice:" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "Default source in mainland China" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "Source of education in mainland China" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "Overseas origin" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "Canceled" ;; esac @@ -12832,62 +12833,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "Timing task management" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "Timed task list" crontab -l echo "" - echo "操作" + echo "operate" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1. Add timing tasks 2. Delete timing tasks 3. Edit timing tasks" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "Please enter the execution command for the new task:" newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1. Monthly Tasks 2. Weekly Tasks" + echo "3. Daily tasks 4. Hourly tasks" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "Please enter your selection:" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + read -e -p "Choose what day of each month to perform tasks? (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) - read -e -p "选择周几执行任务? (0-6,0代表星期日): " weekday + read -e -p "Choose what week to perform the task? (0-6, 0 represents Sunday):" weekday (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "选择每天几点执行任务?(小时,0-23): " hour + read -e -p "Choose what time to perform tasks every day? (Hours, 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "Enter what minute of the hour to perform the task? (mins, 0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "Add timed tasks" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "Please enter the keywords that need to be deleted:" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "Delete timing tasks" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "Edit timing tasks" ;; *) break # 跳出循环,退出菜单 @@ -12899,32 +12900,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "Local host parsing" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "Native host parsing list" + echo "If you add parse matches here, dynamic parsing will no longer be used" cat /etc/hosts echo "" - echo "操作" + echo "operate" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1. Add a new parsing 2. Delete the parsing address" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "Please enter your selection:" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "Please enter a new parsing record Format: 110.25.5.33 kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "Local host parsing has been added" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "Local host parsing and deletion" ;; *) break # 跳出循环,退出菜单 @@ -12935,7 +12936,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "ssh defense" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12947,20 +12948,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH Defense Program$check_docker" + echo "fail2ban is an SSH tool to prevent brute force" + echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1. Install the defense program" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2. View SSH interception records" + echo "3. Real-time log monitoring" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. Uninstall the defense program" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) install_docker @@ -12983,7 +12984,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban defense program has been uninstalled" ;; *) break @@ -12996,47 +12997,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "Current limit shutdown function" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "Current limit shutdown function" + echo "Video introduction: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "Current traffic usage, restarting the server traffic calculation will be cleared!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" + echo -e "${gl_kjlan}Total send:${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # Check if the Limiting_Shut_down.sh file exists if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # Get the value of threshold_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}" + echo -e "${gl_lv}The current set entry-station current limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" + echo -e "${gl_lv}The current outbound current limit threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}当前未启用限流关机功能${gl_bai}" + echo -e "${gl_hui}Current limit shutdown function is not enabled${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "The system will detect whether the actual traffic reaches the threshold every minute, and the server will be automatically shut down after it arrives!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1. Turn on the current limit shutdown function 2. Deactivate the current limit shutdown function" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "Please enter your selection:" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # Enter the new virtual memory size + echo "If the actual server has 100G traffic, the threshold can be set to 95G and shut down the power in advance to avoid traffic errors or overflows." + read -e -p "Please enter the incoming traffic threshold (unit is G, default is 100G):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "Please enter the outbound traffic threshold (unit is G, default is 100G):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "Please enter the traffic reset date (default reset on the 1st of each month):" cz_day cz_day=${cz_day:-1} cd ~ @@ -13049,15 +13050,15 @@ EOF (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 "限流关机已设置" + echo "Current limit shutdown has been set" + send_stats "Current limit shutdown has been set" ;; 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 "已关闭限流关机功能" + echo "Current limit shutdown function has been turned off" ;; *) break @@ -13070,40 +13071,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "Private key login" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ROOT private key login mode" + echo "Video introduction: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "A key pair will be generated, a more secure way to SSH login" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1. Generate a new key 2. Import an existing key 3. View the native key" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "Please enter your selection:" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "Generate a new key" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "Import an existing public key" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "View the local secret key" echo "------------------------" - echo "公钥信息" + echo "Public key information" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "Private key information" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13119,18 +13120,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "Telegram warning" + echo "TG-bot monitoring and early warning function" + echo "Video introduction: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "You need to configure the tg robot API and the user ID to receive early warnings to realize real-time monitoring and early warning of native CPU, memory, hard disk, traffic, and SSH login" + echo "After reaching the threshold, the user will be sent to the user" + echo -e "${gl_hui}- Regarding traffic, restarting the server will recalculate-${gl_bai}" + read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "Telegram warning is enabled" cd ~ install nano tmux bc jq check_crontab_installed @@ -13152,7 +13153,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # Add to ~/.profile file 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 @@ -13163,21 +13164,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-bot early warning system has been started" + 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 "Canceled" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + send_stats "Fix high-risk vulnerabilities in SSH" cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/upgrade_openssh9.8p1.sh chmod +x ~/upgrade_openssh9.8p1.sh @@ -13221,7 +13222,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + send_stats "Command line history" 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; } @@ -13244,61 +13245,61 @@ EOF 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "Message board" + echo "The technology lion message board has been moved to the official community! Please leave a message in the official community!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + send_stats "One-stop tuning" + echo "One-stop system optimization" 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + echo "The following will be operated and optimized" + echo "1. Update the system to the latest" + echo "2. Clean up system junk files" + echo -e "3. Set up virtual memory${gl_huang}1G${gl_bai}" + echo -e "4. Set the SSH port number to${gl_huang}5522${gl_bai}" + echo -e "5. Open all ports" + echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" + echo -e "7. Set the time zone to${gl_huang}Shanghai${gl_bai}" + echo -e "8. Automatically optimize DNS address${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" + echo -e "9. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "10. Switch to kernel parameter optimization in Linux system${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "Are you sure to have one-click maintenance? (Y/N):" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "One-stop tuning start" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + echo -e "[${gl_lv}OK${gl_bai}] 2/10. Clean up system junk files" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. 设置虚拟内存${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 3/10. Set up virtual memory${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 -e "[${gl_lv}OK${gl_bai}] 4/10. Set the SSH port number to${gl_huang}5522${gl_bai}" echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}] 5/10. 开放所有端口" + echo -e "[${gl_lv}OK${gl_bai}] 5/10. Open all ports" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. 开启${gl_huang}BBR${gl_bai}加速" + echo -e "[${gl_lv}OK${gl_bai}] 6/10. Open${gl_huang}BBR${gl_bai}accelerate" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 7/10. Set the time zone to${gl_huang}Shanghai${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13315,25 +13316,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/10. Automatically optimize DNS address${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 -e "[${gl_lv}OK${gl_bai}] 9/10. Install the basic tools${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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Optimization of kernel parameters for Linux system" + echo -e "${gl_lv}One-stop system tuning has been completed${gl_bai}" ;; [Nn]) - echo "已取消" + echo "Canceled" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac @@ -13341,7 +13342,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "Restart the system" server_reboot ;; 100) @@ -13357,32 +13358,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "Privacy and Security" + echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "Current status:$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1. Turn on collection" + echo "2. Close the collection" echo "--------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "Please enter your selection:" 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 "隐私与安全已开启采集" + echo "Collection has been enabled" + send_stats "Privacy and security collection has been enabled" ;; 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 "隐私与安全已关闭采集" + echo "Collection closed" + send_stats "Privacy and Security have been closed for collection" ;; *) break @@ -13398,11 +13399,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "Uninstall tech lion script" + echo "Uninstall tech lion script" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Will completely uninstall the kejilion script and will not affect your other functions" + read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in [Yy]) @@ -13410,16 +13411,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "The script has been uninstalled, goodbye!" break_end clear exit ;; [Nn]) - echo "已取消" + echo "Canceled" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "Invalid selection, please enter Y or N." ;; esac ;; @@ -13429,7 +13430,7 @@ EOF ;; *) - echo "无效的输入!" + echo "Invalid input!" ;; esac break_end @@ -13447,187 +13448,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "File Manager" while true; do clear - echo "文件管理器" + echo "File Manager" echo "------------------------" - echo "当前路径" + echo "Current path" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1. Enter the directory 2. Create the directory 3. Modify the directory permissions 4. Rename the directory" + echo "5. Delete the directory 6. Return to the previous menu directory" echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11. Create a file 12. Edit a file 13. Modify file permissions 14. Rename a file" + echo "15. Delete the file" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21. Compress file directory 22. Unzip file directory 23. Move file directory 24. Copy file directory" + echo "25. Pass the file to another server" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. Return to the previous menu" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "Please enter your selection:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "Please enter the directory name:" dirname + cd "$dirname" 2>/dev/null || echo "Unable to enter the directory" + send_stats "Go to the directory" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + read -e -p "Please enter the directory name to create:" dirname + mkdir -p "$dirname" && echo "Directory created" || echo "Creation failed" + send_stats "Create a directory" ;; 3) # 修改目录权限 - read -e -p "请输入目录名: " dirname - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$dirname" && echo "权限已修改" || echo "修改失败" - send_stats "修改目录权限" + read -e -p "Please enter the directory name:" dirname + read -e -p "Please enter permissions (such as 755):" perm + chmod "$perm" "$dirname" && echo "Permissions have been modified" || echo "Modification failed" + send_stats "Modify directory permissions" ;; 4) # 重命名目录 - read -e -p "请输入当前目录名: " current_name - read -e -p "请输入新目录名: " new_name - mv "$current_name" "$new_name" && echo "目录已重命名" || echo "重命名失败" - send_stats "重命名目录" + read -e -p "Please enter the current directory name:" current_name + read -e -p "Please enter the new directory name:" new_name + mv "$current_name" "$new_name" && echo "Directory has been renamed" || echo "Rename failed" + send_stats "Rename the directory" ;; 5) # 删除目录 - read -e -p "请输入要删除的目录名: " dirname - rm -rf "$dirname" && echo "目录已删除" || echo "删除失败" - send_stats "删除目录" + read -e -p "Please enter the directory name to delete:" dirname + rm -rf "$dirname" && echo "Directory has been deleted" || echo "Deletion failed" + send_stats "Delete Directory" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "Return to the previous menu directory" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "Please enter the file name to create:" filename + touch "$filename" && echo "File created" || echo "Creation failed" + send_stats "Create a file" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "Please enter the file name to edit:" filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "Edit files" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + read -e -p "Please enter the file name:" filename + read -e -p "Please enter permissions (such as 755):" perm + chmod "$perm" "$filename" && echo "Permissions have been modified" || echo "Modification failed" + send_stats "Modify file permissions" ;; 14) # 重命名文件 - read -e -p "请输入当前文件名: " current_name - read -e -p "请输入新文件名: " new_name - mv "$current_name" "$new_name" && echo "文件已重命名" || echo "重命名失败" - send_stats "重命名文件" + read -e -p "Please enter the current file name:" current_name + read -e -p "Please enter a new file name:" new_name + mv "$current_name" "$new_name" && echo "File renamed" || echo "Rename failed" + send_stats "Rename the file" ;; 15) # 删除文件 - read -e -p "请输入要删除的文件名: " filename - rm -f "$filename" && echo "文件已删除" || echo "删除失败" - send_stats "删除文件" + read -e -p "Please enter the file name to delete:" filename + rm -f "$filename" && echo "File deleted" || echo "Deletion failed" + send_stats "Delete files" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "Please enter the file/directory name to be compressed:" name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "Compressed to$name.tar.gz" || echo "Compression failed" + send_stats "Compressed files/directories" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "Please enter the file name (.tar.gz):" filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "Decompressed$filename" || echo "Decompression failed" + send_stats "Unzip files/directories" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "Please enter the file or directory path to move:" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "Error: The file or directory does not exist." + send_stats "Failed to move a file or directory: The file or directory does not exist" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "Please enter the target path (including the new file name or directory name):" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "Error: Please enter the target path." + send_stats "Moving file or directory failed: The destination path is not specified" continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "The file or directory has been moved to$dest_path" || echo "Failed to move files or directories" + send_stats "Move files or directories" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "Please enter the file or directory path to copy:" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "Error: The file or directory does not exist." + send_stats "Failed to copy a file or directory: The file or directory does not exist" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "Please enter the target path (including the new file name or directory name):" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "Error: Please enter the target path." + send_stats "Failed to copy file or directory: Destination path not specified" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # Use the -r option to copy the directory recursively + cp -r "$src_path" "$dest_path" && echo "The file or directory has been copied to$dest_path" || echo "Failed to copy a file or directory" + send_stats "Copy files or directories" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "Please enter the file path to be transferred:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "Error: The file does not exist." + send_stats "Failed to transfer the file: The file does not exist" continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "Please enter the remote server IP:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "Error: Please enter the remote server IP." + send_stats "File transfer failed: Remote server IP was not entered" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "Please enter the remote server username (default root):" remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "Please enter the remote server password:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "Error: Please enter the remote server password." + send_stats "File transfer failed: Remote server password not entered" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + read -e -p "Please enter the login port (default 22):" remote_port remote_port=${remote_port:-22} - # 清除已知主机的旧条目 + # Clear old entries for known hosts ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 等待时间 - # 使用scp传输文件 + # Transfer files using scp scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}The script has been updated to the latest version!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "The script is up to date$sh_v_new" break_end ~/kejilion.sh exit @@ -13925,15 +13926,15 @@ while true; do (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 "开启脚本自动更新" + echo -e "${gl_lv}Automatic update is enabled, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" + send_stats "Turn on automatic script update" break_end ;; 3) clear (crontab -l | grep -v "kejilion.sh") | crontab - - echo -e "${gl_lv}自动更新已关闭${gl_bai}" - send_stats "关闭脚本自动更新" + echo -e "${gl_lv}Automatic update is closed${gl_bai}" + send_stats "Close script automatic update" break_end ;; *) @@ -13955,41 +13956,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "Technology lion script toolbox v$sh_v" +echo -e "Command line input${gl_huang}k${gl_kjlan}Quickly start scripts${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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}1. ${gl_bai}System information query" +echo -e "${gl_kjlan}2. ${gl_bai}System update" +echo -e "${gl_kjlan}3. ${gl_bai}System Cleanup" +echo -e "${gl_kjlan}4. ${gl_bai}Basic tools" +echo -e "${gl_kjlan}5. ${gl_bai}BBR Management" +echo -e "${gl_kjlan}6. ${gl_bai}Docker Management" +echo -e "${gl_kjlan}7. ${gl_bai}WARP Management" +echo -e "${gl_kjlan}8. ${gl_bai}Test script collection" +echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Script Collection" +echo -e "${gl_huang}10. ${gl_bai}LDNMP website building" +echo -e "${gl_kjlan}11. ${gl_bai}Application Market" +echo -e "${gl_kjlan}12. ${gl_bai}Backend workspace" +echo -e "${gl_kjlan}13. ${gl_bai}System Tools" +echo -e "${gl_kjlan}14. ${gl_bai}Server cluster control" +echo -e "${gl_kjlan}15. ${gl_bai}Advertising column" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}p. ${gl_bai}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu server opening script" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${gl_bai}脚本更新" +echo -e "${gl_kjlan}00. ${gl_bai}Script update" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}0. ${gl_bai}退出脚本" +echo -e "${gl_kjlan}0. ${gl_bai}Exit script" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "Please enter your selection:" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 2) clear ; send_stats "System update" ; linux_update ;; + 3) clear ; send_stats "System Cleanup" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; 6) linux_docker ;; - 7) clear ; send_stats "warp管理" ; install wget + 7) clear ; send_stats "warp management" ; install wget wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh ; bash menu.sh [option] [lisence/url/token] ;; 8) linux_test ;; @@ -14000,13 +14001,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu server opening script" ; 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 "无效的输入!" ;; + *) echo "Invalid input!" ;; esac break_end done @@ -14014,68 +14015,68 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "k command reference use case" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav | k 命令收藏夹" -echo "应用市场管理 k app" -echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "The following is the k command reference use case:" +echo "Start script k" +echo "Install software package k install nano wget | k add nano wget | k Install nano wget" +echo "Uninstall the package k remove nano wget | k del nano wget | k uninstall nano wget | k Uninstall nano wget" +echo "Update system k update | k update" +echo "Clean system garbage k clean | k clean" +echo "Reinstall the system panel k dd | k Reinstall" +echo "bbr3 control panel k bbr3 | k bbrv3" +echo "Kernel Tuning Panel k nhyh | k kernel optimization" +echo "Set virtual memory k swap 2048" +echo "Set virtual time zone k time Asia/Shanghai | k time zone Asia/Shanghai" +echo "System Recycling Bin k trash | k hsz | k Recycling Bin" +echo "System backup function k backup | k bf | k backup" +echo "ssh remote connection tool k ssh | k remote connection" +echo "rsync remote synchronization tool k rsync | k remote synchronization" +echo "Hard disk management tool k disk | k hard disk management" +echo "Intranet penetration (server side) k frps" +echo "Intranet penetration (client) k frpc" +echo "Software start k start sshd | k start sshd" +echo "Software stop k stop sshd | k stop sshd" +echo "Software restart k restart sshd | k restart sshd" +echo "Software status view k status sshd | k status sshd" +echo "Software boot k enable docker | k autostart docke | k startup docker" +echo "Domain name certificate application k ssl" +echo "Domain name certificate expiration query k ssl ps" +echo "docker environment installation k docker install |k docker installation" +echo "docker container management k docker ps |k docker container" +echo "docker image management k docker img |k docker image" +echo "LDNMP site management k web" +echo "LDNMP cache cleanup k web cache" +echo "Install WordPress k wp |k wordpress |k wp xxx.com" +echo "Install the reverse proxy k fd |k rp |k anti-generation |k fd xxx.com" +echo "Install load balancing k loadbalance |k load balancing" +echo "Firewall panel k fhq |k firewall" +echo "Open port k dkdk 8080 |k Open port 8080" +echo "Close port k gbdk 7800 |k Close port 7800" +echo "Release IP k fxip 127.0.0.0/8 |k Release IP 127.0.0.0/8" +echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" +echo "Command favorites k fav | k command favorites" +echo "App Market Management k app" +echo "Application number quick management k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # 如果没有参数,运行交互式逻辑 + # If there are no parameters, run interactive logic kejilion_sh else - # 如果有参数,执行相应函数 + # If there are parameters, execute the corresponding function case $1 in install|add|安装) shift - send_stats "安装软件" + send_stats "Install software" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "Uninstall the software" remove "$@" ;; update|更新) @@ -14109,7 +14110,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "Timed rsync synchronization" run_task "$@" ;; @@ -14128,7 +14129,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ ports have been blocked from accessing the service" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14141,13 +14142,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "Quickly set up virtual memory" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "Quickly set time zone" set_timedate "$@" ;; @@ -14195,42 +14196,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "Software status view" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "Software startup" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "Software pause" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "Software restart" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "Software boots up" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "Check the certificate status" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "Quickly apply for a certificate" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "Quickly apply for a certificate" else k_info fi @@ -14240,15 +14241,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Quickly install docker" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "Quick container management" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "Quick mirror management" docker_image ;; *) @@ -14275,7 +14276,7 @@ else app) shift - send_stats "应用$@" + send_stats "Apply $@" linux_panel "$@" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index cab3eb64a..4f60c7f2e 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 定义一个函数来执行命令 +# コマンドを実行する関数を定義します run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 -# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 +# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! +# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 +# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用户同意条款 +# ユーザーに条件に同意するように促します UserLicenseAgreement() { clear - echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" - echo "首次使用脚本,请先阅读并同意用户许可协议。" - echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" + echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" + echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上条款?(y/n): " user_input + read -r -p "上記の条件に同意しますか? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "许可同意" + 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 "许可拒绝" + send_stats "許可の拒否" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安装 $package...${gl_bai}" + echo -e "${gl_huang}インストール$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "当前可用空间: $((available_space_mb/1024))G" - echo "最小需求空间: ${required_gb}G" - echo "无法继续安装,请清理磁盘空间后重试。" - send_stats "磁盘空间不足" + echo -e "${gl_huang}ヒント:${gl_bai}ディスクスペースが不十分です!" + echo "現在利用可能なスペース:$((available_space_mb/1024))g" + echo "最小需要スペース:${required_gb}G" + echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" + send_stats "ディスクスペースが不十分です" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸载 $package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return 1 fi done } -# 通用 systemctl 函数,适用于各种发行版 +# さまざまな分布に適したUniversal SystemCTL関数 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重启服务 +# サービスを再起動します restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1 服务已重启。" + echo "$1サービスは再開されました。" else - echo "错误:重启 $1 服务失败。" + echo "エラー:再起動$1サービスは失敗しました。" fi } -# 启动服务 +# サービスを開始します start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1 服务已启动。" + echo "$1サービスが開始されました。" else - echo "错误:启动 $1 服务失败。" + echo "エラー:開始$1サービスは失敗しました。" fi } -# 停止服务 +# サービスを停止します stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1 服务已停止。" + echo "$1サービスは停止しました。" else - echo "错误:停止 $1 服务失败。" + echo "エラー:停止します$1サービスは失敗しました。" fi } -# 查看服务状态 +# サービスのステータスを確認します status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1 服务状态已显示。" + echo "$1サービスステータスが表示されます。" else - echo "错误:无法显示 $1 服务状态。" + echo "エラー:表示できません$1サービスステータス。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME 已设置为开机自启。" + echo "$SERVICE_NAME電源を入れるように設定します。" } break_end() { - echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意键继续..." + echo -e "${gl_lv}操作が完了しました${gl_bai}" + echo "任意のキーを押して続行します..." read -n 1 -s -r -p "" echo "" clear @@ -352,10 +352,11 @@ kejilion() { stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) - install lsof + if [ -n "$containers" ]; then docker stop $containers else + install lsof for pid in $(lsof -t -i:$port); do kill -9 $pid done @@ -424,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}Docker環境のインストール...${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 @@ -499,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker容器管理" - echo "Docker容器列表" + send_stats "Dockerコンテナ管理" + echo "Dockerコンテナリスト" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "容器操作" + echo "コンテナ操作" echo "------------------------" - echo "1. 创建新的容器" + echo "1.新しいコンテナを作成します" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" - echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" + echo "3.指定された容器を停止します7。すべての容器を停止します" + echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" + echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11。指定されたコンテナを入力します12。コンテナログを表示します" + echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + send_stats "新しいコンテナを作成します" + read -e -p "作成コマンドを入力してください:" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を起動します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker start $dockername ;; 3) - send_stats "停止指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を停止します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定されたコンテナを削除します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "指定された容器を再起動します" + read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "すべてのコンテナを起動します" docker start $(docker ps -a -q) ;; 7) - send_stats "停止所有容器" + send_stats "すべてのコンテナを停止します" docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "すべてのコンテナを削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -564,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "すべてのコンテナを再起動します" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "コンテナを入力します" + read -e -p "コンテナ名を入力してください:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "コンテナログを表示します" + read -e -p "コンテナ名を入力してください:" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "コンテナネットワークを表示します" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -603,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "コンテナの占有を表示します" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "コンテナポートアクセスを許可します" + read -e -p "コンテナ名を入力してください:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -619,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "コンテナポートアクセスをブロックします" + read -e -p "コンテナ名を入力してください:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -639,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "Docker画像管理" + echo "Docker画像リスト" docker image ls echo "" - echo "镜像操作" + echo "ミラー操作" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1.指定された画像を取得する3。指定された画像を削除します" + echo "2。指定された画像4を更新します。すべての画像を削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "鏡を引っ張ります" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}画像を取得する:$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "画像を更新します" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}更新された画像:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "ミラーを削除します" + read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "すべての画像を削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -685,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -753,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "サポートされていない分布:$ID" return ;; esac else - echo "无法确定操作系统。" + echo "オペレーティングシステムを決定することはできません。" return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" } @@ -774,27 +775,27 @@ docker_ipv6_on() { 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处理配置文件的更新 + # JQを使用して、構成ファイルの更新を処理します local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # 現在の構成には既にIPv6設定があるかどうかを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # 構成を更新し、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}" + echo -e "${gl_huang}現在、IPv6アクセスが有効になっています${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -809,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # 構成ファイルが存在するかどうかを確認します if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}配置文件不存在${gl_bai}" + echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" return fi - # 读取当前配置 + # 現在の構成をお読みください local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 使用jq处理配置文件的更新 + # JQを使用して、構成ファイルの更新を処理します local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # 現在のIPv6ステータスを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # 元の構成を新しい構成と比較します if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" fi } @@ -869,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "少なくとも1つのポート番号を提供してください" 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" + echo "ポートが開かれました$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "ポートが開かれました" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + echo "少なくとも1つのポート番号を提供してください" 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" + echo "ポートは閉じた$port" fi done - # 删除已存在的规则(如果有) + # 既存のルールを削除する(ある場合) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # 最初に新しいルールを挿入します iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "ポートは閉じた" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "少なくとも1つの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" + echo "IPをリリースしました$ip" fi done save_iptables_rules - send_stats "已放行IP" + send_stats "IPをリリースしました" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + echo "少なくとも1つの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" + echo "IPブロック$ip" fi done save_iptables_rules - send_stats "已阻止IP" + send_stats "IPブロック" } @@ -989,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # 防御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 @@ -999,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "DDOS防御をオンにします" } -# 关闭DDoS防御 +# DDOS防御をオフにします disable_ddos_defense() { - # 关闭防御 DDoS + # 防御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 @@ -1014,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "DDOS防御をオフにします" } -# 管理国家IP规则的函数 +# 国家IPルールを管理する機能 manage_country_rules() { local action="$1" local country_code="$2" @@ -1032,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # IPSETが存在しない場合は作成します if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IPエリアファイルをダウンロードします if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" exit 1 fi - # 将 IP 添加到 ipset + # IPSETにIPを追加します while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 使用 iptables 阻止 IP + # iptablesでIPをブロックします 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 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # 許可された国のIPSETを作成する(存在しない場合) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IPエリアファイルをダウンロードします if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" 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 + # IPSETにIPを追加します while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # 指定された国の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 地址" + echo "正常に許可されています$country_codeIPアドレス" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # 国の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 + # Ipsetを破壊します if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に持ち上げられました$country_codeIPアドレスの制限" ;; *) @@ -1115,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "高度なファイアウォール管理" + send_stats "高度なファイアウォール管理" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "ファイアウォール管理" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1.指定されたポート2を開きます。指定されたポートを閉じます" + echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" - echo "7. 清除指定IP" + echo "5。IPホワイトリスト6。IPブラックリスト" + echo "7.指定されたIPをクリアします" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. ping 12を許可します。Pingを無効にします" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" + echo "17.指定国でのIP制限をリリースします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "オープンポート番号を入力してください:" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "指定されたポートを開きます" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "閉じたポート番号を入力してください:" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "指定されたポートを閉じます" ;; 3) - # 开放所有端口 + # すべてのポートを開きます current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1163,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "すべてのポートを開きます" ;; 4) - # 关闭所有端口 + # すべてのポートを閉じます current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1179,40 +1180,40 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "すべてのポートを閉じます" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IPホワイトリスト + read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IPブラックリスト + read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip block_ip $c_ip ;; 7) - # 清除指定 IP - read -e -p "请输入清除的IP: " d_ip + # 指定された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" + send_stats "指定されたIPをクリアします" ;; 11) - # 允许 PING + # pingを許可します 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 "允许PING" + send_stats "pingを許可します" ;; 12) - # 禁用 PING + # pingを無効にします 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 "禁用PING" + send_stats "pingを無効にします" ;; 13) enable_ddos_defense @@ -1222,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "許可された国$country_codeIP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "国をブロックします$country_codeIP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "国をきれいにします$country_codeIP" ;; *) @@ -1256,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 現在のシステムですべてのスワップパーティションを取得します local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # 反復して、すべてのスワップパーティションを削除します for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # /swapfileが使用されなくなったことを確認してください swapoff /swapfile - # 删除旧的 /swapfile + # 古い /swapfileを削除します rm -f /swapfile - # 创建新的 swap 分区 + # 新しいスワップパーティションを作成します fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1287,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" } @@ -1297,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# 仮想メモリを作成する必要があるかどうかを判断します [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1313,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # 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版本 + # 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版本 + # 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版本 + # 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}" @@ -1340,7 +1341,7 @@ ldnmp_v() { 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 @@ -1349,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # 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 文件中进行替换 + # 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 @@ -1398,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP環境がインストールされています" echo "------------------------" ldnmp_v @@ -1415,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "更新タスクが更新されました" } @@ -1452,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yuming公開鍵情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}証明書ストレージパス${gl_bai}" + echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" + echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1469,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1485,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" + echo "サイト情報証明書の有効期限" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1525,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + send_stats "ドメイン名証明書のアプリケーションは失敗しました" + echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" + echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" + echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" + echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" + echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" + echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" + echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" break_end clear - echo "请再次尝试部署 $webname" + echo "もう一度展開してみてください$webname" add_yuming install_ssltls certs_status @@ -1548,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "ドメイン名の再利用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1557,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1622,8 +1623,8 @@ nginx_upgrade() { 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}完成" + send_stats "更新します$ldnmp_pods" + echo "更新します${ldnmp_pods}仕上げる" } @@ -1642,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "ログイン情報:" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "起動する$ldnmp_pods" } @@ -1656,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # 構成ファイルが存在するかどうかを確認します if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # ゾーン_idsを配列に変換します ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # キャッシュをクリーニングするかどうかをユーザーに促します + 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 + echo "CF情報が保存されます$CONFIG_FILE、後でCF情報を変更できます" + read -e -p "API_TOKENを入力してください:" API_TOKEN + read -e -p "CFユーザ​​ー名を入力してください:" EMAIL + read -e -p "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" fi fi - # 循环遍历每个 zone_id 并执行清除缓存命令 + # 各ZONE_IDをループして、Clear Cacheコマンドを実行します for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + echo "ゾーン_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" \ @@ -1686,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "キャッシュクリアリクエストが送信されました。" } web_cache() { - send_stats "清理站点缓存" + send_stats "サイトキャッシュをクリーンアップします" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1702,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "サイトデータを削除します" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + 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" + # エラーを避けるために、データベースを削除する前にデータベースが存在するかどうかを確認します + echo "データベースの削除:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1739,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # モードパラメーターに従ってWAFをオンまたはオフにすることを決定します if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # 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:加上注释 + # 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' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1802,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 古い定義を削除します sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 「Happy Publishing」で行の前に新しい定義を挿入する awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1829,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 古い定義を削除します sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 「Happy Publishing」で行の前に新しい定義を挿入する awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1857,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # Brotliをオンにする:コメントを削除します sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1871,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # Brotliを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1887,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1913,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # ZSTDをオンにしてください:コメントを削除します sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1928,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # ZSTDを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1944,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1975,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "無効なパラメーター:「オン」または「オフ」を使用します" return 1 fi @@ -1989,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_waf_status check_cf_mode @@ -2003,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" + echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21。CloudFlareモード22。5秒シールドの高負荷" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31。WAF32をオンにしてください。WAFをオフにします" + echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" echo "------------------------" - echo "9. 卸载防御程序" + echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2081,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防衛プログラムがアンインストールされています" ;; 11) @@ -2096,11 +2097,11 @@ web_security() { ;; 21) - send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "CloudFlareモード" + echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください:" 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 @@ -2115,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "5秒シールドでの高負荷" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "CFパラメーターを取得します:" + echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" + echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID cd ~ install jq bc @@ -2146,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "高負荷自動シールドオープニングスクリプトが追加されました" else - echo "自动开盾脚本已存在,无需添加" + echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "サイトWAFが有効になっています" + send_stats "サイトWAFが有効になっています" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "サイトWAFは閉鎖されています" + send_stats "サイトWAFは閉鎖されています" ;; 33) @@ -2188,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# 現在のworker_processesの設定値を取得します current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# 値に応じてモード情報を設定します if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2207,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # Brotliが有効であり、コメントされていないかどうかを確認してください if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # GZIPが有効になっており、コメントされていないかどうかを確認してください if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2237,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "LDNMP環境を最適化します" + echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1。標準モード2。高性能モード(推奨2H4g以上)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" + echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" + echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "サイト標準モード" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2275,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2287,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP環境は標準モードに設定されています" ;; 2) - send_stats "站点高性能模式" + send_stats "サイトの高性能モード" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2315,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2325,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP環境は、高性能モードに設定されています" ;; 3) @@ -2385,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker = "$ {gl_lv} $ {gl_bai}インストール" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" # fi # } @@ -2395,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "アクセスアドレス:" ip_address @@ -2433,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 默认标签为 latest + # デフォルトのラベルは最新です [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # 公式画像のサポートを追加します [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # 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 @@ -2476,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # コンテナのIPアドレスを取得します local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2486,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # 他のすべてのIPSを確認してブロックします 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 + # 指定された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 + # ローカルネットワークを確認してリリースします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 + # 他のすべてのIPSを確認してブロックします 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 + # 指定された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 + # ローカルネットワークを確認してリリースします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 @@ -2523,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" save_iptables_rules } @@ -2534,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # コンテナのIPアドレスを取得します local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2544,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # 他のすべての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 的规则 + # 指定された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 的规则 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2563,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # 他のすべての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 的规则 + # 指定された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 的规则 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2584,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートはサービスにアクセスすることが許可されています" save_iptables_rules } @@ -2598,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法:block_host_port <ポート番号> <承認IP>" return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # 他のすべての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 访问 + # 指定された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 @@ -2625,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # 他のすべての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 访问 + # 指定された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+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" save_iptables_rules } @@ -2657,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # 他のすべての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 访问的规则 + # 指定された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 访问的规则 + # 他のすべての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 访问的规则 + # 指定された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+端口访问该服务" + echo "IP+ポートはサービスにアクセスすることが許可されています" save_iptables_rules } @@ -2746,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2770,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_nameインストール" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "インストール$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2785,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_nameインストール" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新$docker_name" + send_stats "更新します$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2799,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "アプリはアンインストールされています" + send_stats "アンインストール$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}ドメインアクセス設定" + send_stats "${docker_name}ドメインアクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IPアクセスを許可します${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2859,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2894,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}ドメインアクセス設定" + send_stats "${docker_name}ドメインアクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IPアクセスを許可します${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2994,17 +2995,17 @@ 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セッションを作成します tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3079,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "再起動" reboot ;; *) - echo "已取消" + echo "キャンセル" ;; esac @@ -3126,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "LDNMP環境を再度インストールできません" + echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" break_end linux_ldnmp fi @@ -3137,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "LDNMP環境をインストールします" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3154,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "Nginx環境をインストールします" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3168,8 +3169,8 @@ 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 "Nginxがインストールされています" +echo -e "現在のバージョン:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3180,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "LDNMP環境を最初にインストールしてください" ldnmp_install_all fi @@ -3190,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "最初にNGINX環境をインストールしてください" nginx_install_all fi @@ -3201,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "あなたの$webname建てられた!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webnameインストール情報は次のとおりです。" } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "あなたの$webname建てられた!" echo "https://$yuming" } @@ -3222,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3263,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "発生防止ポートを入力してください。" port fi nginx_install_status install_ssltls @@ -3296,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "スペースで区切られた複数の生成防止IP+ポートを入力してください(たとえば、127.0.0.1:3000 127.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3356,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMPサイト管理" + echo "LDNMP環境" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "サイト:${output}証明書の有効期限" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3374,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" - echo "3. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" + echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" + echo "5.アクセスログを表示6。エラーログを表示します" + echo "7.グローバル構成の編集8。サイト構成の編集" + echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20.指定されたサイトデータを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + 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 @@ -3411,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "サイトドメイン名を変更します" + echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" + read -e -p "古いドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status - # mysql替换 + # MySQLの交換 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3437,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3458,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "関連するサイトを作成します" + echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" + read -e -p "既存のドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status @@ -3475,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "アクセスログを表示します" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "エラーログを表示します" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "グローバル構成を編集します" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "サイト構成を編集します" + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3503,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "サイトデータを表示します" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3539,16 +3540,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" + echo "公式ウェブサイトの紹介:$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1。インストール2。管理3。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) check_disk_space 1 @@ -3557,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}控制" + send_stats "${panelname}コントロール" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}アンインストール" ;; *) break @@ -3614,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "FRPサーバーをインストールします" + # ランダムポートと資格情報を生成します local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3636,17 +3637,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # 出力生成情報 ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + 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 "FRPパネル情報" + echo "FRPパネルアドレス:http://$ipv4_address:$dashboard_port" + echo "FRPパネルのユーザー名:$dashboard_user" + echo "FRPパネルパスワード:$dashboard_pwd" echo open_port 8055 8056 @@ -3656,9 +3657,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "FRPクライアントをインストールします" + read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr + read -e -p "外部ネットワークドッキングトークンを入力してください:" token echo mkdir -p /home/frp @@ -3678,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "FRPイントラネットサービスを追加します" + # ユーザーにサービス名と転送情報を入力するように促します + read -e -p "サービス名を入力してください:" service_name + read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "イントラネットIPを入力してください[デフォルト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 + read -e -p "イントラネットポートを入力してください:" local_port + read -e -p "外部ネットワークポートを入力してください:" remote_port - # 将用户输入写入配置文件 + # ユーザー入力を構成ファイルに書き込みます cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3698,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # 出力生成情報 + echo "仕える$service_nameFRPC.TOMLに正常に追加されました" docker restart frpc @@ -3710,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "FRPイントラネットサービスを削除します" + # ユーザーに削除する必要があるサービス名を入力するように促します + read -e -p "削除する必要があるサービス名を入力してください:" service_name + # SEDを使用して、サービスとその関連構成を削除します sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "仕える$service_nameFRPC.TOMLから削除されました" docker restart frpc @@ -3725,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3746,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3755,11 +3756,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前の値をクリアします local_ip="" local_port="" remote_port="" @@ -3788,7 +3789,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスの情報を印刷します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3801,17 +3802,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# 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 的端口 + # 8055/8056以外のポートがあるかどうかを確認してください local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3820,18 +3821,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # 有効なポートがある場合にのみタイトルとコンテンツを表示します if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRPサービス外部アクセスアドレス:" - # 处理 IPv4 地址 + # IPv4アドレスを処理します for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # IPv6アドレスを処理する(存在する場合) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3840,7 +3841,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # HTTPS構成の処理 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3867,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3875,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRPサーバー$check_frp $update_status" + echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" + 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 "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00。サービスのステータスを更新します。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) install jq grep ss @@ -3901,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经安装完成" + echo "FRPサーバーがインストールされています" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3911,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经更新完成" + echo "FRPサーバーが更新されました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3922,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "ドメイン名アクセスへの逆イントラネット侵入サービス" + send_stats "FRP外部ドメイン名へのアクセス" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + 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 + send_stats "IPアクセスをブロックします" + echo "アンチジェネレーションドメイン名にアクセスした場合、この関数を使用して、より安全なIP+ポートアクセスをブロックできます。" + read -e -p "ブロックする必要があるポートを入力してください。" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "FRPサービスステータスを更新します" + echo "FRPサービスステータスは更新されました" ;; *) @@ -3965,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3973,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRPクライアント$check_frp $update_status" + echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" + echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" + echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3984,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) install jq grep ss @@ -3998,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4008,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经更新完成" + echo "FRPクライアントが更新されました" ;; 3) @@ -4019,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; 4) @@ -4065,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + 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 -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 "ダウンロードされたビデオリスト:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(まだありません)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" + echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "オプション番号を入力してください:" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "YT-DLPのインストール..." + echo "YT-DLPのインストール..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安装完成。按任意键继续..." + echo "インストールが完了しました。任意のキーを押して続行します..." read ;; 2) - send_stats "正在更新 yt-dlp..." - echo "正在更新 yt-dlp..." + send_stats "yt-dlpを更新..." + echo "yt-dlpを更新..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意键继续..." + echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "yt-dlpのアンインストール..." + echo "yt-dlpのアンインストール..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "アンインストールが完了しました。任意のキーを押して続行します..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + 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 "下载完成,按任意键继续..." ;; + read -e -p "ダウンロードが完了したら、任意のキーを押して続行します..." ;; 6) - send_stats "批量视频下载" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "#複数のビデオリンクアドレスを入力\ n#https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.Episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "バッチダウンロードを開始します..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4134,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + 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 "执行完成,按任意键继续..." ;; + read -e -p "実行が完了したら、キーを押して続行します..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + 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 "音频下载完成,按任意键继续..." ;; + read -e -p "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "ビデオを削除します" + read -e -p "削除ビデオの名前を入力してください:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4194,7 +4195,7 @@ set_timedate() { -# 修复dpkg中断问题 +# DPKG割り込みの問題を修正します fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4203,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}システムの更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4222,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi } @@ -4230,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4259,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "パッケージマネージャーのキャッシュを掃除します..." apk cache clean - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "APKキャッシュを削除してください..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4283,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "未使用の依存関係をクリーンアップ..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "パッケージマネージャーのキャッシュを掃除します..." pkg clean -y - echo "删除系统日志..." + echo "システムログを削除してください..." rm -rf /var/log/* - echo "删除临时文件..." + echo "一時ファイルを削除します..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi return @@ -4339,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "DNSを最適化します" while true; do clear - echo "优化DNS地址" + echo "DNSアドレスを最適化します" echo "------------------------" - echo "当前DNS地址" + echo "現在のDNSアドレス" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + 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 "2。国内のDNS最適化:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3。DNS構成を手動で編集します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4366,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "外国のDNS最適化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4374,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "国内のDNS最適化" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "DNS構成を手動で編集します" ;; *) break @@ -4402,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # PasswordAuthenticationが見つかった場合は、はいに設定します 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 设置为 yes + # 発見された場合、pubkeyauthenticationはyesに設定されています 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/' \ @@ -4416,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # PasswordAuthenticationも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" @@ -4427,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # バックアップSSH構成ファイル cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4440,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "SSHポートは次のように変更されています。$new_port" sleep 1 @@ -4458,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4470,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" return 1 fi @@ -4498,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" } @@ -4507,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}ルートログインがセットアップされます!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能では、ルートユーザーを実行する必要があります!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + 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 @@ -4537,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" + echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4587,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" 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 "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "Debian 13を再インストールします" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4609,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "Debian 12を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "Debian 11を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "Debian 10を再インストールします" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "Ubuntu 24.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "Ubuntu 22.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "Ubuntu 20.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "Ubuntu 18.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4660,7 +4661,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "Rockylinux10を再インストールします" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4668,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "Rockylinux9を再インストールします" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4676,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールします" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4684,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "alma9を再インストールします" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4692,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "Oracle10を再インストールします" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4700,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "Oracle9を再インストールします" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4708,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "Fedora42を再インストールします" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4716,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "Fedora41を再インストールします" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4724,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "CENTOS10を再インストールします" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4732,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "CENTOS9を再インストールします" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4740,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールします" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4748,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールします" dd_xitong_3 bash reinstall.sh arch reboot @@ -4756,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "Kaliを再インストールします" dd_xitong_3 bash reinstall.sh kali reboot @@ -4764,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "Openeulerを再インストールします" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4772,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "OpenSuseを再インストールします" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4780,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "飛ぶ牛をリロードします" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4789,7 +4790,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "Windows11を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4797,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "Windows 10を再インストールします" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "Windows 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 @@ -4811,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "Windows Server 22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "Windows Server 19を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "Windows Server 16を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4833,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "Windows11アームを再インストールします" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4850,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3管理" + send_stats "BBRV3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4863,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "XanmodのBBRV3カーネルをインストールしました" + echo "現在のカーネルバージョン:$kernel_version" echo "" - echo "内核管理" + echo "カーネル管理" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) @@ -4883,7 +4884,7 @@ bbrv3() { # 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:添加存储库 + # ステップ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+') @@ -4892,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "Xanmodカーネルが更新されました。再起動後に有効になります" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4902,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" server_reboot ;; @@ -4915,13 +4916,13 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "BBR3加速度をセットアップします" + echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "Debian/Ubuntuのみをサポートします" + echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) @@ -4929,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "オペレーティングシステムの種類を決定できません" break_end linux_Settings fi @@ -4945,7 +4946,7 @@ bbrv3() { # 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:添加存储库 + # ステップ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+') @@ -4956,17 +4957,17 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + 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 "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac fi @@ -4975,40 +4976,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # 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" + echo "サポートされていないオペレーティングシステム:$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # 検出されたオペレーティングシステム情報を印刷します + echo "検出されたオペレーティングシステム:$os_name $os_version" + # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + 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)..." + echo "Elrepoリポジトリ構成(バージョン9)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "サポートされていないシステムバージョン:$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします + echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" server_reboot } @@ -5016,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "レッドハットカーネル管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "Elrepo Kernelをインストールしました" + echo "現在のカーネルバージョン:$kernel_version" echo "" - echo "内核管理" + echo "カーネル管理" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "更新红帽内核" + 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 "卸载红帽内核" + echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" + send_stats "レッドハットカーネルをアンインストールします" server_reboot ;; @@ -5059,26 +5060,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" + echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "Red Hatカーネルをアップグレードします" server_reboot ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac fi @@ -5089,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5099,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "スキャンするディレクトリを指定してください。" return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + 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 命令参数 + # CLAMSCANコマンドパラメーターを作成します local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5120,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # Dockerコマンドを実行します docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5129,8 +5130,8 @@ clamav_scan() { 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}" + echo -e "${gl_lv}$@スキャンが完了し、ウイルスレポートが保存されます${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}ウイルスがある場合は、お願いします${gl_huang}scan.log${gl_lv}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" } @@ -5142,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "ウイルススキャン管理" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "クラマブウイルススキャンツール" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" + echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアを含む。" echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3。カスタムディレクトリスキャン${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "フルディスクスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5167,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5175,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "カスタムディレクトリスキャン" + read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5193,21 +5194,21 @@ clamav() { -# 高性能模式优化函数 +# 高性能モード最適化関数 optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5219,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 均衡模式优化函数 +# イコライゼーションモード最適化関数 optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5260,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # 透明なページを復元します echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # numaバランスを復元します sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# デフォルト設定関数を復元します restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}デフォルト設定に復元...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + 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}" + 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 @@ -5301,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}キャッシュ管理を復元します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" + # 透明なページを復元します echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 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}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5343,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}キャッシュ管理を最適化します...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU設定を最適化します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}その他の最適化...${gl_bai}" + # レイテンシを減らすために、大きな透明なページを無効にします echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # numaバランスを無効にします sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5363,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linuxカーネルチューニング管理" + echo "Linuxシステムにおけるカーネルパラメーターの最適化" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" + echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" + echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" + echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" + echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" + echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" + echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" echo "--------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "高性能モードの最適化" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "バランスモードの最適化" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "ウェブサイトの最適化モデル" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "ライブストリーミング最適化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "ゲームサーバーの最適化" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "デフォルト設定を復元します" ;; *) break @@ -5445,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end @@ -5454,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "サポートされていないシステム:$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "サポートされていないシステム、システムタイプは認識できません。" break_end fi } @@ -5474,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "システム言語を切り替えます" while true; do clear - echo "当前系统语言: $LANG" + echo "現在のシステム言語:$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1。英語2。簡素化された中国語3。伝統的な中国語" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "英語に切り替えます" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "簡素化された中国人に切り替えます" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "伝統的な中国人に切り替えます" ;; *) break @@ -5518,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" hash -r break_end @@ -5529,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "命令行美化工具" + send_stats "コマンドラインの美化ツール" while true; do clear - echo "命令行美化工具" + 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}#" @@ -5542,9 +5543,9 @@ shell_bianse() { 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 "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -5589,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "システムリサイクルステーション" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5604,17 +5605,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "現在のリサイクルビン${trash_status}" + echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" + echo "3。コンテンツを復元4。リサイクルビンをクリアします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -5622,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" sleep 2 ;; 2) @@ -5630,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + 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 已还原到主目录。" + echo "$file_to_restoreホームディレクトリに復元されました。" else - echo "文件不存在。" + echo "ファイルは存在しません。" fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "リサイクルビンがクリアされました。" fi ;; *) @@ -5657,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夹" +send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 创建备份 +# バックアップを作成します create_backup() { - send_stats "创建备份" + send_stats "バックアップを作成します" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # ユーザーにバックアップディレクトリを入力するように求めます + echo "バックアップ例を作成します:" + echo "- 単一のディレクトリをバックアップします: /var /www" + echo "- バックアップ複数のディレクトリ: /etc /home /var /log" + echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" + read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input - # 如果用户没有输入目录,则使用默认目录 + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5681,119 +5682,119 @@ create_backup() { "/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 "您选择的备份目录为:" + # ユーザーが選択したディレクトリを印刷します + echo "選択したバックアップディレクトリは次のとおりです。" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # バックアップを作成します + echo "バックアップを作成します$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # コマンドが成功しているかどうかを確認してください if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "バックアップの作成に失敗しました!" exit 1 fi } -# 恢复备份 +# バックアップを復元します restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "バックアップを復元します" + # 復元するバックアップを選択します + read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME - # 检查备份文件是否存在 + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "バックアップファイルは存在しません!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "バックアップの回復$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "バックアップと復元を正常に!" else - echo "备份恢复失败!" + echo "バックアップリカバリに失敗しました!" exit 1 fi } -# 列出备份 +# バックアップをリストします list_backups() { - echo "可用的备份:" + echo "利用可能なバックアップ:" ls -1 "$BACKUP_DIR" } -# 删除备份 +# バックアップを削除します delete_backup() { - send_stats "删除备份" + send_stats "バックアップを削除します" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME - # 检查备份文件是否存在 + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "バックアップファイルは存在しません!" exit 1 fi - # 删除备份 + # バックアップを削除します rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "バックアップは正常に削除されました!" else - echo "备份删除失败!" + echo "バックアップの削除が失敗しました!" exit 1 fi } -# 备份主菜单 +# バックアップメインメニュー linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "システムバックアップ機能" + echo "システムバックアップ機能" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } @@ -5805,56 +5806,56 @@ linux_backup() { -# 显示连接列表 +# 接続リストを表示します list_connections() { - echo "已保存的连接:" + 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 " - 用户名: root" - echo " - 端口: 22" + send_stats "新しい接続を追加します" + echo "新しい接続を作成する例:" + echo "- 接続名:my_server" + echo "- IPアドレス:192.168.1.100" + echo "- ユーザー名:root" + echo "- ポート:22" echo "------------------------" - read -e -p "请输入连接名称: " name - read -e -p "请输入IP地址: " ip - read -e -p "请输入用户名 (默认: root): " user + read -e -p "接続名を入力してください:" name + read -e -p "IPアドレスを入力してください:" ip + read -e -p "ユーザー名(デフォルト:root)を入力してください:" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "ポート番号を入力してください(デフォルト:22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "認証方法を選択してください:" + echo "1。パスワード" + echo "2。キー" + read -e -p "選択(1/2)を入力してください:" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" 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" @@ -5863,89 +5864,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "無効な選択!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "接続が保存されます!" } -# 删除连接 +# 接続を削除します delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "接続を削除します" + read -e -p "削除するには、接続番号を入力してください。" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + 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 "连接已删除!" + echo "接続が削除されました!" } -# 使用连接 +# 接続を使用します use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "接続を使用します" + read -e -p "使用するには、接続番号を入力してください。" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "エラー:対応する接続​​は見つかりませんでした。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + 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. 目标服务器是否允许使用密钥登录。" + 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 "エラー: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 服务是否正常运行。" + echo "接続に失敗しました!以下を確認してください。" + echo "1.ユーザー名とパスワードが正しいかどうか。" + echo "2。ターゲットサーバーがパスワードログインを許可するかどうか。" + echo "3.ターゲットサーバーのSSHサービスが正常に実行されているかどうか。" fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "SSHリモート接続ツール" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5957,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSHリモート接続ツール" + echo "SSHを介して他のLinuxシステムに接続できます" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無効な選択、もう一度やり直してください。" ;; esac done } @@ -5987,156 +5988,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 利用可能なハードディスクパーティションをリストします list_partitions() { - echo "可用的硬盘分区:" + echo "利用可能なハードディスクパーティション:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# パーティションをマウントします mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "パーティションをマウントします" + read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "パーティションはすでに取り付けられています!" return fi - # 创建挂载点 + # マウントポイントを作成します MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # パーティションをマウントします mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "パーティションマウントに正常に:$MOUNT_POINT" else - echo "分区挂载失败!" + echo "パーティションマウントは失敗しました!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# パーティションをアンインストールします unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "パーティションをアンインストールします" + read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "パーティションはマウントされていません!" return fi - # 卸载分区 + # パーティションをアンインストールします umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "パーティションのアンインストールに正常に:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "パーティションのアンインストールに失敗しました!" fi } -# 列出已挂载的分区 +# マウントされたパーティションをリストします list_mounted_partitions() { - echo "已挂载的分区:" + echo "マウントされたパーティション:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# フォーマットパーティション format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "フォーマットパーティション" + read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区是否已经挂载 + # パーティションが既にマウントされているかどうかを確認してください if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "パーティションがマウントされました。最初にアンインストールしてください!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # ファイルシステムタイプを選択します + echo "ファイルシステムタイプを選択してください:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + 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 ;; + *) echo "無効な選択!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # フォーマットを確認します + read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作已取消。" + echo "操作はキャンセルされました。" return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # フォーマットパーティション + echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "パーティション形式は成功しました!" else - echo "分区格式化失败!" + echo "パーティションのフォーマットが失敗しました!" fi } -# 检查分区状态 +# パーティションステータスを確認します check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "パーティションステータスを確認します" + read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION - # 检查分区是否存在 + # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "パーティションは存在しません!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # パーティションステータスを確認します + echo "パーティション /dev /$PARTITION状態:" fsck "/dev/$PARTITION" } -# 主菜单 +# メインメニュー disk_manager() { - send_stats "硬盘管理功能" + send_stats "ハードディスク管理機能" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "ハードディスクパーティション管理" + echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" + echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6145,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } -# 显示任务列表 +# タスクリストを表示します list_tasks() { - echo "已保存的同步任务:" + 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 " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + 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 + 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 + echo "認証方法を選択してください:" + echo "1。パスワード" + echo "2。キー" + read -e -p "(1/2)を選択してください:" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" 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" @@ -6210,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "無効なキーコンテンツ!" return fi ;; *) - echo "无效的选择!" + echo "無効な選択!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + 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" ;; + *) 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 "任务已保存!" + echo "タスクが節約されました!" } -# 删除任务 +# タスクを削除します delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "同期タスクを削除します" + read -e -p "削除するには、タスク番号を入力してください。" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + 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 "任务已删除!" + echo "削除されたタスク!" } run_task() { - send_stats "执行同步任务" + send_stats "同期タスクを実行します" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # パラメーターを分析します local direction="push" # 默认是推送到远端 local num @@ -6277,51 +6278,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # 着信タスク番号がない場合は、ユーザーに入力するように促します if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "実行するタスク番号を入力してください:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + 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" + echo "同期をローカルに引く:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # 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 "エラー: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" + echo "エラー:キーファイルが存在しません:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." chmod 600 "$password_or_key" fi @@ -6329,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同步完成!" + echo "同期は完了です!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "同期は失敗しました!以下を確認してください。" + echo "1。ネットワーク接続は正常ですか?" + echo "2。リモートホストにアクセスできますか?" + echo "3。認証情報は正しいですか?" + echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" fi } -# 创建定时任务 +# 時限タスクを作成します schedule_task() { - send_stats "添加同步定时任务" + send_stats "同期タイミングタスクを追加します" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "定期的に同期するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "エラー:有効なタスク番号を入力してください!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + echo "時限実行間隔を選択してください:" + echo "1)1時間に1回実行します" + echo "2)1日1回実行します" + echo "3)週に1回実行します" + read -e -p "オプションを入力してください(1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" @@ -6362,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) 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 "错误: 该任务的定时同步已存在!" + echo "エラー:このタスクのタイミング同期はすでに存在しています!" return fi - # 创建到用户的 crontab + # ユーザーにクロンタブを作成します (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "タイミングタスクが作成されました。$cron_job" } -# 查看定时任务 +# スケジュールされたタスクを表示します view_tasks() { - echo "当前的定时任务:" + echo "現在のタイミングタスク:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# タイミングタスクを削除します delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "同期タイミングタスクを削除します" + read -e -p "削除するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "エラー:有効なタスク番号を入力してください!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "削除されたタスク番号$numタイミングタスク" } -# 任务管理主菜单 +# タスク管理メインメニュー rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "RSYNCリモート同期ツール" + echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1.新しいタスクを作成します2。タスクを削除します" + echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" + echo "5.タイミングタスクを作成6.タイミングタスクを削除します" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6430,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無効な選択、もう一度やり直してください。" ;; esac - read -e -p "按回车键继续..." + read -e -p "Enterを押して続行します..." done } @@ -6447,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "システム情報クエリ" ip_address @@ -6497,41 +6498,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + 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}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}ホスト名:${gl_bai}$hostname" + echo -e "${gl_kjlan}システムバージョン:${gl_bai}$os_info" + echo -e "${gl_kjlan}Linuxバージョン:${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}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}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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}オペレーター:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}ランタイム:${gl_bai}$runtime" echo @@ -6544,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats「基本ツール」 + echo -e "基本的なツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}カールダウンロードツール${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}WGETダウンロードツール${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" + echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" + echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" + echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + 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}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}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}41. ${gl_bai}指定されたツールをインストールします${gl_kjlan}42. ${gl_bai}指定されたツールをアンインストールします" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" curl --help - send_stats "安装curl" + send_stats "カールをインストールします" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" wget --help - send_stats "安装wget" + send_stats "WGETをインストールします" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" sudo --help - send_stats "安装sudo" + send_stats "sudoをインストールします" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" socat -h - send_stats "安装socat" + send_stats "SOCATをインストールします" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "HTOPをインストールします" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "IFTOPをインストールします" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" unzip - send_stats "安装unzip" + send_stats "unzipをインストールします" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" tar --help - send_stats "安装tar" + send_stats "タールをインストールします" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" tmux --help - send_stats "安装tmux" + send_stats "tmuxをインストールします" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "ツールがインストールされており、使用方法は次のとおりです。" ffmpeg --help - send_stats "安装ffmpeg" + send_stats "ffmpegをインストールします" ;; 11) @@ -6656,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "BTOPをインストールします" ;; 12) clear @@ -6665,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "レンジャーをインストールします" ;; 13) clear @@ -6674,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "NCDUをインストールします" ;; 14) clear @@ -6683,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "FZFをインストールします" ;; 15) clear @@ -6692,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "VIMをインストールします" ;; 16) clear @@ -6701,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "ナノをインストールします" ;; @@ -6712,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "gitをインストールします" ;; 21) @@ -6720,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "cmatrixをインストールします" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "SLをインストールします" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "バステットをインストールします" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "nsnakeをインストールします" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "Ninvadersをインストールします" ;; 31) clear - send_stats "全部安装" + 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 "全部安装(不含游戏和屏保)" + send_stats "すべてをインストールします(ゲームやスクリーンセーバーを除く)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + 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 + read -e -p "インストールされているツール名(Wget Curl Sudo htop)を入力してください。" installname install $installname - send_stats "安装指定软件" + send_stats "指定されたソフトウェアをインストールします" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename remove $removename - send_stats "卸载指定软件" + send_stats "指定されたソフトウェアをアンインストールします" ;; 0) @@ -6788,7 +6789,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -6802,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr管理" + 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 "現在のTCPブロッキングアルゴリズム:$congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "AlpineはBBR3を有効にします" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6867,21 +6868,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}当前备份列表:${NC}" - ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + echo -e "${BLUE}現在のバックアップリスト:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし" } # ---------------------------- - # 备份 + # バックアップ # ---------------------------- backup_docker() { - send_stats "Docker备份" + send_stats "Dockerバックアップ" - echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}" docker ps --format '{{.Names}}' - read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + read -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers install tar jq gzip install_docker @@ -6892,7 +6893,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}コンテナは見つかりません${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6900,28 +6901,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" + echo "#自動的に生成された復元スクリプト" >> "$RESTORE_SCRIPT" - # 记录已打包过的 Compose 项目路径,避免重复打包 + # パッケージ化されたプロジェクトのパスを記録して、パッケージの重複を避ける declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}备份容器: $c${NC}" + echo -e "${GREEN}バックアップコンテナ:$c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" + echo -e "${BLUE}検出されました$cはい、Docker-Composeコンテナ${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未检测到 compose 目录,请手动输入路径: " project_dir + read -p "Compose Directoryは検出されません。手動でパスを入力してください。" project_dir fi - # 如果该 Compose 项目已经打包过,跳过 + # Composeプロジェクトがパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}プロジェクトを作成する[$project_name]バックアップ、複製パッケージをスキップ...${NC}" continue fi @@ -6929,137 +6930,137 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" + echo "#docker-compose Recovery:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" + echo -e "${GREEN}プロジェクトを作成する[$project_name]パック:${project_dir}${NC}" else - echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" + echo -e "${RED}docker-compose.ymlが見つかりません、このコンテナをスキップしてください...${NC}" fi else - # 普通容器备份卷 + # 通常のコンテナバックアップボリューム local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "打包卷: $path" + echo "梱包ロール:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done - # 端口 + # ポート local PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 环境变量 + # 環境変数 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # 卷映射 + # ボリュームマッピング local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 镜像 + # 鏡 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" + echo -e "\ n#復元コンテナ:$c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # 备份 /home/docker 下的所有文件(不含子目录) + # /home /dockerのすべてのファイルをバックアップします(サブディレクトリを除く) if [ -d "/home/docker" ]; then - echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + echo -e "${BLUE}/home /dockerの下のファイルをバックアップ...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}/home /dockerの下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" - echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}バックアップが完了しました:${BACKUP_DIR}${NC}" + echo -e "${GREEN}利用可能な復元スクリプト:${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 还原 + # 削減 # ---------------------------- restore_docker() { - send_stats "Docker还原" - read -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Dockerの復元" + read -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } - echo -e "${BLUE}开始执行还原操作...${NC}" + echo -e "${BLUE}復元操作を開始します...${NC}" install tar jq gzip install_docker - # --------- 优先还原 Compose 项目 --------- + # ------------------------------ for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + [[ -z "$original_path" ]] && read -p "元のパスが見つかりませんでした。復元ディレクトリパスを入力してください。" original_path - # 检查该 compose 项目的容器是否已经在运行 + # Composeプロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" + echo -e "${YELLOW}プロジェクトを作成する[$project_name]すでにコンテナが走っています、復元をスキップします...${NC}" continue fi - read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + read -p "Composeプロジェクトの復元を確認します[$project_name]パスへ[$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "新しい復元パスを入力してください:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" + echo -e "${GREEN}プロジェクトを作成する[$project_name]減圧:$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" + echo -e "${GREEN}プロジェクトを作成する[$project_name]復元が完了しました!${NC}" fi done - # --------- 继续还原普通容器 --------- - echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" + # ------------------------------ + echo -e "${BLUE}通常のDockerコンテナを確認して復元します...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}处理容器: $container${NC}" + echo -e "${GREEN}コンテナの処理:$container${NC}" - # 检查容器是否已经存在且正在运行 + # 容器が既に存在し、実行中かどうかを確認してください if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" + echo -e "${YELLOW}容器 [$container]走っています、復元をスキップします...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}ミラー情報は見つかりませんでした、スキップ:$container${NC}"; continue; } - # 端口映射 + # ポートマッピング PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 环境变量 + # 環境変数 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # 卷映射 + 卷数据恢复 + # ボリュームマッピング +ボリュームデータリカバリ VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7070,32 +7071,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "恢复卷数据: $VOL_SRC" + echo "ボリュームデータの回復:$VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 删除已存在但未运行的容器 + # 既存のが実行されていないコンテナを削除します if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" + echo -e "${YELLOW}容器 [$container]存在しますが、実行していません。古いコンテナを削除してください...${NC}" docker rm -f "$container" fi - # 启动容器 - echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # コンテナを起動します + echo "restoreコマンドを実行します:docker run -d - name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}通常のコンテナのバックアップ情報は見つかりませんでした${NC}" - # 还原 /home/docker 下的文件 + # /home /dockerの下でファイルを復元します if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" + echo -e "${BLUE}/home /dockerの下でファイルを復元します...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" + echo -e "${GREEN}/home /dockerの下のファイルが復元されました${NC}" else - echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" + echo -e "${YELLOW}/home /dockerの下のファイルのバックアップは見つかりませんでした、スキップ...${NC}" fi @@ -7103,66 +7104,66 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 移動します # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "Dockerの移行" install jq - read -p "请输入要迁移的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + read -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } - read -p "目标服务器IP: " TARGET_IP - read -p "目标服务器SSH用户名: " TARGET_USER + read -p "ターゲットサーバーIP:" TARGET_IP + read -p "ターゲットサーバーSSHユーザー名:" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}传输备份中...${NC}" + echo -e "${YELLOW}バックアップを転送...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 使用密钥登录 + # キーでログインします scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 删除备份 + # バックアップを削除します # ---------------------------- delete_backup() { - send_stats "Docker备份文件删除" - read -p "请输入要删除的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Dockerバックアップファイルの削除" + read -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" } # ---------------------------- - # 主菜单 + # メインメニュー # ---------------------------- main_menu() { - send_stats "Docker备份迁移还原" + send_stats "Dockerバックアップの移行と復元" while true; do clear echo "------------------------" - echo -e "Docker备份/迁移/还原工具" + echo -e "Dockerバックアップ/移行/復元ツール" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. 备份docker项目" - echo -e "2. 迁移docker项目" - echo -e "3. 还原docker项目" - echo -e "4. 删除docker项目的备份文件" + echo -e "1。Dockerプロジェクトをバックアップします" + echo -e "2。Dockerプロジェクトを移行します" + echo -e "3. Dockerプロジェクトを復元します" + echo -e "4. Dockerプロジェクトのバックアップファイルを削除します" echo "------------------------" - echo -e "0. 返回上一级菜单" + echo -e "0。前のメニューに戻ります" echo "------------------------" - read -p "请选择: " choice + read -p "選択してください:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}無効なオプション${NC}" ;; esac break_end done @@ -7179,38 +7180,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" + # send_stats「Docker Management」 echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" + echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" + 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}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}11. ${gl_bai}docker-ipv6アクセスを有効にします" + echo -e "${gl_kjlan}12. ${gl_bai}docker-ipv6アクセスを閉じます" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" - echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" + echo -e "${gl_kjlan}19. ${gl_bai}バックアップ/移行/復元Docker環境" + echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "Docker環境をインストールします" install_add_docker ;; @@ -7221,22 +7222,22 @@ linux_docker() { 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 "docker全局状态" - echo "Docker版本" + send_stats "Dockerグローバルステータス" + echo "Dockerバージョン" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7251,8 +7252,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Dockerネットワーク管理" + echo "Dockerネットワークリスト" echo "------------------------------------------------------------" docker network ls echo "" @@ -7276,36 +7277,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "ネットワーク操作" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1.ネットワークを作成します" + echo "2。インターネットに参加してください" + echo "3。ネットワークを終了します" + echo "4.ネットワークを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "ネットワークを作成します" + read -e -p "新しいネットワーク名を設定します:" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + 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 + send_stats "インターネットに参加してください" + read -e -p "出口ネットワーク名:" dockernetwork + read -e -p "これらのコンテナはネットワークを終了します(複数のコンテナ名はスペースで区切られています):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7314,8 +7315,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "ネットワークを削除します" + read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork docker network rm $dockernetwork ;; @@ -7329,29 +7330,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" - echo "Docker卷列表" + send_stats "Dockerボリューム管理" + echo "Dockerボリュームリスト" docker volume ls echo "" - echo "卷操作" + echo "ボリューム操作" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1.新しいボリュームを作成します" + echo "2。指定されたボリュームを削除します" + echo "3.すべてのボリュームを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + send_stats "新しいボリュームを作成します" + read -e -p "新しいボリューム名を設定します:" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7360,7 +7361,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "すべてのボリュームを削除します" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7369,7 +7370,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7382,7 +7383,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker清理" + send_stats "Dockerクリーニング" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7391,13 +7392,13 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 8) clear - send_stats "Docker源" + send_stats "Dockerソース" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7413,13 +7414,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker V6が開いています" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker V6レベル" docker_ipv6_off ;; @@ -7430,7 +7431,7 @@ linux_docker() { 20) clear - send_stats "Docker卸载" + send_stats "Dockerアンインストール" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7442,7 +7443,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7451,7 +7452,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7468,151 +7469,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # 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}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + 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ストリーミングメディアのロック解除検出" + echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" + echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" + echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" + echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" + echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" + echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" + echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}ハードウェアパフォーマンステスト" + echo -e "${gl_kjlan}21. ${gl_bai}YABSパフォーマンステスト" + echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPUパフォーマンステストスクリプト" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}包括的なテスト" + echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" + echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "CHATGPTはステータス検出のロックを解除します" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "リージョンストリーミングメディアのロック解除テスト" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "YeahWUストリーミングメディアのロック解除検出" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "XYKT_IP品質の身体検査スクリプト" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "MTR_TRACE 3ネットワークリターンラインテスト" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "SuperSpeed Three-Net速度測定" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace高速バックホールテストスクリプト" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "Nxtraceは、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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + 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 "広州通信:58.60.188.222" + echo "広州ユニコム:210.21.196.6" + echo "広州モバイル:120.196.165.24" + echo "成都通信:61.139.2.69" + echo "成都ユニコム:119.6.6.6" + echo "成都モバイル: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 + read -e -p "指定されたIPを入力してください:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "Ludashi2020 3ネットワークラインテスト" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "I-ABC多機能速度テストスクリプト" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "ネットワーク品質のテストスクリプト" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "YABSパフォーマンステスト" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "ベンチパフォーマンステスト" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + send_stats "SpiritySDX Fusion Monster Review" clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; @@ -7622,7 +7623,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7638,51 +7639,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + send_stats "Oracle Cloud Scriptコレクション" + echo -e "Oracle Cloud Scriptコレクション" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装闲置机器活跃脚本" - echo -e "${gl_kjlan}2. ${gl_bai}卸载闲置机器活跃脚本" + 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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + 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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + 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 + # ユーザーに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 + 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 + read -e -p "メモリの使用率を入力してください[デフォルト:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # Dockerコンテナを実行します docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7690,14 +7691,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "Oracle Cloudインストールアクティブスクリプト" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -7705,20 +7706,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" ;; 3) clear - echo "重装系统" + echo "システムを再インストールします" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + 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 + read -e -p "再インストールするシステムを選択してください:1。Debian12| 2。Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7730,28 +7731,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "選択の無効な、再入力してください。" ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + 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 "甲骨文云重装系统脚本" + send_stats "Oracle Cloud再インストールシステムスクリプト" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "この機能は開発段階にあるので、お楽しみに!" ;; 5) clear @@ -7761,15 +7762,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + send_stats "IPv6修正" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -7790,7 +7791,7 @@ docker_tato() { 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}" + 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 } @@ -7811,7 +7812,7 @@ 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" + echo -e "${gl_lv}環境がインストールされています${gl_bai}サイト:$outputデータベース:$db_output" fi fi @@ -7839,31 +7840,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP建站" - echo -e "${gl_huang}LDNMP建站" + # send_stats "ldnmp webサイトビルディング" + echo -e "${gl_huang}LDNMP Webサイトビルディング" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}安装LDNMP环境 ${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールします${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールします${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" + echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" + echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" + 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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}nginxのみをインストールします${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}サイトリダイレクト" + echo -e "${gl_huang}23. ${gl_bai}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" + echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" + echo -e "${gl_huang}27. ${gl_bai}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}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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -7877,10 +7878,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # ディスクフォーラム webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7903,21 +7904,21 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "データベースアドレス:MySQL" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:discuz_" ;; 4) clear - # 可道云桌面 + # Kedao Cloudデスクトップ webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7939,20 +7940,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "データベースアドレス:MySQL" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベース名:$dbname" + echo "Redisホスト:Redis" ;; 5) clear - # 苹果CMS + # Apple CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7978,24 +7979,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "データベースアドレス:MySQL" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベースプレフィックス:mac_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "インストールが成功した後、バックグラウンドアドレスにログインします" echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # 一本足のカウントカード webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8016,34 +8017,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "データベースアドレス:MySQL" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" echo "" - echo "redis地址: redis" - echo "redis密码: 默认不填写" - echo "redis端口: 6379" + echo "Redisアドレス:Redis" + echo "Redisパスワード:デフォルトで記入されていません" + echo "Redisポート:6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "ウェブサイトURL:https://$yuming" + echo "バックグラウンドログインパス: /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "ユーザー名:admin" + echo "パスワード:管理者" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" + echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # フララムフォーラム webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8080,12 +8081,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "データベースアドレス:MySQL" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:flarum_" + echo "管理者情報は自分で設定されます" ;; @@ -8093,8 +8094,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8118,11 +8119,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "データベースプレフィックス:typecho_" + echo "データベースアドレス:MySQL" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "データベース名:$dbname" ;; @@ -8131,8 +8132,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8157,18 +8158,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "データベースアドレス:MySQL" + echo "データベースポート:3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8185,10 +8186,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8198,20 +8199,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + 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 + read -e -p "(/home/web/html/に似たindex.phpのパスを入力してください$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 -e "[${gl_huang}3/6${gl_bai}] PHPバージョンを選択してください" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + 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 @@ -8222,15 +8223,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "選択の無効な、再入力してください。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" echo "-------------" - echo "已经安装的扩展" + echo "インストールされた拡張機能" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8240,25 +8241,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}]データベース管理" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8268,10 +8269,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "データベースインポートテーブルデータ" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "データベースのインポートが完了しました" ;; *) echo @@ -8283,12 +8284,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "データベースアドレス:MySQL" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" + echo "パスワード:$dbusepasswd" + echo "テーブルプレフィックス:$prefix" + echo "管理者ログイン情報は自分で設定されます" ;; @@ -8301,10 +8302,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "ジャンプドメイン名を入力してください:" reverseproxy nginx_install_status install_ssltls certs_status @@ -8326,7 +8327,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8337,11 +8338,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" + read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8361,8 +8362,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8384,8 +8385,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8402,8 +8403,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming nginx_install_status install_ssltls @@ -8436,8 +8437,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "展開を開始します$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8454,10 +8455,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8467,12 +8468,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + 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 + read -e -p "(/home/web/html/に似たindex.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 @@ -8497,21 +8498,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP環境バックアップ" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /home /$backup_filename" + read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "エラー:リモートサーバーIPを入力してください。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8519,9 +8520,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送されるファイルは見つかりませんでした。" fi break ;; @@ -8529,7 +8530,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac done @@ -8537,9 +8538,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + 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 @@ -8549,18 +8550,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1。毎週のバックアップ2。毎日のバックアップ" + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + 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 + read -e -p "毎日のバックアップの時間を選択します(時間、0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8574,19 +8575,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP環境修復" + echo "利用可能なサイトバックアップ" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + 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 @@ -8596,7 +8597,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8605,7 +8606,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "圧縮パッケージは見つかりませんでした。" fi ;; @@ -8623,11 +8624,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "LDNMP環境を更新します" + echo "LDNMP環境を更新します" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "コンポーネントの新しいバージョンを発見します" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8647,13 +8648,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" + echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" echo "------------------------" - echo "5. 更新完整环境" + echo "5。完全な環境を更新します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8662,7 +8663,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version local version=${version:-latest} cd /home/web/ @@ -8673,13 +8674,13 @@ linux_ldnmp() { 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}完成" + 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 + 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 @@ -8712,8 +8713,8 @@ linux_ldnmp() { 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}完成" + send_stats "更新します$ldnmp_pods" + echo "更新します${ldnmp_pods}仕上げる" ;; 4) @@ -8724,15 +8725,15 @@ linux_ldnmp() { 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}完成" + 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环境" + send_stats "LDNMP環境を完全に更新します" cd /home/web/ docker compose down --rmi all @@ -8758,7 +8759,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "LDNMP環境をアンインストールします" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8772,7 +8773,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -8782,7 +8783,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "無効な入力!" esac break_end @@ -8802,12 +8803,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "应用市场" + echo -e "アプリケーション市場" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # ループで色を設定します for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8816,70 +8817,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" + echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" + echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" + echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" + echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" + echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" + echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" + echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" + echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" + echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" + echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" + echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" + echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" + echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" + echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" + echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" + echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" + echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" + echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" + echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" + echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" - echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" + echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" + echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" + echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" + echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" + echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" - echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" - echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" - echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー" + echo -e "${gl_kjlan}93. ${color93}DUFS Minimalist Static File Server${gl_kjlan}94. ${color94}ゴープ高速ダウンロードツール" + echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム" + echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" + echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice fi case $sub_choice in @@ -9032,8 +9033,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーパスワードを設定します。" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9066,7 +9067,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "ネザを作る" local app_id="7" local docker_name="nezha-dashboard" @@ -9075,20 +9076,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒监控 $check_docker $update_status" - echo "开源、轻量、易用的服务器监控与运维工具" - echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + echo -e "Nezhaの監視$check_docker $update_status" + echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" + echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 使用" + echo "1。使用します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -9145,7 +9146,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "郵便局を建設します" clear install telnet local app_id="9" @@ -9155,43 +9156,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "郵便局サービス$check_docker $update_status" + echo "Poste.ioはオープンソースメールサーバーソリューションです。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}ポート$port現在利用可能です${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "アクセスアドレス:" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "これらのDNSレコードを最初に解析します" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9201,7 +9202,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "任意のキーを押して続行します..." read -n 1 -s -r -p "" install jq @@ -9220,9 +9221,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.ioがインストールされています" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" echo "" @@ -9245,9 +9246,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.ioがインストールされています" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" echo "" ;; @@ -9258,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリはアンインストールされています" ;; *) @@ -9292,7 +9293,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -9302,7 +9303,7 @@ while true; do 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已经安装完成" + echo "Rocket.chatがインストールされています" check_docker_app_ip } @@ -9312,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9396,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -9410,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -9555,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "サンダープールを構築します" local app_id="19" local docker_name=safeline-mgt @@ -9563,20 +9564,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "サンダープールサービス$check_docker" + echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) @@ -9586,7 +9587,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经安装完成" + echo "サンダープールWAFパネルがインストールされています" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9599,7 +9600,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经更新完成" + echo "サンダープールWAFパネルが更新されました" check_docker_app_ip ;; 3) @@ -9610,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9729,8 +9730,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーパスワードを設定します。" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10018,7 +10019,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10071,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoyaファミリーバケット" clear install_docker check_disk_space 1 @@ -10275,9 +10276,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "インストール" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "最初のユーザー名とパスワードは次のとおりです" } docker_app_update() { @@ -10295,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10382,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVE开小鸡" + send_stats "PVEチキン" 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 ;; @@ -10502,7 +10503,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10517,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10545,7 +10546,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10560,7 +10561,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10568,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10589,17 +10590,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "初期ユーザー名:admin" + echo "最初のパスワード:changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "アプリが更新されました" } @@ -10609,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10656,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -10672,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10934,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "libretvログインパスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10968,9 +10969,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password - read -e -p "输入授权码: " shouquanma + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "承認コードを入力してください:" shouquanma mkdir -p /home/docker/moontv @@ -10986,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -11000,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11073,8 +11074,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "ログインユーザー名を設定します:" app_use + read -e -p "ログインパスワードの設定:" app_passwd docker run -d \ --name xunlei \ @@ -11171,11 +11172,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 公式のDocker-ComposeおよびEnvファイルをダウンロードします curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # ランダムキーとパスワードを生成します local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11184,17 +11185,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 管理者アカウント情報を追加します echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # コンテナを起動します docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -11204,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 元の変数を保持します source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11221,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11271,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11289,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd + read -e -p "設定${docker_name}SK-159KEJILIONYYDS163などのログインキー(SKターニング文字と数字の組み合わせ):" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11393,7 +11394,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -11406,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11567,7 +11568,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" + echo "初期ユーザーまたは管理者を作成します。次のユーザー名とパスワード、およびあなたが管理者であるかどうかを設定してください。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11619,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -11633,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11708,8 +11709,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "ログインユーザー名を設定します:" app_use + read -e -p "ログインパスワードの設定:" app_passwd docker run -d \ --name ${docker_name} \ @@ -11757,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "インストール" check_docker_app_ip } @@ -11771,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "应用已卸载" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11788,12 +11789,12 @@ while true; do docker_rum() { - read -p "请输入组网的客户端数量 (默认 5): " COUNT + read -p "ネットワークを形成するためにクライアントの数を入力してください(デフォルト5):" COUNT COUNT=${COUNT:-5} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - - stop_containers_or_kill_process 51820 &>/dev/null + + ip link delete wg0 &>/dev/null ip_address docker run -d \ @@ -11833,7 +11834,7 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二维码: $base_name.png" + echo "QRコードを生成します:$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' @@ -11843,11 +11844,11 @@ while true; do sleep 2 docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" - echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" - echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + echo -e "${gl_lv}${COUNT}すべての出力は各クライアントによって提供されます。使用方法は次のとおりです。${gl_bai}" + echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}" + echo -e "${gl_lv}2。Windowsクライアントをダウンロードし、構成コードをコピーしてネットワークに接続します。${gl_bai}" + echo -e "${gl_lv}3。Linuxはスクリプトを使用してWGクライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}" + echo -e "${gl_lv}公式クライアントのダウンロード方法:https://www.wireguard.com/install/${gl_bai}" break_end } @@ -11875,16 +11876,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # ディレクトリを作成する(存在しない場合) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "クライアントの構成を貼り付け、Enterを2回連続で押して保存してください。" - # 初始化变量 + # 変数を初期化します input="" empty_line_count=0 - # 逐行读取用户输入 + # ユーザーの入力を行ごとに読み取ります while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11897,10 +11898,10 @@ while true; do fi done - # 写入配置文件 + # 構成ファイルに書き込みます echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "クライアントの構成が保存されています$CONFIG_FILE" docker run -d \ --name wireguardc \ @@ -11933,21 +11934,21 @@ while true; do b) clear - send_stats "全部应用备份" + send_stats "すべてのアプリケーションバックアップ" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "备份文件已创建: /$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /$backup_filename" + read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "エラー:リモートサーバーIPを入力してください。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11955,14 +11956,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "文件已传送至远程服务器/根目录。" + echo "ファイルは、リモートサーバー/ルートディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送されるファイルは見つかりませんでした。" fi break ;; *) - echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "注:現在、バックアップにはDockerプロジェクトのみが含まれており、Pagodaや1PanelなどのWebサイトビルディングパネルのデータバックアップは含まれていません。" break ;; esac @@ -11972,29 +11973,29 @@ while true; do r) root_use - send_stats "全部应用还原" - echo "可用的应用备份" + send_stats "すべてのアプリケーションが復元されます" + echo "利用可能なアプリバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # 如果用户没有输入文件名,使用最新的压缩包 + # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージを使用します if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + echo "アプリケーションデータが復元されました。指定されたアプリケーションメニューを手動で入力し、アプリケーションを更新してアプリケーションを復元してください。" else - echo "没有找到压缩包。" + echo "圧縮パッケージは見つかりませんでした。" fi ;; @@ -12017,35 +12018,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "バックエンドワークスペース" + echo -e "バックエンドワークスペース" + echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" + echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}1. ${gl_bai}ワークスペース番号1" + echo -e "${gl_kjlan}2. ${gl_bai}ワークスペースNo. 2" + echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" + echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" + echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" + echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" + echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" + echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" + echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" + echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -12053,7 +12054,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; @@ -12061,63 +12062,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースを開始します$SESSION_NAME" tmux_run ;; @@ -12129,21 +12130,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH常駐モード" + echo -e "SSH常駐モード${tmux_sshd_status}" + echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1。2をオンにします。オフにします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -12159,29 +12160,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "カスタムワークスペース" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "バックグラウンドワークスペースにコマンドを注入します" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "ワークスペースを削除します" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -12206,54 +12207,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}スクリプトの起動ショートカットキーを設定します${gl_kjlan}2. ${gl_bai}ログインパスワードを変更します" + echo -e "${gl_kjlan}3. ${gl_bai}ルートパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンのPythonをインストールします" + 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}ルートアカウントを無効にして新しいアカウントを作成します${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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + 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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "ショートカットキーが設定されています" + send_stats "スクリプトのショートカットキーが設定されています" break_end linux_Settings done @@ -12261,34 +12262,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "ログインパスワードを設定します" + echo "ログインパスワードを設定します" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "ルートパスワードモード" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "Pyバージョン管理" + echo "Pythonバージョン管理" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + echo -e "現在のPythonバージョン番号:${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 "推奨バージョン: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 + read -e -p "インストールするPythonバージョン番号を入力します(Enter 0からExit):" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "スクリプトPy管理" break_end linux_Settings fi @@ -12321,7 +12322,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "不明なパッケージマネージャー!" return fi @@ -12350,55 +12351,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" + send_stats "スイッチスクリプトPyバージョン" ;; 5) root_use - send_stats "开放端口" + send_stats "オープンポート" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "すべてのポートが開いています" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "SSHポートを変更します" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 現在の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}" + # 現在のSSHポート番号を印刷します + echo -e "現在のSSHポート番号は次のとおりです。${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # ユーザーに新しい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端口已修改" + send_stats "SSHポートが変更されました" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "SSHポート変更を終了します" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "ポート番号が無効です。1〜65535の数字を入力してください。" + send_stats "無効なSSHポート入力" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "入力が無効です。番号を入力してください。" + send_stats "無効なSSHポート入力" break_end fi done @@ -12417,8 +12418,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "新しいユーザーはルートを無効にします" + read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12433,49 +12434,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "操作が完了しました。" ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "V4/V6の優先度を設定します" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "IPv4の優先度に切り替えました" + send_stats "IPv4の優先度に切り替えました" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "IPv6の優先度に切り替えました" + send_stats "IPv6の優先度に切り替えました" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + send_stats "IPv6修正" ;; *) @@ -12493,43 +12494,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "仮想メモリを設定します" while true; do clear - echo "设置虚拟内存" + 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 -e "現在の仮想メモリ:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "選択を入力してください:" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G仮想メモリが設定されています" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G仮想メモリが設定されています" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G仮想メモリが設定されています" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "カスタム仮想メモリが設定されています" ;; *) @@ -12542,8 +12543,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "ユーザー管理" + echo "ユーザーリスト" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12554,62 +12555,62 @@ EOF echo "" - echo "账户操作" + echo "アカウント操作" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3.最高の権限を与える4。最高の権限をキャンセルします" echo "------------------------" - echo "5. 删除账号" + echo "5.アカウントを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # ユーザーに新しいユーザー名を入力するように求めます + read -e -p "新しいユーザー名を入力してください:" new_username - # 创建新用户并设置密码 + # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "操作が完了しました。" ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # ユーザーに新しいユーザー名を入力するように求めます + read -e -p "新しいユーザー名を入力してください:" new_username - # 创建新用户并设置密码 + # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 新規ユーザーのsudo許可を付与します echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作已完成。" + echo "操作が完了しました。" ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "ユーザー名を入力してください:" username + # 新規ユーザーのsudo許可を付与します echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "ユーザー名を入力してください:" username + # sudoersファイルからユーザーのsudo許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "削除するにはユーザー名を入力してください:" username + # ユーザーとそのホームディレクトリを削除します userdel -r "$username" ;; @@ -12622,50 +12623,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "ユーザー情報ジェネレーター" + echo "ランダムユーザー名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "ランダムユーザー名$i: $username" done echo "" - 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个随机用户姓名 + # 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" + echo "ランダムなユーザー名$i: $user_name" done echo "" - echo "随机UUID" + echo "ランダムuuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "ランダムuuid$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "ランダムなパスワード$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "ランダムなパスワード$i: $password" done echo "" @@ -12673,46 +12674,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "タイムゾーンを変更します" while true; do clear - echo "系统时间信息" + echo "システム時間情報" - # 获取当前系统时区 + # 現在のシステムタイムゾーンを取得します local timezone=$(current_timezone) - # 获取当前系统时间 + # 現在のシステム時間を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # タイムゾーンと時間を表示します + echo "現在のシステムタイムゾーン:$timezone" + echo "現在のシステム時間:$current_time" echo "" - echo "时区切换" + echo "タイムゾーンの切り替え" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + 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 "11。英国のロンドン時間12。パリの時間フランスの時間" + echo "13。ベルリン時代、ドイツ14。モスクワ・タイム、ロシア" + echo "15。オランダのユトレヒト時間16。スペインでのマドリード時間" echo "------------------------" - echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "アメリカ" + echo "21。WesternTime22。東部時間" + echo "23。カナダ時間24。メキシコの時間" + echo "25。ブラジル時間26。アルゼンチン時間" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31。UTCグローバル標準時間" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -12755,21 +12756,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "ホスト名を変更します" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # Debian、Ubuntu、Centosなどの他のシステム。 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12787,11 +12788,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "ホスト名は次のように変更されています。$new_hostname" + send_stats "ホスト名が変更されました" sleep 1 else - echo "已退出,未更改主机名。" + echo "終了すると、ホスト名は変更されていません。" break fi done @@ -12799,32 +12800,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "システムの更新ソースを変更します" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "更新ソース領域を選択します" + echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "あなたの選択を入力してください:" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "中国本土のデフォルトソース" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "中国本土の教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "海外起源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "キャンセル" ;; esac @@ -12832,62 +12833,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "タイミングタスク管理" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "タイミングされたタスクリスト" crontab -l echo "" - echo "操作" + echo "動作します" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1。毎月のタスク2。毎週のタスク" + echo "3。毎日のタスク4。時間ごとのタスク" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "毎日タスクを実行する時間を選択しますか? (時間、0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "タイムされたタスクを追加します" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "削除する必要があるキーワードを入力してください。" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "タイミングタスクを削除します" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "タイミングタスクを編集します" ;; *) break # 跳出循环,退出菜单 @@ -12899,32 +12900,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "ローカルホストの解析" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "ネイティブホストのペルシングリスト" + echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" cat /etc/hosts echo "" - echo "操作" + echo "動作します" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1.新しい解析2を追加します。解析アドレスを削除します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "選択を入力してください:" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "ローカルホストの解析が追加されました" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "ローカルホストの解析と削除" ;; *) break # 跳出循环,退出菜单 @@ -12935,7 +12936,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "SSH防御" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12947,20 +12948,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防衛プログラム$check_docker" + echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" + echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2。SSH傍受記録を表示します" + echo "3。リアルタイムログ監視" echo "------------------------" - echo "9. 卸载防御程序" + echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) install_docker @@ -12983,7 +12984,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防衛プログラムがアンインストールされています" ;; *) break @@ -12996,47 +12997,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "電流制限シャットダウン機能" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "電流制限シャットダウン機能" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # limiting_shut_down.shファイルが存在するかどうかを確認してください if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # threshold_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}" + 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}" + echo -e "${gl_hui}現在の制限シャットダウン機能は有効になりません${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 新しい仮想メモリサイズを入力します + echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" + read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day cz_day=${cz_day:-1} cd ~ @@ -13049,15 +13050,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "現在の制限シャットダウン関数はオフになっています" ;; *) break @@ -13070,40 +13071,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "秘密キーログイン" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ルート秘密キーログインモード" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "キーペアが生成され、SSHログインのより安全な方法" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "選択を入力してください:" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "新しいキーを生成します" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "既存の公開キーをインポートします" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "地元の秘密の鍵を表示します" echo "------------------------" - echo "公钥信息" + echo "公開鍵情報" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "秘密のキー情報" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13119,18 +13120,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "電報警告" + echo "TG-BOTモニタリングと早期警告機能" + echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "しきい値に達した後、ユーザーはユーザーに送信されます" + echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "電報警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -13152,7 +13153,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # 〜/.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 @@ -13163,21 +13164,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-BOT早期警告システムが開始されました" + echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -13221,7 +13222,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -13244,61 +13245,61 @@ EOF 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "メッセージボード" + echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "ワンストップチューニングスタート" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10。タイムゾーンをに設定します${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13315,25 +13316,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10。 Linuxシステムのカーネルパラメーターの最適化" + echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac @@ -13341,7 +13342,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "システムを再起動します" server_reboot ;; 100) @@ -13357,32 +13358,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "プライバシーとセキュリティ" + echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" + echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "現在のステータス:$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1。コレクションをオンにします" + echo "2。コレクションを閉じます" echo "--------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "コレクションは閉じた" + send_stats "プライバシーとセキュリティは収集のために閉鎖されています" ;; *) break @@ -13398,11 +13399,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "テックライオンスクリプトをアンインストールします" + echo "テックライオンスクリプトをアンインストールします" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" + read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in [Yy]) @@ -13410,16 +13411,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "スクリプトはアンインストールされています、さようなら!" break_end clear exit ;; [Nn]) - echo "已取消" + echo "キャンセル" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無効な選択、yまたはnを入力してください。" ;; esac ;; @@ -13429,7 +13430,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無効な入力!" ;; esac break_end @@ -13447,187 +13448,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "ファイルマネージャー" while true; do clear - echo "文件管理器" + echo "ファイルマネージャー" echo "------------------------" - echo "当前路径" + echo "現在のパス" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" + echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" + echo "15.ファイルを削除します" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" + echo "25。ファイルを別のサーバーに渡します" echo "------------------------" - echo "0. 返回上一级选单" + echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "選択を入力してください:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "ディレクトリ名を入力してください:" dirname + cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" + send_stats "ディレクトリに移動します" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "削除するには、ディレクトリ名を入力してください。" dirname + rm -rf "$dirname" && echo "ディレクトリが削除されました" || echo "削除が失敗しました" + send_stats "ディレクトリを削除します" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "前のメニューディレクトリに戻ります" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "作成するにはファイル名を入力してください。" filename + touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" + send_stats "ファイルを作成します" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "編集するにはファイル名を入力してください:" filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "ファイルを編集します" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名文件" + 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 "删除文件" + read -e -p "削除するには、ファイル名を入力してください。" filename + rm -f "$filename" && echo "削除されたファイル" || echo "削除が失敗しました" + send_stats "ファイルを削除します" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" + send_stats "圧縮ファイル/ディレクトリ" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "ファイル名(.tar.gz)を入力してください:" filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" + send_stats "ファイル/ディレクトリを解凍します" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "エラー:ファイルまたはディレクトリは存在しません。" + send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "エラー:ターゲットパスを入力してください。" + send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" + send_stats "ファイルまたはディレクトリを移動します" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "エラー:ファイルまたはディレクトリは存在しません。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "エラー:ターゲットパスを入力してください。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # -Rオプションを使用して、ディレクトリを再帰的にコピーします + cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" + send_stats "ファイルまたはディレクトリをコピーします" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "転送されるファイルパスを入力してください。" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "エラー:ファイルは存在しません。" + send_stats "ファイルの転送に失敗しました:ファイルは存在しません" continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "エラー:リモートサーバーIPを入力してください。" + send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "エラー:リモートサーバーのパスワードを入力してください。" + send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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を使用してファイルを転送します scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "スクリプトは最新です$sh_v_new" break_end ~/kejilion.sh exit @@ -13925,15 +13926,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}自動更新は閉じられています${gl_bai}" + send_stats "スクリプト自動更新を閉じます" break_end ;; *) @@ -13955,41 +13956,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "テクノロジーライオンスクリプトツールボックス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}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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}7. ${gl_bai}ワープ管理" +echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" +echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" +echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" +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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu Serverオープニングスクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "選択を入力してください:" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 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 "warp管理" ; install wget + 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 ;; @@ -14000,13 +14001,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; 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 "无效的输入!" ;; + *) echo "無効な入力!" ;; esac break_end done @@ -14014,68 +14015,68 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "Kコマンド参照ユースケース" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav | k 命令收藏夹" -echo "应用市场管理 k app" -echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "以下は、Kコマンドリファレンスユースケースです。" +echo "スクリプトkを開始します" +echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" +echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" +echo "システムKアップデートを更新| Kアップデート" +echo "クリーンシステムガベージkクリーン| kきれい" +echo "システムパネルk dd |を再インストールしますk再インストール" +echo "BBR3コントロールパネルK BBR3 | K BBRV3" +echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" +echo "仮想メモリkスワップ2048を設定します" +echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" +echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" +echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" +echo "SSHリモート接続ツールK SSH | Kリモート接続" +echo "rsyncリモート同期ツールk rsync | Kリモート同期" +echo "ハードディスク管理ツールKディスク| Kハードディスク管理" +echo "イントラネット浸透(サーバー側)K FRP" +echo "イントラネット浸透(クライアント)K FRPC" +echo "ソフトウェアStart K Start SSHD | k sshdを開始します" +echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" +echo "ソフトウェア再起動k再起動sshd | k再起動sshd" +echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" +echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" +echo "ドメイン名証明書アプリケーションK SSL" +echo "ドメイン名証明書の有効期限クエリK SSL PS" +echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" +echo "Docker Container Management K Docker PS | K Dockerコンテナ" +echo "Docker Image Management K Docker IMG | K Docker画像" +echo "LDNMPサイト管理k Web" +echo "LDNMPキャッシュクリーンアップK Webキャッシュ" +echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" +echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" +echo "ロードバランスkロードバランス| kロードバランシングをインストールします" +echo "ファイアウォールパネルk fhq | kファイアウォール" +echo "オープンポート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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" +echo "コマンドお気に入りk fav | Kコマンドのお気に入り" +echo "アプリ市場管理Kアプリ" +echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" } if [ "$#" -eq 0 ]; then - # 如果没有参数,运行交互式逻辑 + # パラメーターがない場合は、インタラクティブロジックを実行します kejilion_sh else - # 如果有参数,执行相应函数 + # パラメーターがある場合は、対応する関数を実行します case $1 in install|add|安装) shift - send_stats "安装软件" + send_stats "ソフトウェアをインストールします" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "ソフトウェアをアンインストールします" remove "$@" ;; update|更新) @@ -14109,7 +14110,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "タイム付きRSYNC同期" run_task "$@" ;; @@ -14128,7 +14129,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ポートは、サービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14141,13 +14142,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "仮想メモリをすばやく設定します" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "タイムゾーンをすばやく設定します" set_timedate "$@" ;; @@ -14195,42 +14196,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "ソフトウェアステータスビュー" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "ソフトウェアスタートアップ" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "ソフトウェアの一時停止" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "ソフトウェアの再起動" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "ソフトウェアが起動します" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "証明書のステータスを確認してください" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "すぐに証明書を申請してください" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "すぐに証明書を申請してください" else k_info fi @@ -14240,15 +14241,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Dockerをすばやくインストールします" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "クイックコンテナ管理" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "クイックミラー管理" docker_image ;; *) @@ -14275,7 +14276,7 @@ else app) shift - send_stats "应用$@" + send_stats "$@を適用します" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index cab3eb64a..7aed0d70d 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 定义一个函数来执行命令 +# 명령을 실행할 함수를 정의합니다 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 -# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. +# 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用户同意条款 +# 사용자에게 이용 약관에 동의하라는 메시지 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" - echo "首次使用脚本,请先阅读并同意用户许可协议。" - echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}Tech Lion Script Toolbox에 오신 것을 환영합니다${gl_bai}" + echo "스크립트를 처음 사용하면 사용자 라이센스 계약을 읽고 동의하십시오." + echo "사용자 라이센스 계약 : https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上条款?(y/n): " user_input + read -r -p "위의 용어에 동의하십니까? (Y/N) :" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "许可同意" + 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 "许可拒绝" + send_stats "허가 거부" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "패키지 매개 변수는 제공되지 않습니다!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安装 $package...${gl_bai}" + echo -e "${gl_huang}설치$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return 1 fi fi @@ -219,11 +219,11 @@ check_disk_space() { 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 "当前可用空间: $((available_space_mb/1024))G" - echo "最小需求空间: ${required_gb}G" - echo "无法继续安装,请清理磁盘空间后重试。" - send_stats "磁盘空间不足" + echo -e "${gl_huang}힌트:${gl_bai}불충분 한 디스크 공간!" + echo "현재 사용 가능한 공간 : $ ((uvery_space_mb/1024)) g" + echo "최소 수요 공간 :${required_gb}G" + echo "설치를 계속할 수 없습니다. 디스크 공간을 청소하고 다시 시도하십시오." + send_stats "불충분 한 디스크 공간" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "패키지 매개 변수는 제공되지 않습니다!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸载 $package...${gl_bai}" + 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 @@ -259,14 +259,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return 1 fi done } -# 通用 systemctl 函数,适用于各种发行版 +# 다양한 분포에 적합한 범용 SystemCTL 기능 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重启服务 +# 서비스를 다시 시작하십시오 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1 服务已重启。" + echo "$1서비스가 다시 시작되었습니다." else - echo "错误:重启 $1 服务失败。" + echo "오류 : 다시 시작합니다$1서비스가 실패했습니다." fi } -# 启动服务 +# 서비스를 시작하십시오 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1 服务已启动。" + echo "$1서비스가 시작되었습니다." else - echo "错误:启动 $1 服务失败。" + echo "오류 : 시작$1서비스가 실패했습니다." fi } -# 停止服务 +# 서비스 중지 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1 服务已停止。" + echo "$1서비스가 중단되었습니다." else - echo "错误:停止 $1 服务失败。" + echo "오류 : 중지$1서비스가 실패했습니다." fi } -# 查看服务状态 +# 서비스 상태를 확인하십시오 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1 服务状态已显示。" + echo "$1서비스 상태가 표시됩니다." else - echo "错误:无法显示 $1 服务状态。" + echo "오류 : 표시 할 수 없습니다$1서비스 상태." fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME 已设置为开机自启。" + echo "$SERVICE_NAME전원 켜기로 설정합니다." } break_end() { - echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意键继续..." + echo -e "${gl_lv}작업이 완료되었습니다${gl_bai}" + echo "계속하려면 키를 누르십시오 ..." read -n 1 -s -r -p "" echo "" clear @@ -352,10 +352,11 @@ kejilion() { stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) - install lsof + if [ -n "$containers" ]; then docker stop $containers else + install lsof for pid in $(lsof -t -i:$port); do kill -9 $pid done @@ -424,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}Docker 환경 설치 ...${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 @@ -499,63 +500,63 @@ install_docker() { docker_ps() { while true; do clear - send_stats "Docker容器管理" - echo "Docker容器列表" + send_stats "도커 컨테이너 관리" + echo "도커 컨테이너 목록" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "容器操作" + echo "컨테이너 작동" echo "------------------------" - echo "1. 创建新的容器" + echo "1. 새 컨테이너를 만듭니다" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" - echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "2. 지정된 컨테이너를 시작하십시오. 6. 모든 컨테이너를 시작하십시오" + echo "3. 지정된 컨테이너를 중지하십시오. 7. 모든 컨테이너를 중지하십시오" + echo "4. 지정된 컨테이너를 삭제합니다. 8. 모든 컨테이너를 삭제하십시오" + echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" + echo "13. 컨테이너 네트워크보기 14. 컨테이너 점유보기" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + send_stats "새 컨테이너를 만듭니다" + read -e -p "창조 명령을 입력하십시오 :" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "지정된 컨테이너를 시작하십시오" + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker start $dockername ;; 3) - send_stats "停止指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "지정된 컨테이너를 중지하십시오" + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "지정된 컨테이너를 삭제하십시오" + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "지정된 컨테이너를 다시 시작하십시오" + read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "모든 컨테이너를 시작하십시오" docker start $(docker ps -a -q) ;; 7) - send_stats "停止所有容器" + send_stats "모든 컨테이너를 중지하십시오" docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "모든 컨테이너를 삭제하십시오" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -564,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "모든 컨테이너를 다시 시작하십시오" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "컨테이너를 입력하십시오" + read -e -p "컨테이너 이름을 입력하십시오 :" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "컨테이너 로그를 봅니다" + read -e -p "컨테이너 이름을 입력하십시오 :" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "컨테이너 네트워크를 봅니다" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -603,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "컨테이너 점유를 봅니다" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "컨테이너 포트 액세스를 허용합니다" + read -e -p "컨테이너 이름을 입력하십시오 :" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -619,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "컨테이너 포트 액세스 차단" + read -e -p "컨테이너 이름을 입력하십시오 :" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -639,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "도커 이미지 관리" + echo "도커 이미지 목록" docker image ls echo "" - echo "镜像操作" + echo "미러 작동" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1. 지정된 이미지 가져 오기 3. 지정된 이미지 삭제" + echo "2. 지정된 이미지 업데이트 4. 모든 이미지 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "거울을 당기십시오" + read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}이미지 얻기 :$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "이미지를 업데이트하십시오" + read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}업데이트 된 이미지 :$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "거울을 삭제하십시오" + read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "모든 이미지를 삭제합니다" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -685,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -753,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "지원되지 않는 분포 :$ID" return ;; esac else - echo "无法确定操作系统。" + echo "운영 체제를 결정할 수 없습니다." return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}Crontab이 설치되고 Cron 서비스가 실행 중입니다.${gl_bai}" } @@ -774,27 +775,27 @@ docker_ipv6_on() { 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处理配置文件的更新 + # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # 현재 구성에 이미 IPv6 설정이 있는지 확인하십시오 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # 구성 업데이트 및 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}" + echo -e "${gl_huang}IPv6 액세스가 현재 활성화되어 있습니다${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -809,28 +810,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # 구성 파일이 있는지 확인하십시오 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}配置文件不存在${gl_bai}" + echo -e "${gl_hong}구성 파일이 존재하지 않습니다${gl_bai}" return fi - # 读取当前配置 + # 현재 구성을 읽으십시오 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 使用jq处理配置文件的更新 + # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # 현재 IPv6 상태를 확인하십시오 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # 원래 구성과 새로운 구성을 비교합니다 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 액세스는 현재 닫힙니다${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}IPv6 액세스가 성공적으로 닫혔습니다${gl_bai}" fi } @@ -869,117 +870,117 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + 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" + echo "포트가 열렸습니다$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "포트가 열렸습니다" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + 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" + echo "포트 폐쇄$port" fi done - # 删除已存在的规则(如果有) + # 기존 규칙 삭제 (있는 경우) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # 새로운 규칙을 먼저 삽입하십시오 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "포트 폐쇄" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + 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" + echo "IP 출시$ip" fi done save_iptables_rules - send_stats "已放行IP" + send_stats "IP 출시" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + 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" + echo "IP 차단$ip" fi done save_iptables_rules - send_stats "已阻止IP" + send_stats "IP 차단" } @@ -989,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # 방어 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 @@ -999,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "DDOS 방어를 켜십시오" } -# 关闭DDoS防御 +# DDOS 방어를 끕니다 disable_ddos_defense() { - # 关闭防御 DDoS + # 방어 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 @@ -1014,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "DDOS 방어를 끕니다" } -# 管理国家IP规则的函数 +# 국가 IP 규칙을 관리하는 기능 manage_country_rules() { local action="$1" local country_code="$2" @@ -1032,73 +1033,73 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # IPSET가 존재하지 않는 경우 작성하십시오 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IP 영역 파일을 다운로드하십시오 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" exit 1 fi - # 将 IP 添加到 ipset + # IPSET에 IP를 추가하십시오 while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 使用 iptables 阻止 IP + # iptables와 함께 IP를 차단하십시오 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 地址" + echo "성공적으로 차단되었습니다$country_codeIP 주소" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # 허용 국가에 대한 IPSET 만들기 (존재하지 않는 경우) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # IP 영역 파일을 다운로드하십시오 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" 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 + # IPSET에 IP를 추가하십시오 while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # 지정된 국가의 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 地址" + echo "성공적으로 만 허용됩니다$country_codeIP 주소" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # 국가의 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 + # ipset을 파괴하십시오 if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "성공적으로 해제했습니다$country_codeIP 주소 제한" ;; *) @@ -1115,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "고급 방화벽 관리" + send_stats "고급 방화벽 관리" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "방화벽 관리" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." + echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" - echo "7. 清除指定IP" + echo "5. IP 화이트리스트 6. IP 블랙리스트" + echo "7. 지정된 IP를 지우십시오" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. 핑 허용 12. 핑을 비활성화하십시오" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13. DDOS 방어 시작 14. DDOS 방어를 끄십시오" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15. 지정된 국가 IP 16. 지정된 국가 IP 만 허용됩니다." + echo "17. 지정된 국가에서 IP 제한을 해제합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "열린 포트 번호를 입력하십시오 :" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "지정된 포트를 엽니 다" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "지정된 포트를 닫습니다" ;; 3) - # 开放所有端口 + # 모든 포트를 엽니 다 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1163,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "모든 포트를 엽니 다" ;; 4) - # 关闭所有端口 + # 모든 포트를 닫습니다 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1179,40 +1180,40 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "모든 포트를 닫습니다" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IP 화이트리스트 + read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IP 블랙리스트 + read -e -p "차단 된 IP 또는 IP 세그먼트를 입력하십시오." c_ip block_ip $c_ip ;; 7) - # 清除指定 IP - read -e -p "请输入清除的IP: " d_ip + # 지정된 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" + send_stats "지정된 IP를 지우십시오" ;; 11) - # 允许 PING + # 핑을 허용하십시오 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 "允许PING" + send_stats "핑을 허용하십시오" ;; 12) - # 禁用 PING + # 핑을 비활성화합니다 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 "禁用PING" + send_stats "핑을 비활성화합니다" ;; 13) enable_ddos_defense @@ -1222,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "차단 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "허용 국가$country_codeIP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "허용 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "나라를 차단하십시오$country_codeIP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "나라를 정리하십시오$country_codeIP" ;; *) @@ -1256,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 현재 시스템에서 모든 스왑 파티션을 얻으십시오 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # 모든 스왑 파티션을 반복하고 삭제하십시오 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # /swapfile이 더 이상 사용되지 않도록하십시오 swapoff /swapfile - # 删除旧的 /swapfile + # 이전 /스왑 파일을 삭제하십시오 rm -f /swapfile - # 创建新的 swap 分区 + # 새 스왑 파티션을 만듭니다 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1287,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "가상 메모리 크기가 크기가 커졌습니다${gl_huang}${new_swap}${gl_bai}M" } @@ -1297,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# 가상 메모리를 만들어야하는지 확인하십시오 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1313,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # 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版本 + # 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版本 + # 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版本 + # 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}" @@ -1340,7 +1341,7 @@ ldnmp_v() { 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 @@ -1349,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # 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 文件中进行替换 + # 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 @@ -1398,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP 환경이 설치되었습니다" echo "------------------------" ldnmp_v @@ -1415,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "갱신 작업이 업데이트되었습니다" } @@ -1452,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yuming공개 키 정보${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yuming개인 키 정보${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}인증서 저장 경로${gl_bai}" + echo "공개 키 :/etc/letsencrypt/live/$yuming/fullchain.pem" + echo "개인 키 :/etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1469,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}SSL 인증서를 신속하게 신청하고 만료 전에 서명을 자동으로 갱신하십시오.${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1485,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}응용 인증서 만료${gl_bai}" + echo "사이트 정보 인증서 만료 시간" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1525,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + 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 배/도메인 이름/주)을 갖습니다." + echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." break_end clear - echo "请再次尝试部署 $webname" + echo "다시 배포를 시도하십시오$webname" add_yuming install_ssltls certs_status @@ -1548,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "도메인 이름 재사용" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1557,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -1622,8 +1623,8 @@ nginx_upgrade() { 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}完成" + send_stats "고쳐 쓰다$ldnmp_pods" + echo "고쳐 쓰다${ldnmp_pods}마치다" } @@ -1642,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "로그인 정보 :" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "시작$ldnmp_pods" } @@ -1656,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # 구성 파일이 있는지 확인하십시오 if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # 구성 파일에서 API_TOKE 및 ZONE_ID를 읽으십시오 read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # 캐시 청소 여부를 사용자에게 프롬프트하십시오 + 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 + 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 并执行清除缓存命令 + # 각 Zone_ID를 루프하고 CLEAR CACHE 명령을 실행하십시오. for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + 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" \ @@ -1686,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "캐시 클리어 요청이 전송되었습니다." } web_cache() { - send_stats "清理站点缓存" + send_stats "사이트 캐시를 정리하십시오" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1702,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "사이트 데이터 삭제" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "사이트 데이터를 삭제하려면 도메인 이름을 입력하십시오 (여러 도메인 이름이 공간별로 분리됩니다)." yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + 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" + # 오류를 피하기 위해 삭제하기 전에 데이터베이스가 존재하는지 확인하십시오. + echo "데이터베이스 삭제 :$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1739,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # 모드 매개 변수에 따라 WAF를 켜거나 끄기로 결정 if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # 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:加上注释 + # 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' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1802,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 오래된 정의를 삭제하십시오 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1829,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 오래된 정의를 삭제하십시오 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1857,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # Brotli를 켜십시오 : 주석을 제거하십시오 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1871,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # Brotli를 닫습니다 : 주석을 추가하십시오 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1887,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1913,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # ZSTD를 켜십시오 : 주석을 제거하십시오 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1928,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # Zstd를 닫습니다 : 주석을 추가하십시오 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1944,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1975,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" return 1 fi @@ -1989,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP 환경 방어" while true; do check_waf_status check_cf_mode @@ -2003,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "서버 웹 사이트 방어 프로그램${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. SSH 차단 레코드보기 6. 웹 사이트 차단 레코드보기" + echo "7. 방어 규칙 목록보기 8. 로그의 실시간 모니터링보기" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11. 인터셉트 매개 변수 구성 12. 차단 된 모든 IP를 지우십시오" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21. CloudFlare 모드 22. 5 초 방패의 높은 하중" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31. WAF 32를 켜십시오. WAF를 끄십시오" + echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 방어 프로그램을 제거하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2081,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2ban 방어 프로그램은 제거되었습니다" ;; 11) @@ -2096,11 +2097,11 @@ web_security() { ;; 21) - send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "CloudFlare 모드" + echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "CF 계정 번호를 입력하십시오." cfuser + read -e -p "CF의 글로벌 API 키를 입력하십시오." 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 @@ -2115,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "CloudFlare 모드는 CF 배경, Site-Security-Events에서 인터셉트 레코드를 보도록 구성됩니다." ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "5 초 방패의 높은 하중" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "CF 매개 변수 가져 오기 :" + echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" + echo -e "CF 배경 도메인 이름 요약 페이지의 오른쪽 하단으로 이동하려면${gl_huang}지역 ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "CF 계정 번호를 입력하십시오." cfuser + read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken + read -e -p "CF에 도메인 이름의 영역 ID를 입력하십시오." cfzonID cd ~ install jq bc @@ -2146,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "고 부하 자동 방패 오프닝 스크립트가 추가되었습니다" else - echo "自动开盾脚本已存在,无需添加" + echo "자동 방패 스크립트가 이미 존재합니다. 추가 할 필요가 없습니다." fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "사이트 waf가 활성화되어 있습니다" + send_stats "사이트 waf가 활성화되어 있습니다" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "사이트 waf가 닫혔습니다" + send_stats "사이트 waf가 닫혔습니다" ;; 33) @@ -2188,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# 현재 Worker_Processes 설정 값을 얻으십시오 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# 값에 따라 모드 정보를 설정합니다 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2207,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # ZSTD가 활성화되어 있고 주석이 없는지 확인하십시오 (전체 라인은 ZSTD 켜기로 시작합니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # Brotli가 활성화되어 있고 댓글이 없는지 확인하십시오 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2237,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "LDNMP 환경을 최적화하십시오" + echo -e "LDNMP 환경을 최적화하십시오${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1. 표준 모드 2. 고성능 모드 (2H4G 이상 권장)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3. GZIP 압축 켜기 4. GZIP 압축 끄기" + echo "5. BR 압축 켜기 6. BR 압축 끄기" + echo "7. ZSTD 압축 켜기 8. ZSTD 압축 끄기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "사이트 표준 모드" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2275,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2287,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP 환경은 표준 모드로 설정되었습니다" ;; 2) - send_stats "站点高性能模式" + send_stats "사이트 고성능 모드" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2315,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2325,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 환경은 고성능 모드로 설정되었습니다" ;; 3) @@ -2385,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker = "$ {gl_lv} $ {gl_bai} 설치" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" # fi # } @@ -2395,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "액세스 주소 :" ip_address @@ -2433,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 默认标签为 latest + # 기본 레이블이 최신입니다 [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # 공식 이미지에 대한 지원을 추가하십시오 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # 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 @@ -2476,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # 컨테이너의 IP 주소를 가져옵니다 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2486,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # 다른 모든 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 + # 지정된 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 + # 로컬 네트워크 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 + # 다른 모든 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 + # 지정된 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 + # 로컬 네트워크 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 @@ -2523,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" save_iptables_rules } @@ -2534,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # 컨테이너의 IP 주소를 가져옵니다 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2544,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # 다른 모든 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 的规则 + # 지정된 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 的规则 + # 로컬 네트워크 릴리스 규칙을 지우십시오. 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 @@ -2563,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # 다른 모든 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 的规则 + # 지정된 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 的规则 + # 로컬 네트워크 릴리스 규칙을 지우십시오. 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 @@ -2584,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+포트는 서비스에 액세스 할 수있었습니다" save_iptables_rules } @@ -2598,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." + echo "사용법 : block_host_port <포트 번호> <승인 된 ip>" return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # 다른 모든 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 访问 + # 지정된 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 @@ -2625,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # 다른 모든 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 访问 + # 지정된 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+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" save_iptables_rules } @@ -2657,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." + echo "사용법 : CLEAR_HOST_PORT_RULES <포트 번호> <승인 IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # 다른 모든 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 访问的规则 + # 지정된 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 访问的规则 + # 다른 모든 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 访问的规则 + # 지정된 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+端口访问该服务" + echo "IP+포트는 서비스에 액세스 할 수있었습니다" save_iptables_rules } @@ -2726,7 +2727,7 @@ grep -qxF "${app_id}" /home/docker/appno.txt || echo "${app_id}" >> /home/docker docker_app() { -send_stats "${docker_name}管理" +send_stats "${docker_name}관리하다" while true; do clear @@ -2746,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" + echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2770,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_name설치" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "설치하다$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2785,12 +2786,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_name설치" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "更新$docker_name" + send_stats "고쳐 쓰다$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2799,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "앱이 제거되었습니다" + send_stats "제거하십시오$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}도메인 액세스 설정" + send_stats "${docker_name}도메인 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IP 액세스 허용${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IP 액세스를 차단하십시오${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2859,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" + echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2894,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}도메인 액세스 설정" + send_stats "${docker_name}도메인 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "IP 액세스 허용${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "IP 액세스를 차단하십시오${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2994,17 +2995,17 @@ 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 세션을 만듭니다 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3079,11 +3080,11 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "다시 시작" reboot ;; *) - echo "已取消" + echo "취소" ;; esac @@ -3126,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "LDNMP 환경을 다시 설치할 수 없습니다" + echo -e "${gl_huang}힌트:${gl_bai}웹 사이트 구성 환경이 설치되었습니다. 다시 설치할 필요가 없습니다!" break_end linux_ldnmp fi @@ -3137,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "LDNMP 환경을 설치하십시오" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}LDNMP 환경이 설치되지 않았으며 LDNMP 환경 설치를 시작하십시오 ...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3154,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "Nginx 환경을 설치하십시오" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3168,8 +3169,8 @@ 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 "Nginx가 설치되었습니다" +echo -e "현재 버전 :${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3180,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "먼저 LDNMP 환경을 설치하십시오" ldnmp_install_all fi @@ -3190,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "Nginx 환경을 먼저 설치하십시오" nginx_install_all fi @@ -3201,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "당신 것$webname세워짐!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webname설치 정보는 다음과 같습니다." } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "당신 것$webname세워짐!" echo "https://$yuming" } @@ -3222,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3263,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "반세대 IP를 입력하십시오 :" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "반세대 포트를 입력하십시오 :" port fi nginx_install_status install_ssltls @@ -3296,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "공간으로 분리 된 여러 반세대 IP+ 포트를 입력하십시오 (예 : 127.0.0.1:3000 127.0.1:3002) :" reverseproxy_port fi nginx_install_status @@ -3356,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMP 사이트 관리" + echo "LDNMP 환경" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "대지:${output}인증서 만료 시간" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3374,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + 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 "------------------------" - 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 -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 "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" - echo "3. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1. 도메인 이름 인증서 신청/업데이트 2. 사이트 도메인 이름 변경" + echo "3. 사이트 캐시 정리 4. 관련 사이트 만들기" + echo "5. 액세스 로그보기 6. 오류 로그보기" + echo "7. 글로벌 구성 편집 8. 사이트 구성 편집" + echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서보기" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20. 지정된 사이트 데이터를 삭제합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + 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 @@ -3411,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "사이트 도메인 이름을 변경하십시오" + echo -e "${gl_hong}적극 권장 :${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" + read -e -p "이전 도메인 이름을 입력하십시오 :" oddyuming + read -e -p "새 도메인 이름을 입력하십시오 :" yuming install_certbot install_ssltls certs_status - # mysql替换 + # MySQL 교체 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3437,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3458,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "관련 사이트를 만듭니다" + echo -e "액세스 용 기존 사이트의 새 도메인 이름을 연결하십시오." + read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming + read -e -p "새 도메인 이름을 입력하십시오 :" yuming install_certbot install_ssltls certs_status @@ -3475,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "액세스 로그를 봅니다" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "오류 로그를 봅니다" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "글로벌 구성 편집" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "사이트 구성 편집" + read -e -p "사이트 구성을 편집하려면 편집 할 도메인 이름을 입력하십시오." yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3503,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "사이트 데이터를 봅니다" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3534,21 +3535,21 @@ fi install_panel() { -send_stats "${panelname}管理" +send_stats "${panelname}관리하다" while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}요즘 인기 있고 강력한 운영 및 유지 관리 패널입니다." + echo "공식 웹 사이트 소개 :$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1. 설치 2. 관리 3. 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space 1 @@ -3557,20 +3558,20 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安装" + send_stats "${panelname}설치하다" ;; 2) panel_app_manage mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}控制" + send_stats "${panelname}제어" ;; 3) panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}제거하십시오" ;; *) break @@ -3614,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "FRP 서버를 설치하십시오" + # 임의의 포트 및 자격 증명을 생성합니다 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3636,17 +3637,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # 출력 생성 정보 ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + 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 "FRP 패널 정보" + echo "FRP 패널 주소 : http : //$ipv4_address:$dashboard_port" + echo "FRP 패널 사용자 이름 :$dashboard_user" + echo "FRP 패널 비밀번호 :$dashboard_pwd" echo open_port 8055 8056 @@ -3656,9 +3657,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "FRP 클라이언트를 설치하십시오" + read -e -p "외부 네트워크 도킹 IP를 입력하십시오." server_addr + read -e -p "외부 네트워크 도킹 토큰을 입력하십시오." token echo mkdir -p /home/frp @@ -3678,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "FRP 인트라넷 서비스를 추가하십시오" + # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 + read -e -p "서비스 이름을 입력하십시오 :" service_name + read -e -p "전달 유형 (TCP/UDP)을 입력하십시오 [기본 TCP 입력] :" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "인트라넷 IP를 입력하십시오 [기본값 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 + read -e -p "인트라넷 포트를 입력하십시오 :" local_port + read -e -p "외부 네트워크 포트를 입력하십시오 :" remote_port - # 将用户输入写入配置文件 + # 구성 파일에 사용자 입력을 쓰십시오 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3698,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # 출력 생성 정보 + echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다" docker restart frpc @@ -3710,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "FRP 인트라넷 서비스를 삭제하십시오" + # 삭제 해야하는 서비스 이름을 입력하라는 메시지 + read -e -p "삭제 해야하는 서비스 이름을 입력하십시오." service_name + # SED를 사용하여 서비스 및 관련 구성을 삭제하십시오. sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "제공하다$service_namefrpc.toml에서 성공적으로 삭제되었습니다" docker restart frpc @@ -3725,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # 헤더를 인쇄하십시오 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3746,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # 서비스 정보가있는 경우 새 서비스를 처리하기 전에 현재 서비스를 인쇄하십시오. if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3755,11 +3756,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 현재 서비스 이름을 업데이트하십시오 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 이전 값을 지우십시오 local_ip="" local_port="" remote_port="" @@ -3788,7 +3789,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 마지막 서비스에 대한 정보를 인쇄하십시오 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3801,17 +3802,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# 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 的端口 + # 8055/8056 이외의 포트가 있는지 확인하십시오 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3820,18 +3821,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # 유효한 포트가있을 때만 제목과 콘텐츠 표시 if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRP 서비스 외부 액세스 주소 :" - # 处理 IPv4 地址 + # 프로세스 IPv4 주소 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # Process IPv6 주소 (현재 경우) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3840,7 +3841,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # HTTPS 구성 처리 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3867,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRP 서버" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3875,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRP 서버$check_frp $update_status" + echo "FRP 인트라넷 침투 서비스 환경을 구축하여 인터넷에 공개 IP없이 장치를 노출시킵니다." + 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 "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5. 인트라넷 서비스에 대한 도메인 이름 액세스 6. 도메인 이름 액세스 삭제" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00. 서비스 상태 새로 고침 0. 이전 메뉴로 돌아갑니다." echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) install jq grep ss @@ -3901,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经安装完成" + echo "FRP 서버가 설치되었습니다" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3911,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经更新完成" + echo "FRP 서버가 업데이트되었습니다" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3922,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "리버스 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" + send_stats "외부 도메인 이름에 대한 FRP 액세스" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "인트라넷 침투 서비스 포트를 입력하십시오 :" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + 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 + send_stats "IP 액세스를 차단하십시오" + echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단할 수 있습니다." + read -e -p "차단 해야하는 포트를 입력하십시오." frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "FRP 서비스 상태를 새로 고치십시오" + echo "FRP 서비스 상태가 새로 고쳐졌습니다" ;; *) @@ -3965,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRP 클라이언트" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3973,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRP 클라이언트$check_frp $update_status" + echo "서버로 도킹, 도킹 후 인터넷 액세스에 인트라넷 침투 서비스를 만들 수 있습니다." + echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" + echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3984,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4. 외부 서비스 추가 5. 외부 서비스 삭제 6. 서비스 구성 수동으로 서비스 구성" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) install jq grep ss @@ -3998,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经安装完成" + echo "FRP 클라이언트가 설치되었습니다" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4008,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经更新完成" + echo "FRP 클라이언트가 업데이트되었습니다" ;; 3) @@ -4019,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다" ;; 4) @@ -4065,68 +4066,68 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + 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 -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 "다운로드 된 비디오 목록 :" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(아직 없음)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5. 단일 비디오 다운로드 6. 배치 비디오 다운로드 7. 사용자 정의 매개 변수 다운로드" + echo "8. MP3 오디오 9. 비디오 디렉토리 삭제 10. 쿠키 관리 (개발 중)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "옵션 번호를 입력하십시오 :" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "yt-dlp 설치 ..." + echo "yt-dlp 설치 ..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安装完成。按任意键继续..." + echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 2) - send_stats "正在更新 yt-dlp..." - echo "正在更新 yt-dlp..." + send_stats "yt-dlp 업데이트 ..." + echo "yt-dlp 업데이트 ..." yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意键继续..." + echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "yt-dlp 제거 ..." + echo "yt-dlp 제거 ..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + 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 "下载完成,按任意键继续..." ;; + read -e -p "다운로드가 완료되면 키를 눌러 계속하십시오 ..." ;; 6) - send_stats "批量视频下载" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 여러 비디오 링크 주소를 입력하십시오 \ n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "이제 배치 다운로드를 시작하십시오 ..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4134,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "배치 다운로드가 완료되었습니다. 키를 눌러 계속하십시오 ..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + 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 "执行完成,按任意键继续..." ;; + read -e -p "실행이 완료되면 키를 눌러 계속하십시오 ..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + 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 "音频下载完成,按任意键继续..." ;; + read -e -p "오디오 다운로드가 완료되었습니다. 키를 누르면 계속하십시오 ..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "비디오 삭제" + read -e -p "삭제 비디오의 이름을 입력하십시오." rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4194,7 +4195,7 @@ set_timedate() { -# 修复dpkg中断问题 +# DPKG 인터럽트 문제를 수정하십시오 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4203,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4222,7 +4223,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi } @@ -4230,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}시스템 정리 ...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4259,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "패키지 관리자 캐시 청소 ..." apk cache clean - echo "删除系统日志..." + echo "시스템 로그 삭제 ..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "APK 캐시 삭제 ..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "임시 파일 삭제 ..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4283,23 +4284,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "시스템 로그 삭제 ..." rm -rf /var/log/* - echo "删除临时文件..." + echo "임시 파일 삭제 ..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "사용하지 않는 의존성 정리 ..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "패키지 관리자 캐시 청소 ..." pkg clean -y - echo "删除系统日志..." + echo "시스템 로그 삭제 ..." rm -rf /var/log/* - echo "删除临时文件..." + echo "임시 파일 삭제 ..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi return @@ -4339,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "DNS 최적화" while true; do clear - echo "优化DNS地址" + echo "DNS 주소를 최적화합니다" echo "------------------------" - echo "当前DNS地址" + echo "현재 DNS 주소" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + 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 "2. 국내 DNS 최적화 :" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3. DNS 구성을 수동으로 편집합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4366,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "외국 DNS 최적화" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4374,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "국내 DNS 최적화" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "DNS 구성을 수동으로 편집합니다" ;; *) break @@ -4402,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # PasswordAuthentication이 발견되면 예로 설정하십시오 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 设置为 yes + # 발견 된 경우 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/' \ @@ -4416,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # PasswordAuthentication 또는 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" @@ -4427,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # 백업 SSH 구성 파일 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4440,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "SSH 포트는 다음으로 수정되었습니다.$new_port" sleep 1 @@ -4458,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "개인 키 정보가 생성되었습니다. 복사하고 저장하십시오.${gl_huang}${ipv4_address}_ssh.key${gl_bai}향후 SSH 로그인 파일" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4470,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}루트 프라이빗 키 로그인이 활성화되고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "SSH 공개 키 내용을 입력하십시오 (일반적으로 'SSH-RSA'또는 'SSH-ED25519'로 시작) :" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}오류 : 공개 키 컨텐츠가 입력되지 않았습니다.${gl_bai}" return 1 fi @@ -4498,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}공개 키가 성공적으로 가져 왔고 루트 개인 키 로그인이 활성화되었고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" } @@ -4507,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}루트 로그인이 설정되었습니다!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}힌트:${gl_bai}이 기능은 루트 사용자가 실행해야합니다!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + 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 @@ -4537,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." + echo -e "${gl_hui}Leitbogioro 및 Bin456789의 스크립트 지원 덕분에!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4587,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35. OpenSuse Tumbleweed 36. FNOS FEINIU 공개 베타 버전" 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 "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "데비안 13을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4609,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "데비안 12를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "데비안 11을 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "데비안 10을 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "우분투 24.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "우분투 22.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "Ubuntu 20.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "우분투 18.04를 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4660,7 +4661,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "Rockylinux10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4668,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "Rockylinux9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4676,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "Alma10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4684,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "Alma9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4692,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "Oracle10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4700,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "Oracle9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4708,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "Fedora42를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4716,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "Fedora41을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4724,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "CentOS10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4732,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "CentOS9를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4740,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "알파인을 다시 설치하십시오" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4748,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "아치를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh arch reboot @@ -4756,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "칼리를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh kali reboot @@ -4764,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "Openeuler를 다시 설치하십시오" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4772,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "재설치 OpenSuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4780,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "비행 소부소" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4789,7 +4790,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "Windows 11을 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4797,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "Windows 10을 다시 설치하십시오" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "Windows 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 @@ -4811,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "Windows Server 22를 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "Windows Server 19를 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "Windows Server 16을 다시 설치하십시오" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4833,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "Windows11 Arm을 다시 설치하십시오" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4850,7 +4851,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3管理" + send_stats "BBRV3 관리" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4863,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "Xanmod의 BBRV3 커널을 설치했습니다" + echo "현재 커널 버전 :$kernel_version" echo "" - echo "内核管理" + echo "커널 관리" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1. BBRV3 커널 업데이트 2. BBRV3 커널 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) @@ -4883,7 +4884,7 @@ bbrv3() { # 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:添加存储库 + # 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+') @@ -4892,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "Xanmod 커널이 업데이트되었습니다. 다시 시작한 후에도 적용됩니다" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4902,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "Xanmod 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" server_reboot ;; @@ -4915,13 +4916,13 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "BBR3 가속도를 설정하십시오" + echo "비디오 소개 : https://www.bilibili.com/video/bv14k421x7bs?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "데비안/우분투 만 지원합니다" + echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) @@ -4929,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "현재 환경은이를 지원하지 않으며 데비안 및 우분투 시스템 만 지원합니다." break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "운영 체제 유형을 결정할 수 없습니다" break_end linux_Settings fi @@ -4945,7 +4946,7 @@ bbrv3() { # 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:添加存储库 + # 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+') @@ -4956,17 +4957,17 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + 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 "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac fi @@ -4975,40 +4976,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # 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" + echo "지원되지 않는 운영 체제 :$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # 감지 된 운영 체제 정보를 인쇄합니다 + echo "운영 체제 감지 :$os_name $os_version" + # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + 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)..." + echo "Elrepo 저장소 구성 (버전 9)을 설치하십시오 ..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "Elrepo 저장소 구성 (버전 10)을 설치하십시오 ..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "지원되지 않는 시스템 버전 :$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오. + echo "Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오 ..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "Elrepo 저장소 구성이 설치되어 최신 메인 라인 커널로 업데이트됩니다." server_reboot } @@ -5016,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "레드 모자 커널 관리" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "Elrepo 커널을 설치했습니다" + echo "현재 커널 버전 :$kernel_version" echo "" - echo "内核管理" + echo "커널 관리" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. Elrepo 커널 업데이트 2. Elrepo 커널 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "更新红帽内核" + 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 "卸载红帽内核" + echo "Elrepo 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" + send_stats "빨간 모자 커널을 제거하십시오" server_reboot ;; @@ -5059,26 +5060,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "데이터를 백업하고 Linux 커널을 업그레이드합니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "Red Hat 시리즈 배포 Centos/Redhat/Alma/Rocky/Oracle 만 지원합니다" + echo "Linux 커널을 업그레이드하면 시스템 성능 및 보안이 향상 될 수 있습니다. 조건이 허용되고 생산 환경을 조심스럽게 업그레이드하는 경우 시도하는 것이 좋습니다!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "Red Hat 커널을 업그레이드하십시오" server_reboot ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac fi @@ -5089,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}바이러스 데이터베이스 업데이트 ...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5099,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "스캔 할 디렉토리를 지정하십시오." return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + 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 命令参数 + # Clamscan 명령 매개 변수를 작성하십시오 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5120,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # Docker 명령을 실행하십시오 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5129,8 +5130,8 @@ clamav_scan() { 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}" + echo -e "${gl_lv}$@ scan이 완료되고 바이러스 보고서가 저장됩니다${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}바이러스가 있다면 제발${gl_huang}scan.log${gl_lv}파일에서 찾은 키워드를 검색하여 바이러스의 위치를 ​​확인하십시오.${gl_bai}" } @@ -5142,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "바이러스 스캔 관리" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "Clamav 바이러스 스캐닝 도구" + echo "비디오 소개 : https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "오픈 소스 바이러스 백신 소프트웨어 도구로 주로 다양한 유형의 맬웨어를 감지하고 제거하는 데 사용됩니다." + echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어를 포함합니다." echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리를 스캔하십시오${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "전체 디스크 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5167,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "중요한 디렉토리 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5175,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "사용자 정의 디렉토리 스캔" + read -e -p "스캔 할 디렉토리를 입력하십시오." directories install_docker clamav_freshclam clamav_scan $directories @@ -5193,21 +5194,21 @@ clamav() { -# 高性能模式优化函数 +# 고성능 모드 최적화 기능 optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}전환하십시오${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5219,36 +5220,36 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}캐시 관리 최적화 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}기타 최적화 ...${gl_bai}" + # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # NUMA 밸런싱을 비활성화합니다 sysctl -w kernel.numa_balancing=0 2>/dev/null } -# 均衡模式优化函数 +# 이퀄라이제이션 모드 최적화 기능 optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5260,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}캐시 관리 최적화 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}기타 최적화 ...${gl_bai}" + # 투명 페이지를 복원하십시오 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # NUMA 밸런싱을 복원하십시오 sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# 기본 설정 기능을 복원하십시오 restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}기본 설정으로 복원하십시오 ...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 디스크립터 복원 ...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + 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}" + 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 @@ -5301,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}캐시 관리 복원 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 복원 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}다른 최적화를 복원 ...${gl_bai}" + # 투명 페이지를 복원하십시오 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 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}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5343,16 +5344,16 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}캐시 관리 최적화 ...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}기타 최적화 ...${gl_bai}" + # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # 禁用 NUMA balancing + # NUMA 밸런싱을 비활성화합니다 sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5363,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linux 커널 튜닝 관리" + echo "Linux 시스템에서 커널 매개 변수의 최적화" + echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." + echo -e "${gl_huang}힌트:${gl_bai}생산 환경에서주의해서 사용하십시오!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1. 고성능 최적화 모드 : 시스템 성능을 극대화하고 파일 설명기, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." + echo "2. 균형 최적화 모드 : 매일 사용하기에 적합한 성능과 자원 소비 사이의 균형." + echo "3. 웹 사이트 최적화 모드 : 웹 사이트 서버에 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." + echo "4. 라이브 브로드 캐스트 최적화 모드 : 라이브 방송 스트리밍의 특별한 요구를 최적화하여 대기 시간을 줄이고 전송 성능을 향상시킵니다." + echo "5. 게임 서버 최적화 모드 : 게임 서버를 위해 동시 처리 기능 및 응답 속도를 향상시킬 최적화." + echo "6. 기본 설정을 복원하십시오. 시스템 설정을 기본 구성으로 복원하십시오." echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "고성능 모드 최적화" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "균형 모드 최적화" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "웹 사이트 최적화 모델" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "라이브 스트리밍 최적화" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "게임 서버 최적화" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "기본 설정을 복원하십시오" ;; *) break @@ -5445,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" hash -r break_end @@ -5454,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "지원되지 않는 시스템 :$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "지원되지 않는 시스템, 시스템 유형을 인식 할 수 없습니다." break_end fi } @@ -5474,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "스위치 시스템 언어" while true; do clear - echo "当前系统语言: $LANG" + echo "현재 시스템 언어 :$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1. 영어 2. 중국어 3. 전통 중국어" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "영어로 전환하십시오" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "단순화 된 중국어로 전환하십시오" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "전통적인 중국어로 전환하십시오" ;; *) break @@ -5518,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}변경이 완료되었습니다. 변경 사항을 볼 수 있도록 SSH를 다시 ​​연결하십시오!${gl_bai}" hash -r break_end @@ -5529,10 +5530,10 @@ break_end shell_bianse() { root_use - send_stats "命令行美化工具" + send_stats "명령 라인 미화 도구" while true; do clear - echo "命令行美化工具" + 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}#" @@ -5542,9 +5543,9 @@ shell_bianse() { 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 "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -5589,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "시스템 재활용 스테이션" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5604,17 +5605,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "현재 재활용 쓰레기통${trash_status}" + echo -e "활성화 후 RM이 삭제 한 파일은 먼저 재활용 빈에 입력하여 중요한 파일의 잘못된 삭제를 방지합니다!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "재활용 쓰레기통은 비어 있습니다" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1. 재활용 빈을 활성화합니다. 2. 재활용 쓰레기통을 닫습니다." + echo "3. 컨텐츠를 복원 4. 재활용 쓰레기통을 지 웁니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -5622,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "Recycle Bin이 활성화되고 삭제 된 파일이 Recycle Bin으로 이동됩니다." sleep 2 ;; 2) @@ -5630,23 +5631,23 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "재활용 빈이 닫히고 파일이 직접 삭제됩니다." sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + 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 已还原到主目录。" + echo "$file_to_restore홈 디렉토리로 복원되었습니다." else - echo "文件不存在。" + echo "파일이 존재하지 않습니다." fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "재활용 쓰레기통을 지우셨습니까? [Y/N] :" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "재활용 쓰레기통이 지워졌습니다." fi ;; *) @@ -5657,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夹" +send_stats "명령 즐겨 찾기" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 创建备份 +# 백업을 만듭니다 create_backup() { - send_stats "创建备份" + send_stats "백업을 만듭니다" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # 사용자에게 백업 디렉토리를 입력하라는 메시지를 표시하십시오 + echo "백업 예제 :" + echo "- 단일 디렉토리를 백업 : /var /www" + echo "- 여러 디렉토리 백업 : /etc /home /var /log" + echo "- Direct Enter는 기본 디렉토리 ( /etc /usr /home)를 사용합니다." + read -r -p "백업 디렉토리를 입력하십시오 (여러 디렉토리가 공간별로 구분되며 직접 입력하면 기본 디렉토리를 사용하십시오)." input - # 如果用户没有输入目录,则使用默认目录 + # 사용자가 디렉토리를 입력하지 않으면 기본 디렉토리를 사용하십시오. if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5681,119 +5682,119 @@ create_backup() { "/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 "您选择的备份目录为:" + # 사용자가 선택한 디렉토리를 인쇄하십시오 + echo "선택한 백업 디렉토리는 다음과 같습니다." for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # 백업을 만듭니다 + echo "백업 생성$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # 명령이 성공했는지 확인하십시오 if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "백업은 성공적으로 생성되었습니다.$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "백업 생성이 실패했습니다!" exit 1 fi } -# 恢复备份 +# 백업을 복원하십시오 restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "백업을 복원하십시오" + # 복원하려는 백업을 선택하십시오 + read -e -p "복원하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME - # 检查备份文件是否存在 + # 백업 파일이 있는지 확인하십시오 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "백업 파일이 존재하지 않습니다!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "백업 복구$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "백업 및 복원을 성공적으로 복원하십시오!" else - echo "备份恢复失败!" + echo "백업 복구 실패!" exit 1 fi } -# 列出备份 +# 백업을 나열합니다 list_backups() { - echo "可用的备份:" + echo "사용 가능한 백업 :" ls -1 "$BACKUP_DIR" } -# 删除备份 +# 백업을 삭제하십시오 delete_backup() { - send_stats "删除备份" + send_stats "백업을 삭제하십시오" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "삭제하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME - # 检查备份文件是否存在 + # 백업 파일이 있는지 확인하십시오 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "백업 파일이 존재하지 않습니다!" exit 1 fi - # 删除备份 + # 백업을 삭제하십시오 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "백업이 성공적으로 삭제되었습니다!" else - echo "备份删除失败!" + echo "백업 삭제가 실패했습니다!" exit 1 fi } -# 备份主菜单 +# 백업 메인 메뉴 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "시스템 백업 기능" + echo "시스템 백업 기능" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1. 백업 만들기 2. 백업 복원 3. 백업 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르십시오 ..." done } @@ -5805,56 +5806,56 @@ linux_backup() { -# 显示连接列表 +# 연결 목록 표시 list_connections() { - echo "已保存的连接:" + 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 " - 用户名: root" - echo " - 端口: 22" + 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 "请输入用户名 (默认: root): " user + read -e -p "연결 이름을 입력하십시오 :" name + read -e -p "IP 주소를 입력하십시오 :" ip + read -e -p "사용자 이름 (기본값 : 루트)을 입력하십시오 :" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "인증 방법을 선택하십시오 :" + echo "1. 비밀번호" + echo "2. 키" + read -e -p "선택 (1/2)을 입력하십시오 :" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "비밀번호를 입력하십시오 :" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" 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" @@ -5863,89 +5864,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "잘못된 선택!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "연결이 저장됩니다!" } -# 删除连接 +# 연결을 삭제하십시오 delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "연결을 삭제하십시오" + read -e -p "삭제하려면 연결 번호를 입력하십시오." num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + 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 "连接已删除!" + echo "연결이 삭제되었습니다!" } -# 使用连接 +# 연결을 사용하십시오 use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "연결을 사용하십시오" + read -e -p "사용할 연결 번호를 입력하십시오." num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "오류 : 해당 연결을 찾을 수 없었습니다." return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + 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. 目标服务器是否允许使用密钥登录。" + 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 "오류 : 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 服务是否正常运行。" + echo "연결 실패! 다음을 확인하십시오." + echo "1. 사용자 이름과 비밀번호가 올바른지 여부." + echo "2. 대상 서버가 암호 로그인을 허용하는지 여부." + echo "3. 대상 서버의 SSH 서비스가 정상적으로 실행되는지 여부." fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "SSH 원격 연결 도구" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # 구성 파일과 키 디렉토리가 존재하는지 확인하고 존재하지 않으면 작성하십시오. if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5957,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSH 원격 연결 도구" + echo "SSH를 통해 다른 Linux 시스템에 연결할 수 있습니다" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1. 새 연결 만들기 2. 연결 사용 3. 연결 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "잘못된 선택, 다시 시도하십시오." ;; esac done } @@ -5987,156 +5988,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 사용 가능한 하드 디스크 파티션을 나열하십시오 list_partitions() { - echo "可用的硬盘分区:" + echo "사용 가능한 하드 디스크 파티션 :" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# 파티션을 장착하십시오 mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "파티션을 장착하십시오" + read -e -p "장착 할 파티션 이름을 입력하십시오 (예 : SDA1) :" PARTITION - # 检查分区是否存在 + # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "파티션이 존재하지 않습니다!" return fi - # 检查分区是否已经挂载 + # 파티션이 이미 장착되어 있는지 확인하십시오 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "파티션은 이미 장착되어 있습니다!" return fi - # 创建挂载点 + # 마운트 포인트를 만듭니다 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # 파티션을 장착하십시오 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "파티션 마운트 성공적으로 :$MOUNT_POINT" else - echo "分区挂载失败!" + echo "파티션 마운트 실패!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# 파티션을 제거하십시오 unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "파티션을 제거하십시오" + read -e -p "파티션 이름 (예 : SDA1)을 입력하십시오." PARTITION - # 检查分区是否已经挂载 + # 파티션이 이미 장착되어 있는지 확인하십시오 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "파티션이 장착되지 않았습니다!" return fi - # 卸载分区 + # 파티션을 제거하십시오 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "파티션 분할 해제 성공 :$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "파티션 제거 실패!" fi } -# 列出已挂载的分区 +# 목록 장착 파티션 list_mounted_partitions() { - echo "已挂载的分区:" + echo "마운트 파티션 :" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# 형식 파티션 format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "형식 파티션" + read -e -p "파티션 이름을 형식 (예 : SDA1)에 입력하십시오." PARTITION - # 检查分区是否存在 + # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "파티션이 존재하지 않습니다!" return fi - # 检查分区是否已经挂载 + # 파티션이 이미 장착되어 있는지 확인하십시오 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "파티션이 장착되었습니다. 먼저 제거하십시오!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # 파일 시스템 유형을 선택하십시오 + echo "파일 시스템 유형을 선택하십시오 :" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + 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 ;; + *) echo "잘못된 선택!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # 형식을 확인하십시오 + read -e -p "파티션 형식 확인 /dev /$PARTITION~을 위한$FS_TYPE그게? (Y/N) :" CONFIRM if [ "$CONFIRM" != "y" ]; then - echo "操作已取消。" + echo "작업이 취소되었습니다." return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # 형식 파티션 + echo "파티션 서식 /dev /$PARTITION~을 위한$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "파티션 형식이 성공적이었습니다!" else - echo "分区格式化失败!" + echo "파티션 형식이 실패했습니다!" fi } -# 检查分区状态 +# 파티션 상태를 확인하십시오 check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "파티션 상태를 확인하십시오" + read -e -p "파티션 이름을 입력하여 확인하십시오 (예 : SDA1) :" PARTITION - # 检查分区是否存在 + # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "파티션이 존재하지 않습니다!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # 파티션 상태를 확인하십시오 + echo "파티션 /개발자 /$PARTITION상태:" fsck "/dev/$PARTITION" } -# 主菜单 +# 메인 메뉴 disk_manager() { - send_stats "硬盘管理功能" + send_stats "하드 디스크 관리 기능" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "하드 디스크 파티션 관리" + echo -e "${gl_huang}이 기능은 테스트 기간 동안 내부적으로 테스트되므로 생산 환경에서 사용하지 마십시오.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1. 파티션 마운트 2. 파티션 3. 마운트 파티션보기" + echo "4. 파티션 형식 5. 파티션 상태를 확인하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6145,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르십시오 ..." done } -# 显示任务列表 +# 작업 목록 표시 list_tasks() { - echo "已保存的同步任务:" + 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 " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + 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 + 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 + echo "인증 방법을 선택하십시오 :" + echo "1. 비밀번호" + echo "2. 키" + read -e -p "선택하십시오 (1/2) :" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "비밀번호를 입력하십시오 :" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" 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" @@ -6210,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "잘못된 키 컨텐츠!" return fi ;; *) - echo "无效的选择!" + echo "잘못된 선택!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + 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" ;; + *) 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 "任务已保存!" + echo "작업을 저장했습니다!" } -# 删除任务 +# 작업을 삭제하십시오 delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "동기화 작업을 삭제합니다" + read -e -p "삭제하려면 작업 번호를 입력하십시오." num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + 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 "任务已删除!" + echo "작업이 삭제되었습니다!" } run_task() { - send_stats "执行同步任务" + send_stats "동기화 작업을 수행하십시오" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # 매개 변수를 분석하십시오 local direction="push" # 默认是推送到远端 local num @@ -6277,51 +6278,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # 들어오는 작업 번호가없는 경우 사용자에게 입력하라는 메시지를 표시하십시오. if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "실행할 작업 번호를 입력하십시오." num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + 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" + echo "로컬로 동기화를 당기기 :$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "동기화를 원격 끝으로 푸시합니다.$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # 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 "오류 : 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" + echo "오류 : 키 파일이 존재하지 않습니다.$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "경고 : 키 파일 권한이 잘못되었고 수리 중입니다 ..." chmod 600 "$password_or_key" fi @@ -6329,32 +6330,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同步完成!" + echo "동기화가 완료되었습니다!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "동기화 실패! 다음을 확인하십시오." + echo "1. 네트워크 연결이 정상입니까?" + echo "2. 원격 호스트가 액세스 할 수 있습니까?" + echo "3. 인증 정보가 정확합니까?" + echo "4. 로컬 및 원격 디렉토리에 올바른 액세스 권한이 있습니까?" fi } -# 创建定时任务 +# 시간이 정한 작업을 만듭니다 schedule_task() { - send_stats "添加同步定时任务" + send_stats "동기화 타이밍 작업을 추가하십시오" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "정기적으로 동기화 할 작업 번호를 입력하십시오." num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "오류 : 유효한 작업 번호를 입력하십시오!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + 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="" @@ -6362,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) 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 "错误: 该任务的定时同步已存在!" + echo "오류 :이 작업의 타이밍 동기화가 이미 존재합니다!" return fi - # 创建到用户的 crontab + # 사용자에게 크론AB를 만듭니다 (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "타이밍 작업이 만들어졌습니다.$cron_job" } -# 查看定时任务 +# 예정된 작업을 봅니다 view_tasks() { - echo "当前的定时任务:" + echo "현재 타이밍 작업 :" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# 타이밍 작업을 삭제하십시오 delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "동기화 타이밍 작업을 삭제합니다" + read -e -p "삭제하려면 작업 번호를 입력하십시오." num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "오류 : 유효한 작업 번호를 입력하십시오!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "삭제 된 작업 번호$num타이밍 작업" } -# 任务管理主菜单 +# 작업 관리 메인 메뉴 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "RSYNC 원격 동기화 도구" + echo "원격 디렉토리 간의 동기화는 증분 동기화, 효율적이고 안정적인 지원을 지원합니다." echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1. 새 작업 생성 2. 작업을 삭제하십시오" + echo "3. 원격 끝에 로컬 동기화 수행 4. 로컬 엔드에 대한 원격 동기화 수행" + echo "5. 타이밍 작업 만들기 6. 타이밍 작업 삭제" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6430,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "잘못된 선택, 다시 시도하십시오." ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르십시오 ..." done } @@ -6447,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "시스템 정보 쿼리" ip_address @@ -6497,41 +6498,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + 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}Linux版本: ${gl_bai}$kernel_version" + 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}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}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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" + echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}네트워크 알고리즘 :${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}연산자:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4 주소 :${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}실행 시간:${gl_bai}$runtime" echo @@ -6544,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats "기본 도구" + echo -e "기본 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}컬 다운로드 도구${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}WGET 다운로드 도구${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}소사이어티 커뮤니케이션 연결 도구" + 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}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + 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}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}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}41. ${gl_bai}지정된 도구를 설치하십시오${gl_kjlan}42. ${gl_bai}지정된 도구를 제거하십시오" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." curl --help - send_stats "安装curl" + send_stats "컬을 설치하십시오" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." wget --help - send_stats "安装wget" + send_stats "wget을 설치하십시오" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." sudo --help - send_stats "安装sudo" + send_stats "Sudo를 설치하십시오" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." socat -h - send_stats "安装socat" + send_stats "Socat을 설치하십시오" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "HTOP를 설치하십시오" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "iftop을 설치하십시오" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." unzip - send_stats "安装unzip" + send_stats "압축을 설치하십시오" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." tar --help - send_stats "安装tar" + send_stats "타르를 설치하십시오" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." tmux --help - send_stats "安装tmux" + send_stats "tmux를 설치하십시오" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "도구가 설치되었으며 사용법은 다음과 같습니다." ffmpeg --help - send_stats "安装ffmpeg" + send_stats "FFMPEG를 설치하십시오" ;; 11) @@ -6656,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "Btop을 설치하십시오" ;; 12) clear @@ -6665,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "레인저를 설치하십시오" ;; 13) clear @@ -6674,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "NCDU를 설치하십시오" ;; 14) clear @@ -6683,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "FZF를 설치하십시오" ;; 15) clear @@ -6692,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "VIM을 설치하십시오" ;; 16) clear @@ -6701,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "나노를 설치하십시오" ;; @@ -6712,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "git을 설치하십시오" ;; 21) @@ -6720,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "cmatrix를 설치하십시오" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "SL을 설치하십시오" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "Bastet을 설치하십시오" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "NSNAKE를 설치하십시오" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "Ninvaders를 설치하십시오" ;; 31) clear - send_stats "全部安装" + 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 "全部安装(不含游戏和屏保)" + send_stats "모든 설치 (게임 및 화면 보호기 제외)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + 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 + read -e -p "설치된 도구 이름 (WGET CURL SUDO HTOP)을 입력하십시오." installname install $installname - send_stats "安装指定软件" + send_stats "지정된 소프트웨어를 설치하십시오" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "제거되지 않은 도구 이름 (HTOP UFW TMUX CMATRIX)을 입력하십시오." removename remove $removename - send_stats "卸载指定软件" + send_stats "지정된 소프트웨어를 제거하십시오" ;; 0) @@ -6788,7 +6789,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -6802,27 +6803,27 @@ linux_tools() { linux_bbr() { clear - send_stats "bbr管理" + 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 "현재 TCP 차단 알고리즘 :$congestion_algorithm $queue_algorithm" echo "" - echo "BBR管理" + echo "BBR 관리" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1. BBRV3 켜기 2. BBRV3 끄기 (재시작)" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "알파인 활성화 BBR3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6867,21 +6868,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}当前备份列表:${NC}" - ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + echo -e "${BLUE}현재 백업 목록 :${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음" } # ---------------------------- - # 备份 + # 지원 # ---------------------------- backup_docker() { - send_stats "Docker备份" + send_stats "도커 백업" - echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" docker ps --format '{{.Names}}' - read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + read -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers install tar jq gzip install_docker @@ -6892,7 +6893,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}컨테이너가 없습니다${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6900,28 +6901,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" + echo "# 자동으로 생성 된 복원 스크립트" >> "$RESTORE_SCRIPT" - # 记录已打包过的 Compose 项目路径,避免重复打包 + # 중복 포장을 피하기 위해 패키지 작곡 프로젝트의 경로를 기록하십시오. declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}备份容器: $c${NC}" + echo -e "${GREEN}백업 컨테이너 :$c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" + echo -e "${BLUE}감지$c예, Docker-compose 컨테이너${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未检测到 compose 目录,请手动输入路径: " project_dir + read -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir fi - # 如果该 Compose 项目已经打包过,跳过 + # Compose 프로젝트가 포장 된 경우 건너 뛰십시오 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}작곡 프로젝트 [$project_name] 백업, 중복 포장을 건너 뛰십시오 ...${NC}" continue fi @@ -6929,137 +6930,137 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" + echo "# Docker-Compose Recovery :$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" + echo -e "${GREEN}작곡 프로젝트 [$project_name] 포장 :${project_dir}${NC}" else - echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" + echo -e "${RED}docker-compose.yml을 찾을 수 없고이 컨테이너를 건너 뛰십시오 ...${NC}" fi else - # 普通容器备份卷 + # 일반 컨테이너 백업 볼륨 local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "打包卷: $path" + echo "포장 롤 :$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done - # 端口 + # 포트 local PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 环境变量 + # 환경 변수 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # 卷映射 + # 볼륨 매핑 local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 镜像 + # 거울 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" + echo -e "\ n# 복원 컨테이너 :$c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # 备份 /home/docker 下的所有文件(不含子目录) + # /home /docker 아래의 모든 파일을 백업 (하위 디렉터 제외) if [ -d "/home/docker" ]; then - echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + echo -e "${BLUE}/home /docker 아래 파일을 백업 ...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}/home /docker의 파일은 다음과 같이 포장되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" - echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}백업이 완료되었습니다.${BACKUP_DIR}${NC}" + echo -e "${GREEN}사용 가능한 복원 스크립트 :${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 还原 + # 절감 # ---------------------------- restore_docker() { - send_stats "Docker还原" - read -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "도커 복원" + read -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } - echo -e "${BLUE}开始执行还原操作...${NC}" + echo -e "${BLUE}복원 작업 시작 ...${NC}" install tar jq gzip install_docker - # --------- 优先还原 Compose 项目 --------- + # ----------------------------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + [[ -z "$original_path" ]] && read -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path - # 检查该 compose 项目的容器是否已经在运行 + # Compose 프로젝트 용 컨테이너가 이미 실행 중인지 확인하십시오. running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" + echo -e "${YELLOW}작곡 프로젝트 [$project_name] 이미 컨테이너가 실행 중입니다. 스킵 복원 ...${NC}" continue fi - read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + read -p "Compose 프로젝트 복원 확인 [$project_name] 경로로 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "새로운 복원 경로를 입력하십시오 :" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" + echo -e "${GREEN}작곡 프로젝트 [$project_name] 압축 압축 : :$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" + echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원이 완료되었습니다!${NC}" fi done - # --------- 继续还原普通容器 --------- - echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" + # ----------------------------- + echo -e "${BLUE}일반적인 도커 컨테이너를 확인하고 복원하십시오 ...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}处理容器: $container${NC}" + echo -e "${GREEN}처리 컨테이너 :$container${NC}" - # 检查容器是否已经存在且正在运行 + # 컨테이너가 이미 존재하고 실행 중인지 확인하십시오 if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" + echo -e "${YELLOW}컨테이너 [$container]는 실행 중입니다. 회복을 건너 뛰십시오 ...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}거울 정보는 찾을 수 없었습니다.$container${NC}"; continue; } - # 端口映射 + # 포트 매핑 PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 环境变量 + # 환경 변수 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # 卷映射 + 卷数据恢复 + # 볼륨 매핑 + 볼륨 데이터 복구 VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7070,32 +7071,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "恢复卷数据: $VOL_SRC" + echo "볼륨 데이터 복구 :$VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 删除已存在但未运行的容器 + # 기존이지만 실행되지 않은 컨테이너를 삭제하십시오 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" + echo -e "${YELLOW}컨테이너 [$container] 존재하지만 실행되지 않고 오래된 컨테이너를 삭제합니다 ...${NC}" docker rm -f "$container" fi - # 启动容器 - echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # 컨테이너를 시작하십시오 + echo "복원 명령 실행 : docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}일반 컨테이너에 대한 백업 정보는 발견되지 않았습니다${NC}" - # 还原 /home/docker 下的文件 + # /home /docker에서 파일을 복원하십시오 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" + echo -e "${BLUE}/home /docker에서 파일을 복원 ...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" + echo -e "${GREEN}/home /docker의 파일이 복원되었습니다${NC}" else - echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" + echo -e "${YELLOW}/home /docker 아래 파일의 백업이 발견되지 않았습니다.${NC}" fi @@ -7103,66 +7104,66 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 마이그레이션 # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "도커 마이그레이션" install jq - read -p "请输入要迁移的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + read -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } - read -p "目标服务器IP: " TARGET_IP - read -p "目标服务器SSH用户名: " TARGET_USER + read -p "대상 서버 IP :" TARGET_IP + read -p "대상 서버 SSH 사용자 이름 :" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}传输备份中...${NC}" + echo -e "${YELLOW}백업 전송 ...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 使用密钥登录 + # 키로 로그인하십시오 scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 删除备份 + # 백업을 삭제하십시오 # ---------------------------- delete_backup() { - send_stats "Docker备份文件删除" - read -p "请输入要删除的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker 백업 파일 삭제" + read -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}삭제 된 백업 :${BACKUP_DIR}${NC}" } # ---------------------------- - # 主菜单 + # 메인 메뉴 # ---------------------------- main_menu() { - send_stats "Docker备份迁移还原" + send_stats "도커 백업 마이그레이션 및 복원" while true; do clear echo "------------------------" - echo -e "Docker备份/迁移/还原工具" + echo -e "도커 백업/마이그레이션/복원 도구" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. 备份docker项目" - echo -e "2. 迁移docker项目" - echo -e "3. 还原docker项目" - echo -e "4. 删除docker项目的备份文件" + echo -e "1. Docker 프로젝트를 백업하십시오" + echo -e "2. Docker 프로젝트를 마이그레이션합니다" + echo -e "3. Docker 프로젝트를 복원하십시오" + echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" echo "------------------------" - echo -e "0. 返回上一级菜单" + echo -e "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -p "请选择: " choice + read -p "선택하십시오 :" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}잘못된 옵션${NC}" ;; esac break_end done @@ -7179,38 +7180,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # Send_stats "Docker Management" + echo -e "도커 관리" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker 환경을 설치하고 업데이트하십시오${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}Docker Global Status를 봅니다${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + 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}清理无用的docker容器和镜像网络数据卷" + 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}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}11. ${gl_bai}Docker-IPV6 액세스를 활성화하십시오" + echo -e "${gl_kjlan}12. ${gl_bai}Docker-IPV6 액세스를 닫습니다" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" - echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" + echo -e "${gl_kjlan}19. ${gl_bai}백업/마이그레이션/복원 Docker 환경" + echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경을 제거하십시오" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "Docker 환경을 설치하십시오" install_add_docker ;; @@ -7221,22 +7222,22 @@ linux_docker() { 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 "docker全局状态" - echo "Docker版本" + send_stats "도커 글로벌 상태" + echo "도커 버전" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "도커 이미지 :${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "도커 컨테이너 :${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "도커 네트워크 :${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7251,8 +7252,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "도커 네트워크 관리" + echo "도커 네트워크 목록" echo "------------------------------------------------------------" docker network ls echo "" @@ -7276,36 +7277,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "네트워크 작동" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1. 네트워크를 만듭니다" + echo "2. 인터넷에 가입하십시오" + echo "3. 네트워크를 종료하십시오" + echo "4. 네트워크를 삭제합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "네트워크를 만듭니다" + read -e -p "새 네트워크 이름 설정 :" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + 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 + send_stats "인터넷에 가입하십시오" + read -e -p "종료 네트워크 이름 :" dockernetwork + read -e -p "해당 컨테이너는 네트워크를 종료합니다 (여러 컨테이너 이름은 공간별로 분리됩니다)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7314,8 +7315,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "네트워크를 삭제하십시오" + read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork docker network rm $dockernetwork ;; @@ -7329,29 +7330,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" - echo "Docker卷列表" + send_stats "도커 볼륨 관리" + echo "도커 볼륨 목록" docker volume ls echo "" - echo "卷操作" + echo "볼륨 작동" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1. 새 볼륨을 만듭니다" + echo "2. 지정된 볼륨을 삭제합니다" + echo "3. 모든 볼륨을 삭제하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + send_stats "새 볼륨을 만듭니다" + read -e -p "새 볼륨 이름 설정 :" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "볼륨 삭제 이름을 입력하십시오 (공백으로 여러 볼륨 이름을 분리하십시오)." dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7360,7 +7361,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "모든 볼륨을 삭제하십시오" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7369,7 +7370,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -7382,7 +7383,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker清理" + send_stats "도커 청소" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7391,13 +7392,13 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 8) clear - send_stats "Docker源" + send_stats "도커 소스" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7413,13 +7414,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker V6 열기" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker V6 레벨" docker_ipv6_off ;; @@ -7430,7 +7431,7 @@ linux_docker() { 20) clear - send_stats "Docker卸载" + send_stats "Docker는 제거합니다" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7442,7 +7443,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -7451,7 +7452,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -7468,151 +7469,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # 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}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + 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 스트리밍 미디어 잠금 해제 탐지" + echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" + echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" + echo -e "${gl_kjlan}17. ${gl_bai}I-ABC 다기능 속도 테스트 스크립트" + echo -e "${gl_kjlan}18. ${gl_bai}Netquality Network 품질 신체 검사 스크립트${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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}하드웨어 성능 테스트" + echo -e "${gl_kjlan}21. ${gl_bai}YABS 성능 테스트" + echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPU 성능 테스트 스크립트" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "ChatGpt는 상태 감지를 잠금 해제합니다" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "지역 스트리밍 미디어 잠금 해제 테스트" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "YEAHWU 스트리밍 미디어 잠금 해제 탐지" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "xykt_ip 품질 신체 검사 스크립트" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "MTR_TRACE 3 개의 네트워크 리턴 라인 테스트" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "Superspeed 3 Net 속도 측정" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace 빠른 백홀 테스트 스크립트" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" + 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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + 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 "광저우 통신 : 58.60.188.222" + echo "광저우 유니폼 : 210.21.196.6" + echo "광저우 모바일 : 120.196.165.24" + echo "청두 통신 : 61.139.2.69" + echo "청두 유니폼 : 119.6.6.6" + echo "청두 모바일 : 211.137.96.205" + echo "Hunan Telecom : 36.111.200.100" + echo "후난 유니폼 : 42.48.16.100" + echo "후난 모바일 : 39.134.254.6" echo "------------------------" - read -e -p "输入一个指定IP: " testip + read -e -p "지정된 IP를 입력하십시오." testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "Ludashi2020 3 네트워크 라인 테스트" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "I-ABC 다기능 속도 테스트 스크립트" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "네트워크 품질 테스트 스크립트" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "YABS 성능 테스트" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "IICU/GB5 CPU 성능 테스트 스크립트" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "벤치 성능 테스트" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + 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 ;; @@ -7622,7 +7623,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -7638,51 +7639,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + 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}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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + echo "활성 스크립트 : CPU는 10-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 + # 사용자에게 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 + 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 + read -e -p "메모리 사용 백분율을 입력하십시오 [기본값 :$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "스피드 테스트 간격 시간 (초)을 입력하십시오 [기본값 :$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # 도커 컨테이너를 실행하십시오 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7690,14 +7691,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "Oracle Cloud 설치 활성 스크립트" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -7705,20 +7706,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" ;; 3) clear - echo "重装系统" + echo "시스템을 다시 설치하십시오" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + 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 + read -e -p "다시 설치할 시스템을 선택하십시오 : 1. Debian12 | 2. Ubuntu20.04 :" sys_choice case "$sys_choice" in 1) @@ -7730,28 +7731,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "유효하지 않은 선택, 다시 입력하십시오." ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + 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 "甲骨文云重装系统脚本" + send_stats "Oracle Cloud 회복 시스템 스크립트" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "이 기능은 개발 단계에 있으므로 계속 지켜봐 주시기 바랍니다!" ;; 5) clear @@ -7761,15 +7762,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "이 기능은 마스터 JHB가 제공합니다." + send_stats "IPv6 수정" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -7790,7 +7791,7 @@ docker_tato() { 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}" + 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 } @@ -7811,7 +7812,7 @@ 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" + echo -e "${gl_lv}환경이 설치됩니다${gl_bai}대지:$output데이터 베이스:$db_output" fi fi @@ -7839,31 +7840,31 @@ linux_ldnmp() { while true; do clear - # send_stats "LDNMP建站" - echo -e "${gl_huang}LDNMP建站" + # 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}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}LDNMP 환경을 설치하십시오${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPress를 설치하십시오${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Discuz 포럼을 설치하십시오${gl_huang}4. ${gl_bai}Kadao 클라우드 데스크탑을 설치하십시오" + echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" + echo -e "${gl_huang}7. ${gl_bai}Flarum Forum 웹 사이트를 설치하십시오${gl_huang}8. ${gl_bai}Typecho Lightweight 블로그 웹 사이트를 설치하십시오" + 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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}nginx 만 설치하십시오${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}사이트 리디렉션" + echo -e "${gl_huang}23. ${gl_bai}사이트 리버스 프록시 -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}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}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}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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -7877,10 +7878,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # Discuz 포럼 webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7903,21 +7904,21 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "테이블 접두사 : discuz_" ;; 4) clear - # 可道云桌面 + # Kedao 클라우드 데스크탑 webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7939,20 +7940,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "데이터베이스 주소 : MySQL" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "데이터베이스 이름 :$dbname" + echo "Redis 호스트 : Redis" ;; 5) clear - # 苹果CMS + # Apple CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7978,24 +7979,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 포트 : 3306" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "데이터베이스 접두사 : MAC_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "설치가 성공한 후 배경 주소에 로그인하십시오." echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # 한 다리 카운팅 카드 webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8016,34 +8017,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 포트 : 3306" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" echo "" - echo "redis地址: redis" - echo "redis密码: 默认不填写" - echo "redis端口: 6379" + echo "Redis 주소 : Redis" + echo "Redis Password : 기본적으로 채워지지 않습니다" + echo "Redis Port : 6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "웹 사이트 URL : https : //$yuming" + echo "백그라운드 로그인 경로 : /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "사용자 이름 : 관리자" + echo "비밀번호 : 관리자" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "로그인 할 때 오른쪽 상단에 빨간색 Error0이 나타나면 다음 명령을 사용하십시오." + echo "나는 또한 유니콘 번호 카드가 너무 귀찮다는 것에 대해 매우 화가 났으며 그러한 문제가있을 것입니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # Flarum 포럼 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8080,12 +8081,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "테이블 접두사 : flarum_" + echo "관리자 정보는 직접 설정됩니다" ;; @@ -8093,8 +8094,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8118,11 +8119,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "데이터베이스 접두사 : typecho_" + echo "데이터베이스 주소 : MySQL" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "데이터베이스 이름 :$dbname" ;; @@ -8131,8 +8132,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8157,18 +8158,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 포트 : 3306" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8185,10 +8186,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드하십시오" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8198,20 +8199,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + 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 + read -e -p "(/home/web/html/와 유사한 Index.php의 경로를 입력하십시오.$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 -e "[${gl_huang}3/6${gl_bai}] PHP 버전을 선택하십시오" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + 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 @@ -8222,15 +8223,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "유효하지 않은 선택, 다시 입력하십시오." ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}] 지정된 확장자를 설치하십시오" echo "-------------" - echo "已经安装的扩展" + echo "설치된 확장" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8240,25 +8241,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}] 사이트 구성 편집" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 데이터베이스 관리" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 작성하고 데이터베이스 백업이 있습니다." use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." + read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8268,10 +8269,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "데이터베이스 가져 오기 테이블 데이터" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "데이터베이스 가져 오기가 완료되었습니다" ;; *) echo @@ -8283,12 +8284,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 이름 :$dbname" + echo "사용자 이름 :$dbuse" + echo "비밀번호:$dbusepasswd" + echo "테이블 접두사 :$prefix" + echo "관리자 로그인 정보는 직접 설정됩니다" ;; @@ -8301,10 +8302,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "점프 도메인 이름을 입력하십시오 :" reverseproxy nginx_install_status install_ssltls certs_status @@ -8326,7 +8327,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8337,11 +8338,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "도메인 이름 형식 :${gl_huang}google.com${gl_bai}" + read -e -p "반세기 도메인 이름을 입력하십시오 :" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8361,8 +8362,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming nginx_install_status install_ssltls @@ -8384,8 +8385,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming nginx_install_status install_ssltls @@ -8402,8 +8403,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming nginx_install_status install_ssltls @@ -8436,8 +8437,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포를 시작하십시오$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8454,10 +8455,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드를 업로드하십시오" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8467,12 +8468,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + 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 + read -e -p "(/home/web/html/와 유사한 index.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 @@ -8497,21 +8498,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP 환경 백업" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "백업 파일이 작성되었습니다 : /home /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "오류 : 원격 서버 IP를 입력하십시오." continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8519,9 +8520,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일은 찾을 수 없었습니다." fi break ;; @@ -8529,7 +8530,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac done @@ -8537,9 +8538,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + 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 @@ -8549,18 +8550,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1. 주간 백업 2. 매일 백업" + read -e -p "선택을 입력하십시오 :" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + 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 + read -e -p "매일 백업 시간을 선택하십시오 (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8574,19 +8575,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP 환경 복원" + echo "사용 가능한 사이트 백업" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + 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 @@ -8596,7 +8597,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8605,7 +8606,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "압축 패키지가 발견되지 않았습니다." fi ;; @@ -8623,11 +8624,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "LDNMP 환경을 업데이트하십시오" + echo "LDNMP 환경을 업데이트하십시오" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "구성 요소의 새 버전을 발견하십시오" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8647,13 +8648,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" + echo "1. Nginx 업데이트 2. MySQL 업데이트 3. PHP 업데이트 4. Redis 업데이트" echo "------------------------" - echo "5. 更新完整环境" + echo "5. 전체 환경을 업데이트하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8662,7 +8663,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "입력하십시오${ldnmp_pods}버전 번호 (예 : 8.0 8.3 8.4 9.0) (최신 버전을 얻으려면 입력) :" version local version=${version:-latest} cd /home/web/ @@ -8673,13 +8674,13 @@ linux_ldnmp() { 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}完成" + 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 + 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 @@ -8712,8 +8713,8 @@ linux_ldnmp() { 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}完成" + send_stats "고쳐 쓰다$ldnmp_pods" + echo "고쳐 쓰다${ldnmp_pods}마치다" ;; 4) @@ -8724,15 +8725,15 @@ linux_ldnmp() { 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}完成" + 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环境" + send_stats "LDNMP 환경을 완전히 업데이트하십시오" cd /home/web/ docker compose down --rmi all @@ -8758,7 +8759,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "LDNMP 환경을 제거하십시오" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8772,7 +8773,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -8782,7 +8783,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "잘못된 입력!" esac break_end @@ -8802,12 +8803,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "应用市场" + echo -e "응용 프로그램 시장" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # 루프로 색상을 설정하십시오 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8816,70 +8817,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}3. ${color3}1 파넬 신세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" + echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}우분투 원격 데스크탑 웹 에디션" + echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" + echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}Rocketchat 멀티 플레이어 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}Zendao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" + echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" + echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" + echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" + echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" + echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" + echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" + echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}Stirlingpdf 도구 컬렉션${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" + echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" + echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" + echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}Websh 웹 버전 SSH 연결 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" + echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdesk 원격 책상 (릴레이)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" + echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹 사이트 빌딩 관리 패널" + echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}점프 서버 오픈 소스 요새 기계" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" + echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" + echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" + echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" + echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" + echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" + echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" + echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" - echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" + echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" + echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" + echo -e "${gl_kjlan}85. ${color85}Immich 사진 비디오 관리자${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" + echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" + echo -e "${gl_kjlan}89. ${color89}filecodebox 파일 Express${gl_kjlan}90. ${color90}매트릭스 분산 채팅 프로토콜" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" - echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" - echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" - echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자" + echo -e "${gl_kjlan}93. ${color93}DUFS 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" + echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼" + echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" + echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice fi case $sub_choice in @@ -9032,8 +9033,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 비밀번호 설정 :" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9066,7 +9067,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "Nezha를 구축하십시오" local app_id="7" local docker_name="nezha-dashboard" @@ -9075,20 +9076,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒监控 $check_docker $update_status" - echo "开源、轻量、易用的服务器监控与运维工具" - echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + echo -e "Nezha 모니터링$check_docker $update_status" + echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" + echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 使用" + echo "1. 사용" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -9145,7 +9146,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "우체국을 건설하십시오" clear install telnet local app_id="9" @@ -9155,43 +9156,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "우체국 서비스$check_docker $update_status" + echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}포트$port현재 사용 가능합니다${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}포트$port현재 사용할 수 없습니다${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "액세스 주소 :" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "이메일 도메인 이름 (예 : Mail.yuming.com)을 설정하십시오." yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "이 DNS 레코드를 먼저 구문 분석하십시오" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9201,7 +9202,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "계속하려면 키를 누르십시오 ..." read -n 1 -s -r -p "" install jq @@ -9220,9 +9221,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.io가 설치되었습니다" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." echo "https://$yuming" echo "" @@ -9245,9 +9246,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "Poste.io가 설치되었습니다" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." echo "https://$yuming" echo "" ;; @@ -9258,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다" ;; *) @@ -9292,7 +9293,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -9302,7 +9303,7 @@ while true; do 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已经安装完成" + echo "Rocket.chat이 설치되었습니다" check_docker_app_ip } @@ -9312,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -9396,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -9410,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -9555,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "천둥 수영장을 건설하십시오" local app_id="19" local docker_name=safeline-mgt @@ -9563,20 +9564,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "썬더 풀 서비스$check_docker" + echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1. 설치 2. 업데이트 3. 비밀번호 재설정 4. 제거" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) @@ -9586,7 +9587,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经安装完成" + echo "Thunder Pool WAF 패널이 설치되었습니다" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9599,7 +9600,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经更新完成" + echo "Thunder Pool WAF 패널이 업데이트되었습니다" check_docker_app_ip ;; 3) @@ -9610,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9729,8 +9730,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 비밀번호 설정 :" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10018,7 +10019,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10071,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya 가족 버킷" clear install_docker check_disk_space 1 @@ -10275,9 +10276,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "설치" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" } docker_app_update() { @@ -10295,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10382,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVE开小鸡" + send_stats "PVE 치킨" 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 ;; @@ -10502,7 +10503,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10517,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10545,7 +10546,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10560,7 +10561,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10568,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10589,17 +10590,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "설치" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "초기 사용자 이름 : 관리자" + echo "초기 비밀번호 : changeme" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "앱이 업데이트되었습니다" } @@ -10609,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10656,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -10672,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -10934,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd docker run -d \ --name libretv \ @@ -10968,9 +10969,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password - read -e -p "输入授权码: " shouquanma + read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "인증 코드를 입력하십시오." shouquanma mkdir -p /home/docker/moontv @@ -10986,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -11000,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11073,8 +11074,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "로그인 사용자 이름 설정 :" app_use + read -e -p "로그인 비밀번호 설정 :" app_passwd docker run -d \ --name xunlei \ @@ -11171,11 +11172,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # 임의의 키와 암호를 생성합니다 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11184,17 +11185,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 관리자 계정 정보를 추가하십시오 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # 컨테이너를 시작하십시오 docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -11204,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 원래 변수를 유지하십시오 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11221,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11271,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11289,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd + read -e -p "설정${docker_name}SK-159KEJILIONYYDS163 :와 같은 로그인 키 (SK 별 문자 및 숫자 조합) :" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11393,7 +11394,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -11406,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11567,7 +11568,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" + echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11619,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -11633,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11708,8 +11709,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "로그인 사용자 이름 설정 :" app_use + read -e -p "로그인 비밀번호 설정 :" app_passwd docker run -d \ --name ${docker_name} \ @@ -11757,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "설치" check_docker_app_ip } @@ -11771,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "应用已卸载" + echo "앱이 제거되었습니다" } docker_app_plus @@ -11788,12 +11789,12 @@ while true; do docker_rum() { - read -p "请输入组网的客户端数量 (默认 5): " COUNT + read -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT COUNT=${COUNT:-5} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - - stop_containers_or_kill_process 51820 &>/dev/null + + ip link delete wg0 &>/dev/null ip_address docker run -d \ @@ -11833,7 +11834,7 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二维码: $base_name.png" + echo "QR 코드 생성 :$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' @@ -11843,11 +11844,11 @@ while true; do sleep 2 docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" - echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" - echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + echo -e "${gl_lv}${COUNT}모든 출력은 각 클라이언트가 제공합니다. 사용법은 다음과 같습니다.${gl_bai}" + echo -e "${gl_lv}1. 휴대 전화에서 WG의 앱을 다운로드하고 위의 QR 코드를 스캔하여 네트워크에 빠르게 연결하십시오.${gl_bai}" + echo -e "${gl_lv}2. Windows 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결하십시오.${gl_bai}" + echo -e "${gl_lv}3. Linux는 스크립트를 사용하여 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" + echo -e "${gl_lv}공식 클라이언트 다운로드 방법 : https://www.wireguard.com/install/${gl_bai}" break_end } @@ -11875,16 +11876,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 디렉토리 생성 (존재하지 않는 경우) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "클라이언트 구성을 붙여 넣고 다음을 저장하려면 Enter Enter를 두 번 누릅니다." - # 初始化变量 + # 변수 초기화 input="" empty_line_count=0 - # 逐行读取用户输入 + # 사용자 입력 라인별로 읽으십시오 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11897,10 +11898,10 @@ while true; do fi done - # 写入配置文件 + # 구성 파일에 쓰십시오 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE" docker run -d \ --name wireguardc \ @@ -11933,21 +11934,21 @@ while true; do b) clear - send_stats "全部应用备份" + send_stats "모든 응용 프로그램 백업" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "备份文件已创建: /$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "백업 파일이 작성되었습니다 : /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "오류 : 원격 서버 IP를 입력하십시오." continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11955,14 +11956,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "文件已传送至远程服务器/根目录。" + echo "파일은 원격 서버/루트 디렉토리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일은 찾을 수 없었습니다." fi break ;; *) - echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "참고 : 현재 백업에는 Docker 프로젝트 만 포함되어 있으며 Pagoda 및 1Panel과 같은 웹 사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -11972,29 +11973,29 @@ while true; do r) root_use - send_stats "全部应用还原" - echo "可用的应用备份" + send_stats "모든 응용 프로그램이 복원됩니다" + echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # 如果用户没有输入文件名,使用最新的压缩包 + # 사용자가 파일 이름을 입력하지 않으면 최신 압축 패키지를 사용하십시오. if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + echo "응용 프로그램 데이터가 복원되었습니다. 지정된 응용 프로그램 메뉴를 수동으로 입력하고 응용 프로그램을 업데이트하여 응용 프로그램을 복원하십시오." else - echo "没有找到压缩包。" + echo "압축 패키지가 발견되지 않았습니다." fi ;; @@ -12017,35 +12018,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "백엔드 작업 공간" + echo -e "백엔드 작업 공간" + echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." + echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." + echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}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}작업 공간 No. 4" + echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" + echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" + echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" + echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" + echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 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}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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -12053,7 +12054,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -12061,63 +12062,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -12129,21 +12130,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH 거주 모드" + echo -e "SSH 거주 모드${tmux_sshd_status}" + echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1. 2를 켜십시오. 2를 끕니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -12159,29 +12160,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "사용자 정의 작업 공간" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "배경 작업 공간에 명령을 주입합니다" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "작업 공간을 삭제합니다" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -12206,54 +12207,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}스크립트 스타트 업 단축키 키를 설정하십시오${gl_kjlan}2. ${gl_bai}로그인 암호를 수정하십시오" + echo -e "${gl_kjlan}3. ${gl_bai}루트 암호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python을 설치하십시오" + 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + 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 고위험 취약점을 수정하십시오" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "바로 가기 키가 설정되어 있습니다" + send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings done @@ -12261,34 +12262,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "로그인 비밀번호를 설정하십시오" + echo "로그인 비밀번호를 설정하십시오" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "루트 비밀번호 모드" add_sshpasswd ;; 4) root_use - send_stats "py版本管理" - echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + send_stats "PY 버전 관리" + echo "파이썬 버전 관리" + echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + 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 "권장 버전 : 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 + read -e -p "설치하려는 Python 버전 번호를 입력하십시오 (종료하려면 0을 입력하십시오) :" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "스크립트 PY 관리" break_end linux_Settings fi @@ -12321,7 +12322,7 @@ linux_Settings() { 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 "未知的包管理器!" + echo "알 수없는 패키지 관리자!" return fi @@ -12350,55 +12351,55 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + send_stats "스크립트 Py 버전을 스위치하십시오" ;; 5) root_use - send_stats "开放端口" + send_stats "포트 열기" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "모든 포트가 열려 있습니다" ;; 6) root_use - send_stats "修改SSH端口" + send_stats "SSH 포트를 수정하십시오" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 현재 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}" + # 현재 SSH 포트 번호를 인쇄하십시오 + echo -e "현재 SSH 포트 번호는 다음과 같습니다.${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # 사용자에게 새 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端口已修改" + send_stats "SSH 포트가 수정되었습니다" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "SSH 포트 수정을 종료하십시오" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." + send_stats "잘못된 SSH 포트 입력" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "입력이 유효하지 않으므로 번호를 입력하십시오." + send_stats "잘못된 SSH 포트 입력" break_end fi done @@ -12417,8 +12418,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "신규 사용자는 루트를 비활성화합니다" + read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12433,49 +12434,49 @@ EOF passwd -l root - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 10) root_use - send_stats "设置v4/v6优先级" + send_stats "V4/V6 우선 순위를 설정하십시오" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv4${gl_bai}우선 사항" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1. IPv4 우선 순위 2. IPv6 우선 순위 3. IPv6 수리 도구" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "IPv4 우선 순위로 전환되었습니다" + send_stats "IPv4 우선 순위로 전환되었습니다" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "IPv6 우선 순위로 전환되었습니다" + send_stats "IPv6 우선 순위로 전환되었습니다" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "이 기능은 마스터 JHB가 제공합니다." + send_stats "IPv6 수정" ;; *) @@ -12493,43 +12494,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "가상 메모리를 설정합니다" while true; do clear - echo "设置虚拟内存" + 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 -e "현재 가상 메모리 :${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "2G 가상 메모리가 설정되었습니다" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "4G 가상 메모리가 설정되었습니다" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "사용자 정의 가상 메모리가 설정되었습니다" ;; *) @@ -12542,8 +12543,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "사용자 관리" + echo "사용자 목록" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12554,62 +12555,62 @@ EOF echo "" - echo "账户操作" + echo "계정 운영" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." echo "------------------------" - echo "5. 删除账号" + echo "5. 계정을 삭제하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + read -e -p "새 사용자 이름을 입력하십시오 :" new_username - # 创建新用户并设置密码 + # 새 사용자를 생성하고 비밀번호를 설정하십시오 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + read -e -p "새 사용자 이름을 입력하십시오 :" new_username - # 创建新用户并设置密码 + # 새 사용자를 생성하고 비밀번호를 설정하십시오 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 새로운 사용자에게 허가를 부여하십시오 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作已完成。" + echo "작업이 완료되었습니다." ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "사용자 이름을 입력하십시오 :" username + # 새로운 사용자에게 허가를 부여하십시오 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "사용자 이름을 입력하십시오 :" username + # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "삭제하려면 사용자 이름을 입력하십시오." username + # 사용자와 홈 디렉토리를 삭제하십시오 userdel -r "$username" ;; @@ -12622,50 +12623,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "사용자 정보 생성기" + echo "임의의 사용자 이름" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "임의의 사용자 이름$i: $username" done echo "" - 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个随机用户姓名 + # 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" + echo "임의의 사용자 이름$i: $user_name" done echo "" - echo "随机UUID" + echo "무작위 uuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "무작위 uuid$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "랜덤 비밀번호$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "랜덤 비밀번호$i: $password" done echo "" @@ -12673,46 +12674,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "시간대를 변경하십시오" while true; do clear - echo "系统时间信息" + echo "시스템 시간 정보" - # 获取当前系统时区 + # 현재 시스템 시간대를 얻으십시오 local timezone=$(current_timezone) - # 获取当前系统时间 + # 현재 시스템 시간을 얻으십시오 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # 시간대와 시간을 보여줍니다 + echo "현재 시스템 시간대 :$timezone" + echo "현재 시스템 시간 :$current_time" echo "" - echo "时区切换" + echo "시간대 스위칭" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + echo "아시아" + echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" + echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" + echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" + echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" + echo "9. 태국 방콕에서의 시간" echo "------------------------" - echo "欧洲" - echo "11. 英国伦敦时间 12. 法国巴黎时间" - echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间" - echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间" + echo "유럽" + echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" + echo "13. 베를린 시간, 독일 14. 모스크바 시간, 러시아" + echo "15. 네덜란드에서 우트레흐트 시간 16. 스페인의 마드리드 시간" echo "------------------------" - echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "미국" + echo "21. 서양 시간 22. 동부 시간" + echo "23. 캐나다 시간 24. 멕시코 시간" + echo "25. 브라질 시간 26. 아르헨티나 시간" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31. UTC 글로벌 표준 시간" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -12755,21 +12756,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "호스트 이름을 수정하십시오" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # Debian, Ubuntu, Centos 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12787,11 +12788,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" + send_stats "호스트 이름이 변경되었습니다" sleep 1 else - echo "已退出,未更改主机名。" + echo "종료, 호스트 이름이 변경되지 않았습니다." break fi done @@ -12799,32 +12800,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "시스템 업데이트 소스를 변경하십시오" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "업데이트 소스 영역을 선택하십시오" + echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "선택을 입력하십시오 :" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "중국 본토의 기본 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "중국 본토의 교육 원" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外源" + send_stats "해외 출신" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) - echo "已取消" + echo "취소" ;; esac @@ -12832,62 +12833,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "타이밍 작업 관리" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "시간이 정한 작업 목록" crontab -l echo "" - echo "操作" + echo "작동하다" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1. 월간 작업 2. 주간 작업" + echo "3. 일일 작업 4. 시간당 작업" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "선택을 입력하십시오 :" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "매일 작업을 수행 할 시간을 선택하십시오. (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "시간이 정한 작업을 추가하십시오" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "타이밍 작업을 삭제하십시오" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "타이밍 작업 편집" ;; *) break # 跳出循环,退出菜单 @@ -12899,32 +12900,32 @@ EOF 21) root_use - send_stats "本地host解析" + send_stats "지역 호스트 구문 분석" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "기본 호스트 구문 분석 목록" + echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." cat /etc/hosts echo "" - echo "操作" + echo "작동하다" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "선택을 입력하십시오 :" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "로컬 호스트 구문 분석이 추가되었습니다" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "로컬 호스트 구문 분석 및 삭제" ;; *) break # 跳出循环,退出菜单 @@ -12935,7 +12936,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "SSH 방어" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12947,20 +12948,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH 방어 프로그램$check_docker" + echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" + echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2. SSH 차단 레코드보기" + echo "3. 실시간 로그 모니터링" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 방어 프로그램을 제거하십시오" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) install_docker @@ -12983,7 +12984,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2ban 방어 프로그램은 제거되었습니다" ;; *) break @@ -12996,47 +12997,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "현재 제한 종료 기능" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "현재 제한 종료 기능" + echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" + echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # limiting_shut_down.sh 파일이 있는지 확인하십시오 if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # threshold_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}" + 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}" + echo -e "${gl_hui}전류 제한 종료 기능이 활성화되지 않았습니다${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 새 가상 메모리 크기를 입력하십시오 + echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." + read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day cz_day=${cz_day:-1} cd ~ @@ -13049,15 +13050,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "전류 제한 종료 기능이 꺼졌습니다" ;; *) break @@ -13070,40 +13071,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "개인 키 로그인" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "루트 비공개 키 로그인 모드" + echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "선택을 입력하십시오 :" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "새로운 키를 생성하십시오" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "기존 공개 키를 가져옵니다" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "로컬 비밀 키를보십시오" echo "------------------------" - echo "公钥信息" + echo "공개 키 정보" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "개인 키 정보" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13119,18 +13120,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "전보 경고" + echo "TG-BOT 모니터링 및 조기 경고 기능" + echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." + echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." + echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "전보 경고가 활성화되었습니다" cd ~ install nano tmux bc jq check_crontab_installed @@ -13152,7 +13153,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 添加到 ~/.profile 文件中 + # ~/.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 @@ -13163,21 +13164,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-BOT 조기 경고 시스템이 시작되었습니다" + echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -13221,7 +13222,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -13244,61 +13245,61 @@ EOF 41) clear - send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + send_stats "게시판" + echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "원 스톱 튜닝 시작" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 시간대를 설정하십시오${gl_huang}상하이${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13315,25 +13316,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux 시스템의 커널 매개 변수 최적화" + echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac @@ -13341,7 +13342,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하십시오" server_reboot ;; 100) @@ -13357,32 +13358,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "개인 정보 및 보안" + echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." + echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "현재 상태 :$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1. 수집을 켭니다" + echo "2. 컬렉션을 닫습니다" echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "컬렉션이 닫혔습니다" + send_stats "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" ;; *) break @@ -13398,11 +13399,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "기술 라이온 스크립트를 제거하십시오" + echo "기술 라이온 스크립트를 제거하십시오" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) @@ -13410,16 +13411,16 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "대본은 제거되었습니다." break_end clear exit ;; [Nn]) - echo "已取消" + echo "취소" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac ;; @@ -13429,7 +13430,7 @@ EOF ;; *) - echo "无效的输入!" + echo "잘못된 입력!" ;; esac break_end @@ -13447,187 +13448,187 @@ EOF linux_file() { root_use - send_stats "文件管理器" + send_stats "파일 관리자" while true; do clear - echo "文件管理器" + echo "파일 관리자" echo "------------------------" - echo "当前路径" + echo "현재 경로" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" + echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" + echo "15. 파일을 삭제하십시오" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" + echo "25. 파일을 다른 서버로 전달합니다" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "디렉토리 이름을 입력하십시오 :" dirname + cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" + send_stats "디렉토리로 이동하십시오" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "삭제하려면 디렉토리 이름을 입력하십시오." dirname + rm -rf "$dirname" && echo "디렉토리가 삭제되었습니다" || echo "삭제가 실패했습니다" + send_stats "디렉토리 삭제" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "이전 메뉴 디렉토리로 돌아갑니다" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "작성하려면 파일 이름을 입력하십시오." filename + touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" + send_stats "파일을 만듭니다" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "편집 할 파일 이름을 입력하십시오." filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "파일 편집" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名文件" + 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 "删除文件" + read -e -p "삭제하려면 파일 이름을 입력하십시오." filename + rm -f "$filename" && echo "파일이 삭제되었습니다" || echo "삭제가 실패했습니다" + send_stats "파일 삭제" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" + send_stats "압축 파일/디렉토리" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" + send_stats "압축 파일/디렉토리 해제" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "오류 : 대상 경로를 입력하십시오." + send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" + send_stats "파일 또는 디렉토리를 이동하십시오" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "오류 : 대상 경로를 입력하십시오." + send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 + cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" + send_stats "파일 또는 디렉토리를 복사합니다" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "오류 : 파일이 존재하지 않습니다." + send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "오류 : 원격 서버 IP를 입력하십시오." + send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "오류 : 원격 서버 비밀번호를 입력하십시오." + send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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를 사용하여 파일을 전송합니다 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "스크립트는 최신입니다$sh_v_new" break_end ~/kejilion.sh exit @@ -13925,15 +13926,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}자동 업데이트가 닫힙니다${gl_bai}" + send_stats "스크립트 자동 업데이트를 닫습니다" break_end ;; *) @@ -13955,41 +13956,41 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "기술 라이온 스크립트 도구 상자 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}Docker管理" -echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" -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}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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu 서버 오프닝 스크립트" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}종료 스크립트" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "선택을 입력하십시오 :" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 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 "warp管理" ; install wget + 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 ;; @@ -14000,13 +14001,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; 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 "无效的输入!" ;; + *) echo "잘못된 입력!" ;; esac break_end done @@ -14014,68 +14015,68 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "K 명령 참조 사용 사례" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" -echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" -echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav | k 命令收藏夹" -echo "应用市场管理 k app" -echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "다음은 K 명령 참조 유스 케이스입니다." +echo "스크립트 시작 k" +echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" +echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" +echo "업데이트 시스템 K 업데이트 | K 업데이트" +echo "깨끗한 시스템 쓰레기 K Clean | K 청소" +echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" +echo "BBR3 제어판 K BBR3 | K bbrv3" +echo "커널 튜닝 패널 K nhyh | K 커널 최적화" +echo "가상 메모리 K 스왑 2048을 설정하십시오" +echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" +echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" +echo "시스템 백업 기능 K 백업 | K bf | K 백업" +echo "SSH 원격 연결 도구 K SSH | K 원격 연결" +echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" +echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" +echo "인트라넷 침투 (서버 측) K frps" +echo "인트라넷 침투 (클라이언트) K frpc" +echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" +echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" +echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" +echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" +echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" +echo "도메인 이름 인증서 응용 프로그램 K SSL" +echo "도메인 이름 인증서 만료 쿼리 K SSL PS" +echo "도커 환경 설치 K 도커 설치 | K 도커 설치" +echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" +echo "Docker Image Management K Docker img | K Docker Image" +echo "LDNMP 사이트 관리 K 웹" +echo "LDNMP 캐시 정리 K 웹 캐시" +echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" +echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." +echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" +echo "방화벽 패널 K FHQ | K 방화벽" +echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" +echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" +echo "앱 시장 관리 K 앱" +echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" } if [ "$#" -eq 0 ]; then - # 如果没有参数,运行交互式逻辑 + # 매개 변수가없는 경우 대화식 로직을 실행하십시오 kejilion_sh else - # 如果有参数,执行相应函数 + # 매개 변수가있는 경우 해당 함수를 실행하십시오 case $1 in install|add|安装) shift - send_stats "安装软件" + send_stats "소프트웨어를 설치하십시오" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "소프트웨어를 제거하십시오" remove "$@" ;; update|更新) @@ -14109,7 +14110,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "시간이 정한 RSYNC 동기화" run_task "$@" ;; @@ -14128,7 +14129,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14141,13 +14142,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 신속하게 설정했습니다" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정하십시오" set_timedate "$@" ;; @@ -14195,42 +14196,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "소프트웨어 상태보기" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "소프트웨어 시작" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "소프트웨어 일시 정지" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "소프트웨어 재시작" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "소프트웨어 부츠" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "인증서 상태를 확인하십시오" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "인증서를 신속하게 신청하십시오" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "인증서를 신속하게 신청하십시오" else k_info fi @@ -14240,15 +14241,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "Docker를 신속하게 설치하십시오" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 미러 관리" docker_image ;; *) @@ -14275,7 +14276,7 @@ else app) shift - send_stats "应用$@" + send_stats "$@ 적용" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index cab3eb64a..960b74c13 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 定义一个函数来执行命令 +# 定義一個函數來執行命令 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!请相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 -# 全文可搜搜 send_stats 函数调用位置,透明开源,如有顾虑可拒绝使用。 +# 收集功能埋點信息的函數,記錄當前腳本版本號,使用時間,系統版本,CPU架構,機器所在國家和用戶使用的功能名稱,絕對不涉及任何敏感信息,請放心!請相信我! +# 為什麼要設計這個功能,目的更好的了解用戶喜歡使用的功能,進一步優化功能推出更多符合用戶需求的功能。 +# 全文可搜搜 send_stats 函數調用位置,透明開源,如有顧慮可拒絕使用。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 提示用户同意条款 +# 提示用戶同意條款 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}欢迎使用科技lion脚本工具箱${gl_bai}" - echo "首次使用脚本,请先阅读并同意用户许可协议。" - echo "用户许可协议: https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}歡迎使用科技lion腳本工具箱${gl_bai}" + echo "首次使用腳本,請先閱讀並同意用戶許可協議。" + echo "用戶許可協議: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "是否同意以上条款?(y/n): " user_input + read -r -p "是否同意以上條款? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "许可同意" + 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 "许可拒绝" + send_stats "許可拒絕" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "未提供軟件包參數!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}正在安装 $package...${gl_bai}" + echo -e "${gl_huang}正在安裝$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -219,11 +219,11 @@ check_disk_space() { 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 "当前可用空间: $((available_space_mb/1024))G" - echo "最小需求空间: ${required_gb}G" - echo "无法继续安装,请清理磁盘空间后重试。" - send_stats "磁盘空间不足" + echo -e "${gl_huang}提示:${gl_bai}磁盤空間不足!" + echo "當前可用空間: $((available_space_mb/1024))G" + echo "最小需求空間:${required_gb}G" + echo "無法繼續安裝,請清理磁盤空間後重試。" + send_stats "磁盤空間不足" break_end kejilion fi @@ -236,12 +236,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "未提供软件包参数!" + echo "未提供軟件包參數!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}正在卸载 $package...${gl_bai}" + 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 @@ -266,7 +266,7 @@ remove() { } -# 通用 systemctl 函数,适用于各种发行版 +# 通用 systemctl 函數,適用於各種發行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -279,43 +279,43 @@ systemctl() { } -# 重启服务 +# 重啟服務 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1 服务已重启。" + echo "$1服務已重啟。" else - echo "错误:重启 $1 服务失败。" + echo "錯誤:重啟$1服務失敗。" fi } -# 启动服务 +# 啟動服務 start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1 服务已启动。" + echo "$1服務已啟動。" else - echo "错误:启动 $1 服务失败。" + echo "錯誤:啟動$1服務失敗。" fi } -# 停止服务 +# 停止服務 stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1 服务已停止。" + echo "$1服務已停止。" else - echo "错误:停止 $1 服务失败。" + echo "錯誤:停止$1服務失敗。" fi } -# 查看服务状态 +# 查看服務狀態 status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1 服务状态已显示。" + echo "$1服務狀態已顯示。" else - echo "错误:无法显示 $1 服务状态。" + echo "錯誤:無法顯示$1服務狀態。" fi } @@ -328,14 +328,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME 已设置为开机自启。" + echo "$SERVICE_NAME已設置為開機自啟。" } break_end() { echo -e "${gl_lv}操作完成${gl_bai}" - echo "按任意键继续..." + echo "按任意鍵繼續..." read -n 1 -s -r -p "" echo "" clear @@ -352,10 +352,11 @@ kejilion() { stop_containers_or_kill_process() { local port=$1 local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null) - install lsof + if [ -n "$containers" ]; then docker stop $containers else + install lsof for pid in $(lsof -t -i:$port); do kill -9 $pid done @@ -424,7 +425,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}正在安装docker环境...${gl_bai}" + echo -e "${gl_huang}正在安裝docker環境...${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 @@ -505,49 +506,49 @@ while true; do echo "" echo "容器操作" echo "------------------------" - echo "1. 创建新的容器" + echo "1. 創建新的容器" echo "------------------------" - echo "2. 启动指定容器 6. 启动所有容器" + echo "2. 啟動指定容器 6. 啟動所有容器" echo "3. 停止指定容器 7. 停止所有容器" - echo "4. 删除指定容器 8. 删除所有容器" - echo "5. 重启指定容器 9. 重启所有容器" + echo "4. 刪除指定容器 8. 刪除所有容器" + echo "5. 重啟指定容器 9. 重啟所有容器" echo "------------------------" - echo "11. 进入指定容器 12. 查看容器日志" - echo "13. 查看容器网络 14. 查看容器占用" + echo "11. 進入指定容器 12. 查看容器日誌" + echo "13. 查看容器網絡 14. 查看容器佔用" echo "------------------------" - echo "15. 开启容器端口访问 16. 关闭容器端口访问" + echo "15. 開啟容器端口訪問 16. 關閉容器端口訪問" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) send_stats "新建容器" - read -e -p "请输入创建命令: " dockername + read -e -p "請輸入創建命令:" dockername $dockername ;; 2) - send_stats "启动指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "啟動指定容器" + read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername docker start $dockername ;; 3) send_stats "停止指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername docker stop $dockername ;; 4) - send_stats "删除指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "刪除指定容器" + read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername docker rm -f $dockername ;; 5) - send_stats "重启指定容器" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + send_stats "重啟指定容器" + read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "啟動所有容器" docker start $(docker ps -a -q) ;; 7) @@ -555,7 +556,7 @@ while true; do docker stop $(docker ps -q) ;; 8) - send_stats "删除所有容器" + send_stats "刪除所有容器" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -564,28 +565,28 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; 9) - send_stats "重启所有容器" + send_stats "重啟所有容器" docker restart $(docker ps -q) ;; 11) - send_stats "进入容器" - read -e -p "请输入容器名: " dockername + send_stats "進入容器" + read -e -p "請輸入容器名:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "查看容器日志" - read -e -p "请输入容器名: " dockername + send_stats "查看容器日誌" + read -e -p "請輸入容器名:" dockername docker logs $dockername break_end ;; 13) - send_stats "查看容器网络" + send_stats "查看容器網絡" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -603,14 +604,14 @@ while true; do break_end ;; 14) - send_stats "查看容器占用" + send_stats "查看容器佔用" docker stats --no-stream break_end ;; 15) - send_stats "允许容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "允許容器端口訪問" + read -e -p "請輸入容器名:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -619,8 +620,8 @@ while true; do ;; 16) - send_stats "阻止容器端口访问" - read -e -p "请输入容器名: " docker_name + send_stats "阻止容器端口訪問" + read -e -p "請輸入容器名:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -639,44 +640,44 @@ done docker_image() { while true; do clear - send_stats "Docker镜像管理" - echo "Docker镜像列表" + send_stats "Docker鏡像管理" + echo "Docker鏡像列表" docker image ls echo "" - echo "镜像操作" + echo "鏡像操作" echo "------------------------" - echo "1. 获取指定镜像 3. 删除指定镜像" - echo "2. 更新指定镜像 4. 删除所有镜像" + echo "1. 獲取指定鏡像 3. 刪除指定鏡像" + echo "2. 更新指定鏡像 4. 刪除所有鏡像" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - send_stats "拉取镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "拉取鏡像" + read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在获取镜像: $name${gl_bai}" + echo -e "${gl_huang}正在獲取鏡像:$name${gl_bai}" docker pull $name done ;; 2) - send_stats "更新镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "更新鏡像" + read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames for name in $imagenames; do - echo -e "${gl_huang}正在更新镜像: $name${gl_bai}" + echo -e "${gl_huang}正在更新鏡像:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "删除镜像" - read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames + send_stats "刪除鏡像" + read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "删除所有镜像" + send_stats "刪除所有鏡像" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -685,7 +686,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -753,16 +754,16 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "不支持的發行版:$ID" return ;; esac else - echo "无法确定操作系统。" + echo "無法確定操作系統。" return fi - echo -e "${gl_lv}crontab 已安装且 cron 服务正在运行。${gl_bai}" + echo -e "${gl_lv}crontab 已安裝且 cron 服務正在運行。${gl_bai}" } @@ -774,27 +775,27 @@ docker_ipv6_on() { 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处理配置文件的更新 + # 使用jq處理配置文件的更新 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 检查当前配置是否已经有 ipv6 设置 + # 檢查當前配置是否已經有 ipv6 設置 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 更新配置,开启 IPv6 + # 更新配置,開啟 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}" + echo -e "${gl_huang}當前已開啟ipv6訪問${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -809,28 +810,28 @@ docker_ipv6_off() { 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处理配置文件的更新 + # 使用jq處理配置文件的更新 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 检查当前的 ipv6 状态 + # 檢查當前的 ipv6 狀態 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 对比原始配置与新配置 + # 對比原始配置與新配置 if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}當前已關閉ipv6訪問${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}" + echo -e "${gl_huang}已成功關閉ipv6訪問${gl_bai}" fi } @@ -869,88 +870,88 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + 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" + echo "已打開端口$port" fi done save_iptables_rules - send_stats "已打开端口" + send_stats "已打開端口" } close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "请提供至少一个端口号" + 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" + echo "已關閉端口$port" fi done - # 删除已存在的规则(如果有) + # 刪除已存在的規則(如果有) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 插入新规则到第一条 + # 插入新規則到第一條 iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "已关闭端口" + send_stats "已關閉端口" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + 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" + echo "已放行IP$ip" fi done @@ -961,20 +962,20 @@ allow_ip() { block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "请提供至少一个IP地址或IP段" + 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" + echo "已阻止IP$ip" fi done @@ -989,7 +990,7 @@ block_ip() { enable_ddos_defense() { - # 开启防御 DDoS + # 開啟防禦 DDoS 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 @@ -999,12 +1000,12 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "开启DDoS防御" + send_stats "開啟DDoS防禦" } -# 关闭DDoS防御 +# 關閉DDoS防禦 disable_ddos_defense() { - # 关闭防御 DDoS + # 關閉防禦 DDoS 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 @@ -1014,14 +1015,14 @@ disable_ddos_defense() { 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防御" + send_stats "關閉DDoS防禦" } -# 管理国家IP规则的函数 +# 管理國家IP規則的函數 manage_country_rules() { local action="$1" local country_code="$2" @@ -1032,18 +1033,18 @@ manage_country_rules() { case "$action" in block) - # 如果 ipset 不存在则创建 + # 如果 ipset 不存在則創建 if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # 下載 IP 區域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + echo "錯誤:下載$country_code的 IP 區域文件失敗" exit 1 fi - # 将 IP 添加到 ipset + # 將 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" @@ -1052,53 +1053,53 @@ manage_country_rules() { 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 地址" + echo "已成功阻止$country_code的 IP 地址" rm "${country_code,,}.zone" ;; allow) - # 为允许的国家创建 ipset(如果不存在) + # 為允許的國家創建 ipset(如果不存在) if ! ipset list "$ipset_name" &> /dev/null; then ipset create "$ipset_name" hash:net fi - # 下载 IP 区域文件 + # 下載 IP 區域文件 if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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 + # 將 IP 添加到 ipset while IFS= read -r ip; do ipset add "$ipset_name" "$ip" done < "${country_code,,}.zone" - # 仅允许指定国家的 IP + # 僅允許指定國家的 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 地址" + echo "已成功僅允許$country_code的 IP 地址" rm "${country_code,,}.zone" ;; unblock) - # 删除国家的 iptables 规则 + # 刪除國家的 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 + # 銷毀 ipset if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "已成功解除$country_code的 IP 地址限制" ;; *) @@ -1115,42 +1116,42 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高级防火墙管理" - send_stats "高级防火墙管理" + echo "高級防火牆管理" + send_stats "高級防火牆管理" echo "------------------------" iptables -L INPUT echo "" - echo "防火墙管理" + echo "防火牆管理" echo "------------------------" - echo "1. 开放指定端口 2. 关闭指定端口" - echo "3. 开放所有端口 4. 关闭所有端口" + echo "1. 開放指定端口 2. 關閉指定端口" + echo "3. 開放所有端口 4. 關閉所有端口" echo "------------------------" - echo "5. IP白名单 6. IP黑名单" + echo "5. IP白名單 6. IP黑名單" echo "7. 清除指定IP" echo "------------------------" - echo "11. 允许PING 12. 禁止PING" + echo "11. 允許PING 12. 禁止PING" echo "------------------------" - echo "13. 启动DDOS防御 14. 关闭DDOS防御" + echo "13. 啟動DDOS防禦 14. 關閉DDOS防禦" echo "------------------------" - echo "15. 阻止指定国家IP 16. 仅允许指定国家IP" - echo "17. 解除指定国家IP限制" + echo "15. 阻止指定國家IP 16. 僅允許指定國家IP" + echo "17. 解除指定國家IP限制" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - read -e -p "请输入开放的端口号: " o_port + read -e -p "請輸入開放的端口號:" o_port open_port $o_port - send_stats "开放指定端口" + send_stats "開放指定端口" ;; 2) - read -e -p "请输入关闭的端口号: " c_port + read -e -p "請輸入關閉的端口號:" c_port close_port $c_port - send_stats "关闭指定端口" + send_stats "關閉指定端口" ;; 3) - # 开放所有端口 + # 開放所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1163,10 +1164,10 @@ iptables_panel() { 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 "开放所有端口" + send_stats "開放所有端口" ;; 4) - # 关闭所有端口 + # 關閉所有端口 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1179,33 +1180,33 @@ iptables_panel() { 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 "关闭所有端口" + send_stats "關閉所有端口" ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IP 白名單 + read -e -p "請輸入放行的IP或IP段:" o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 - read -e -p "请输入封锁的IP或IP段: " c_ip + # IP 黑名單 + read -e -p "請輸入封鎖的IP或IP段:" c_ip block_ip $c_ip ;; 7) # 清除指定 IP - read -e -p "请输入清除的IP: " d_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) - # 允许 PING + # 允許 PING 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 "允许PING" + send_stats "允許PING" ;; 12) # 禁用 PING @@ -1222,20 +1223,20 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "請輸入阻止的國家代碼(如 CN, US, JP):" country_code manage_country_rules block $country_code - send_stats "允许国家 $country_code 的IP" + send_stats "允許國家$country_code的IP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "請輸入允許的國家代碼(如 CN, US, JP):" country_code manage_country_rules allow $country_code - send_stats "阻止国家 $country_code 的IP" + send_stats "阻止國家$country_code的IP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "請輸入清除的國家代碼(如 CN, US, JP):" country_code manage_country_rules unblock $country_code - send_stats "清除国家 $country_code 的IP" + send_stats "清除國家$country_code的IP" ;; *) @@ -1256,23 +1257,23 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 獲取當前系統中所有的 swap 分區 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # 遍历并删除所有的 swap 分区 + # 遍歷並刪除所有的 swap 分區 for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # 確保 /swapfile 不再被使用 swapoff /swapfile - # 删除旧的 /swapfile + # 刪除舊的 /swapfile rm -f /swapfile - # 创建新的 swap 分区 + # 創建新的 swap 分區 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1287,7 +1288,7 @@ add_swap() { rc-update add local fi - echo -e "虚拟内存大小已调整为${gl_huang}${new_swap}${gl_bai}M" + echo -e "虛擬內存大小已調整為${gl_huang}${new_swap}${gl_bai}M" } @@ -1297,7 +1298,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 判断是否需要创建虚拟内存 +# 判斷是否需要創建虛擬內存 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1313,21 +1314,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # 获取nginx版本 + # 獲取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版本 + # 獲取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版本 + # 獲取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版本 + # 獲取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}" @@ -1340,7 +1341,7 @@ ldnmp_v() { 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 @@ -1349,11 +1350,11 @@ install_ldnmp_conf() { default_server_ssl - # 下载 docker-compose.yml 文件并进行替换 + # 下載 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 文件中进行替换 + # 在 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 @@ -1398,7 +1399,7 @@ install_ldnmp() { clear - echo "LDNMP环境安装完毕" + echo "LDNMP環境安裝完畢" echo "------------------------" ldnmp_v @@ -1415,7 +1416,7 @@ install_certbot() { 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 "续签任务已更新" + echo "續簽任務已更新" } @@ -1452,15 +1453,15 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming 公钥信息${gl_bai}" + echo -e "${gl_huang}$yuming公鑰信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/fullchain.pem echo "" - echo -e "${gl_huang}$yuming 私钥信息${gl_bai}" + echo -e "${gl_huang}$yuming私鑰信息${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}证书存放路径${gl_bai}" - echo "公钥: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "私钥: /etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}證書存放路徑${gl_bai}" + echo "公鑰: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "私鑰: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1469,7 +1470,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}快速申请SSL证书,过期前自动续签${gl_bai}" +echo -e "${gl_huang}快速申請SSL證書,過期前自動續簽${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1485,8 +1486,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}已申请的证书到期情况${gl_bai}" - echo "站点信息 证书到期时间" + echo -e "${gl_huang}已申請的證書到期情況${gl_bai}" + echo "站點信息 證書到期時間" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1525,19 +1526,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "域名证书申请成功" + 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. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" - echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" + 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. 申請次數超限 ➠ Let's Encrypt有每週限額(5次/域名/週)" + echo -e "6. 國內備案限制 ➠ 中國大陸環境請確認域名是否備案" break_end clear - echo "请再次尝试部署 $webname" + echo "請再次嘗試部署$webname" add_yuming install_ssltls certs_status @@ -1548,7 +1549,7 @@ certs_status() { repeat_add_yuming() { if [ -e /home/web/conf.d/$yuming.conf ]; then - send_stats "域名重复使用" + send_stats "域名重複使用" web_del "${yuming}" > /dev/null 2>&1 fi @@ -1557,8 +1558,8 @@ fi add_yuming() { ip_address - echo -e "先将域名解析到本机IP: ${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "请输入你的IP或者解析过的域名: " yuming + echo -e "先將域名解析到本機IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "請輸入你的IP或者解析過的域名:" yuming } @@ -1642,11 +1643,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登录信息: " - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "登錄信息:" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" echo - send_stats "启动$ldnmp_pods" + send_stats "啟動$ldnmp_pods" } @@ -1656,29 +1657,29 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 检查配置文件是否存在 + # 檢查配置文件是否存在 if [ -f "$CONFIG_FILE" ]; then - # 从配置文件读取 API_TOKEN 和 zone_id + # 從配置文件讀取 API_TOKEN 和 zone_id read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # 将 ZONE_IDS 转换为数组 + # 將 ZONE_IDS 轉換為數組 ZONE_IDS=($ZONE_IDS) else - # 提示用户是否清理缓存 - read -e -p "需要清理 Cloudflare 的缓存吗?(y/n): " answer + # 提示用戶是否清理緩存 + 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 + 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 并执行清除缓存命令 + # 循環遍歷每個 zone_id 並執行清除緩存命令 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "正在清除缓存 for zone_id: $ZONE_ID" + echo "正在清除緩存 for 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" \ @@ -1686,13 +1687,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "缓存清除请求已发送完毕。" + echo "緩存清除請求已發送完畢。" } web_cache() { - send_stats "清理站点缓存" + send_stats "清理站點緩存" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1702,28 +1703,28 @@ web_cache() { web_del() { - send_stats "删除站点数据" + send_stats "刪除站點數據" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "删除站点数据,请输入你的域名(多个域名用空格隔开): " yuming_list + read -e -p "刪除站點數據,請輸入你的域名(多個域名用空格隔開):" yuming_list if [[ -z "$yuming_list" ]]; then return fi fi for yuming in $yuming_list; do - echo "正在删除域名: $yuming" + 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" + # 刪除數據庫前檢查是否存在,避免報錯 + echo "正在刪除數據庫:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1739,23 +1740,23 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 根据 mode 参数来决定开启或关闭 WAF + # 根據 mode 參數來決定開啟或關閉 WAF if [ "$mode" == "on" ]; then - # 开启 WAF:去掉注释 + # 開啟 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:加上注释 + # 關閉 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' 或 'off'" + echo "無效的參數:使用 'on' 或 'off'" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # 檢查 nginx 鏡像並根據情況處理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1802,11 +1803,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 刪除舊定義 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 插入新定義,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1829,12 +1830,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 删除旧定义 + # 刪除舊定義 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 插入新定义,放在含 "Happy publishing" 的行前 + # 插入新定義,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1857,7 +1858,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # 开启 Brotli:去掉注释 + # 開啟 Brotli:去掉註釋 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1871,7 +1872,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # 关闭 Brotli:加上注释 + # 關閉 Brotli:加上註釋 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1887,11 +1888,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "无效的参数:使用 'on' 或 'off'" + echo "無效的參數:使用 'on' 或 'off'" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # 檢查 nginx 鏡像並根據情況處理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1913,7 +1914,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # 开启 Zstd:去掉注释 + # 開啟 Zstd:去掉註釋 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1928,7 +1929,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # 关闭 Zstd:加上注释 + # 關閉 Zstd:加上註釋 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1944,11 +1945,11 @@ nginx_zstd() { else - echo "无效的参数:使用 'on' 或 'off'" + echo "無效的參數:使用 'on' 或 'off'" return 1 fi - # 检查 nginx 镜像并根据情况处理 + # 檢查 nginx 鏡像並根據情況處理 if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1975,7 +1976,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "无效的参数:使用 'on' 或 'off'" + echo "無效的參數:使用 'on' 或 'off'" return 1 fi @@ -1989,7 +1990,7 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防禦" while true; do check_waf_status check_cf_mode @@ -2003,25 +2004,25 @@ web_security() { docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服務器網站防禦程序${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 安裝防禦程序" echo "------------------------" - echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. 查看SSH攔截記錄 6. 查看網站攔截記錄" + echo "7. 查看防禦規則列表 8. 查看日誌實時監控" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + echo "11. 配置攔截參數 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. cloudflare模式 22. 高负载开启5秒盾" + echo "21. cloudflare模式 22. 高負載開啟5秒盾" echo "------------------------" - echo "31. 开启WAF 32. 关闭WAF" - echo "33. 开启DDOS防御 34. 关闭DDOS防御" + echo "31. 開啟WAF 32. 關閉WAF" + echo "33. 開啟DDOS防禦 34. 關閉DDOS防禦" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 卸載防禦程序" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2081,7 +2082,7 @@ web_security() { docker rm -f fail2ban rm -rf /path/to/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防禦程序已卸載" ;; 11) @@ -2097,10 +2098,10 @@ web_security() { 21) send_stats "cloudflare模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + echo "到cf後台右上角我的個人資料,選擇左側API令牌,獲取Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken + read -e -p "輸入CF的賬號:" cfuser + read -e -p "輸入CF的Global API Key:" 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 @@ -2115,21 +2116,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" + echo "已配置cloudflare模式,可在cf後台,站點-安全性-事件中查看攔截記錄" ;; 22) - send_stats "高负载开启5秒盾" - echo -e "${gl_huang}网站每5分钟自动检测,当达检测到高负载会自动开盾,低负载也会自动关闭5秒盾。${gl_bai}" + send_stats "高負載開啟5秒盾" + echo -e "${gl_huang}網站每5分鐘自動檢測,當達檢測到高負載會自動開盾,低負載也會自動關閉5秒盾。${gl_bai}" echo "--------------" - echo "获取CF参数: " - echo -e "到cf后台右上角我的个人资料,选择左侧API令牌,获取${gl_huang}Global API Key${gl_bai}" - echo -e "到cf后台域名概要页面右下方获取${gl_huang}区域ID${gl_bai}" + echo "獲取CF參數:" + echo -e "到cf後台右上角我的個人資料,選擇左側API令牌,獲取${gl_huang}Global API Key${gl_bai}" + echo -e "到cf後台域名概要頁面右下方獲取${gl_huang}區域ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "输入CF的账号: " cfuser - read -e -p "输入CF的Global API Key: " cftoken - read -e -p "输入CF中域名的区域ID: " cfzonID + read -e -p "輸入CF的賬號:" cfuser + read -e -p "輸入CF的Global API Key:" cftoken + read -e -p "輸入CF中域名的區域ID:" cfzonID cd ~ install jq bc @@ -2146,23 +2147,23 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高负载自动开盾脚本已添加" + echo "高負載自動開盾腳本已添加" else - echo "自动开盾脚本已存在,无需添加" + echo "自動開盾腳本已存在,無需添加" fi ;; 31) nginx_waf on - echo "站点WAF已开启" - send_stats "站点WAF已开启" + echo "站點WAF已開啟" + send_stats "站點WAF已開啟" ;; 32) nginx_waf off - echo "站点WAF已关闭" - send_stats "站点WAF已关闭" + echo "站點WAF已關閉" + send_stats "站點WAF已關閉" ;; 33) @@ -2188,10 +2189,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 获取当前的 worker_processes 设置值 +# 獲取當前的 worker_processes 設置值 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 根据值设置模式信息 +# 根據值設置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2207,21 +2208,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) + # 檢查 zstd 是否開啟且未被註釋(整行以 zstd on; 開頭) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # 检查 brotli 是否开启且未被注释 + # 檢查 brotli 是否開啟且未被註釋 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # 检查 gzip 是否开启且未被注释 + # 檢查 gzip 是否開啟且未被註釋 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2237,33 +2238,33 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "优化LDNMP环境" - echo -e "优化LDNMP环境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + send_stats "優化LDNMP環境" + echo -e "優化LDNMP環境${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 标准模式 2. 高性能模式 (推荐2H4G以上)" + echo "1. 標準模式 2. 高性能模式 (推薦2H4G以上)" echo "------------------------" - echo "3. 开启gzip压缩 4. 关闭gzip压缩" - echo "5. 开启br压缩 6. 关闭br压缩" - echo "7. 开启zstd压缩 8. 关闭zstd压缩" + echo "3. 開啟gzip壓縮 4. 關閉gzip壓縮" + echo "5. 開啟br壓縮 6. 關閉br壓縮" + echo "7. 開啟zstd壓縮 8. 關閉zstd壓縮" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - send_stats "站点标准模式" + send_stats "站點標準模式" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2275,7 +2276,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2287,23 +2288,23 @@ web_optimization() { optimize_balanced - echo "LDNMP环境已设置成 标准模式" + echo "LDNMP環境已設置成 標準模式" ;; 2) - send_stats "站点高性能模式" + send_stats "站點高性能模式" - # nginx调优 + # 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调优 + # 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调优 + # 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 @@ -2315,7 +2316,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysql调优 + # 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 @@ -2325,7 +2326,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP環境已設置成 高性能模式" ;; 3) @@ -2385,9 +2386,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then -# check_docker="${gl_lv}已安装${gl_bai}" +# check_docker="${gl_lv}已安裝${gl_bai}" # else -# check_docker="${gl_hui}未安装${gl_bai}" +# check_docker="${gl_hui}未安裝${gl_bai}" # fi # } @@ -2395,7 +2396,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "訪問地址:" ip_address @@ -2433,31 +2434,31 @@ check_docker_image_update() { 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##*:} - # 默认标签为 latest + # 默認標籤為 latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - # 添加对官方镜像的支持 + # 添加對官方鏡像的支持 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 从 Docker Hub API 获取镜像发布时间 + # 從 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 @@ -2476,7 +2477,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # 獲取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2486,34 +2487,34 @@ block_container_port() { install iptables - # 检查并封禁其他所有 IP + # 檢查並封禁其他所有 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 + # 檢查並放行指定 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 + # 檢查並放行本地網絡 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 + # 檢查並封禁其他所有 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 + # 檢查並放行指定 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 + # 檢查並放行本地網絡 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 @@ -2523,7 +2524,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "已阻止IP+端口訪問該服務" save_iptables_rules } @@ -2534,7 +2535,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 获取容器的 IP 地址 + # 獲取容器的 IP 地址 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2544,17 +2545,17 @@ clear_container_rules() { install iptables - # 清除封禁其他所有 IP 的规则 + # 清除封禁其他所有 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 的规则 + # 清除放行指定 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 的规则 + # 清除放行本地網絡 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 @@ -2563,17 +2564,17 @@ clear_container_rules() { - # 清除封禁其他所有 IP 的规则 + # 清除封禁其他所有 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 的规则 + # 清除放行指定 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 的规则 + # 清除放行本地網絡 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 @@ -2584,7 +2585,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "已允許IP+端口訪問該服務" save_iptables_rules } @@ -2598,25 +2599,25 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: block_host_port <端口号> <允许的IP>" + echo "錯誤:請提供端口號和允許訪問的 IP。" + echo "用法: block_host_port <端口號> <允許的IP>" return 1 fi install iptables - # 拒绝其他所有 IP 访问 + # 拒絕其他所有 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 访问 + # 允許指定 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 @@ -2625,27 +2626,27 @@ block_host_port() { - # 拒绝其他所有 IP 访问 + # 拒絕其他所有 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 访问 + # 允許指定 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+端口访问该服务" + echo "已阻止IP+端口訪問該服務" save_iptables_rules } @@ -2657,47 +2658,47 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "错误:请提供端口号和允许访问的 IP。" - echo "用法: clear_host_port_rules <端口号> <允许的IP>" + echo "錯誤:請提供端口號和允許訪問的 IP。" + echo "用法: clear_host_port_rules <端口號> <允許的IP>" return 1 fi install iptables - # 清除封禁所有其他 IP 访问的规则 + # 清除封禁所有其他 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 访问的规则 + # 清除允許指定 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 访问的规则 + # 清除封禁所有其他 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 访问的规则 + # 清除允許指定 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+端口访问该服务" + echo "已允許IP+端口訪問該服務" save_iptables_rules } @@ -2746,18 +2747,18 @@ while true; do fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 安裝 2. 更新 3. 卸載" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. 添加域名訪問 6. 刪除域名訪問" + echo "7. 允許IP+端口訪問 8. 阻止IP+端口訪問" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "輸入應用對外服務端口,回車默認使用${docker_port}端口:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2770,12 +2771,12 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_name已經安裝完成" check_docker_app_ip echo "" $docker_use $docker_passwd - send_stats "安装$docker_name" + send_stats "安裝$docker_name" ;; 2) docker rm -f "$docker_name" @@ -2785,7 +2786,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "$docker_name 已经安装完成" + echo "$docker_name已經安裝完成" check_docker_app_ip echo "" $docker_use @@ -2799,30 +2800,30 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" - send_stats "卸载$docker_name" + echo "應用已卸載" + send_stats "解除安裝$docker_name" ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}域名訪問設置" + send_stats "${docker_name}域名訪問設置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "域名格式 example.com 不帶https://" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "允許IP訪問${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "阻止IP訪問${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2859,18 +2860,18 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 安裝 2. 更新 3. 卸載" echo "------------------------" - echo "5. 添加域名访问 6. 删除域名访问" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "5. 添加域名訪問 6. 刪除域名訪問" + echo "7. 允許IP+端口訪問 8. 阻止IP+端口訪問" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) check_disk_space $app_size - read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port + read -e -p "輸入應用對外服務端口,回車默認使用${docker_port}端口:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2894,22 +2895,22 @@ docker_app_plus() { ;; 5) - echo "${docker_name}域名访问设置" - send_stats "${docker_name}域名访问设置" + echo "${docker_name}域名訪問設置" + send_stats "${docker_name}域名訪問設置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "域名格式 example.com 不帶https://" web_del ;; 7) - send_stats "允许IP访问 ${docker_name}" + send_stats "允許IP訪問${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "阻止IP访问 ${docker_name}" + send_stats "阻止IP訪問${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2994,17 +2995,17 @@ 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 會話 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3079,7 +3080,7 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "已重启" + echo "已重啟" reboot ;; *) @@ -3126,8 +3127,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "无法再次安装LDNMP环境" - echo -e "${gl_huang}提示: ${gl_bai}建站环境已安装。无需再次安装!" + send_stats "無法再次安裝LDNMP環境" + echo -e "${gl_huang}提示:${gl_bai}建站環境已安裝。無需再次安裝!" break_end linux_ldnmp fi @@ -3137,10 +3138,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "安装LDNMP环境" +send_stats "安裝LDNMP環境" root_use clear -echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" +echo -e "${gl_huang}LDNMP環境未安裝,開始安裝LDNMP環境...${gl_bai}" check_disk_space 3 check_port install_dependency @@ -3154,10 +3155,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "安装nginx环境" +send_stats "安裝nginx環境" root_use clear -echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" +echo -e "${gl_huang}nginx未安裝,開始安裝nginx環境...${gl_bai}" check_disk_space 1 check_port install_dependency @@ -3168,8 +3169,8 @@ 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 "nginx已安裝完成" +echo -e "當前版本:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3180,7 +3181,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "请先安装LDNMP环境" + send_stats "請先安裝LDNMP環境" ldnmp_install_all fi @@ -3190,7 +3191,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "请先安装nginx环境" + send_stats "請先安裝nginx環境" nginx_install_all fi @@ -3201,16 +3202,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "您的$webname搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webname 安装信息如下: " + echo "$webname安裝信息如下:" } nginx_web_on() { clear - echo "您的 $webname 搭建好了!" + echo "您的$webname搭建好了!" echo "https://$yuming" } @@ -3222,8 +3223,8 @@ ldnmp_wp() { # wordpress webname="WordPress" yuming="${1:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3263,17 +3264,17 @@ ldnmp_Proxy() { reverseproxy="${2:-}" port="${3:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "請輸入你的反代IP:" reverseproxy fi if [ -z "$port" ]; then - read -e -p "请输入你的反代端口: " port + read -e -p "請輸入你的反代端口:" port fi nginx_install_status install_ssltls @@ -3296,14 +3297,14 @@ ldnmp_Proxy_backend() { yuming="${1:-}" reverseproxy_port="${2:-}" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy_port" ]; then - read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port + read -e -p "請輸入你的多個反代IP+端口用空格隔開(例如 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3356,12 +3357,12 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMP站点管理" - echo "LDNMP环境" + send_stats "LDNMP站點管理" + echo "LDNMP環境" echo "------------------------" ldnmp_v - echo -e "站点: ${output} 证书到期时间" + echo -e "站點:${output}證書到期時間" echo -e "------------------------" for cert_file in /home/web/certs/*_cert.pem; do local domain=$(basename "$cert_file" | sed 's/_cert.pem//') @@ -3374,35 +3375,35 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "数据库: ${db_output}" + 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 "------------------------" - 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 -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. 清理站点缓存 4. 创建关联站点" - echo "5. 查看访问日志 6. 查看错误日志" - echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "1. 申請/更新域名證書 2. 更換站點域名" + echo "3. 清理站點緩存 4. 創建關聯站點" + echo "5. 查看訪問日誌 6. 查看錯誤日誌" + echo "7. 編輯全局配置 8. 編輯站點配置" + echo "9. 管理站點數據庫 10. 查看站點分析報告" echo "------------------------" - echo "20. 删除指定站点数据" + echo "20. 刪除指定站點數據" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - send_stats "申请域名证书" - read -e -p "请输入你的域名: " yuming + 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 @@ -3411,15 +3412,15 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" - read -e -p "请输入旧域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "更換站點域名" + echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站數據再更換站點域名!" + read -e -p "請輸入舊域名:" oddyuming + read -e -p "請輸入新域名:" yuming install_certbot install_ssltls certs_status - # mysql替换 + # mysql替換 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3437,7 +3438,7 @@ ldnmp_web_status() { 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" {} + @@ -3458,10 +3459,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "创建关联站点" - echo -e "为现有的站点再关联一个新域名用于访问" - read -e -p "请输入现有的域名: " oddyuming - read -e -p "请输入新域名: " yuming + send_stats "創建關聯站點" + echo -e "為現有的站點再關聯一個新域名用於訪問" + read -e -p "請輸入現有的域名:" oddyuming + read -e -p "請輸入新域名:" yuming install_certbot install_ssltls certs_status @@ -3475,25 +3476,25 @@ ldnmp_web_status() { ;; 5) - send_stats "查看访问日志" + send_stats "查看訪問日誌" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "查看错误日志" + send_stats "查看錯誤日誌" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "编辑全局配置" + send_stats "編輯全局配置" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "编辑站点配置" - read -e -p "编辑站点配置,请输入你要编辑的域名: " yuming + send_stats "編輯站點配置" + read -e -p "編輯站點配置,請輸入你要編輯的域名:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3503,7 +3504,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "查看站点数据" + send_stats "查看站點數據" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3539,16 +3540,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}是一款时下流行且强大的运维管理面板。" - echo "官网介绍: $panelurl " + echo "${panelname}是一款時下流行且強大的運維管理面板。" + echo "官網介紹:$panelurl " echo "" echo "------------------------" - echo "1. 安装 2. 管理 3. 卸载" + echo "1. 安裝 2. 管理 3. 卸載" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case $choice in 1) check_disk_space 1 @@ -3557,7 +3558,7 @@ while true; do panel_app_install mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - send_stats "${panelname}安装" + send_stats "${panelname}安裝" ;; 2) panel_app_manage @@ -3570,7 +3571,7 @@ while true; do panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}卸载" + send_stats "${panelname}解除安裝" ;; *) break @@ -3614,8 +3615,8 @@ donlond_frp() { generate_frps_config() { - send_stats "安装frp服务端" - # 生成随机端口和凭证 + send_stats "安裝frp服務端" + # 生成隨機端口和憑證 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3636,17 +3637,17 @@ EOF donlond_frp frps - # 输出生成的信息 + # 輸出生成的信息 ip_address echo "------------------------" - echo "客户端部署时需要用的参数" - echo "服务IP: $ipv4_address" + 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 "FRP面板用戶名:$dashboard_user" + echo "FRP面板密碼:$dashboard_pwd" echo open_port 8055 8056 @@ -3656,9 +3657,9 @@ EOF configure_frpc() { - send_stats "安装frp客户端" - read -e -p "请输入外网对接IP: " server_addr - read -e -p "请输入外网对接token: " token + send_stats "安裝frp客戶端" + read -e -p "請輸入外網對接IP:" server_addr + read -e -p "請輸入外網對接token:" token echo mkdir -p /home/frp @@ -3678,17 +3679,17 @@ EOF } add_forwarding_service() { - send_stats "添加frp内网服务" - # 提示用户输入服务名称和转发信息 - read -e -p "请输入服务名称: " service_name - read -e -p "请输入转发类型 (tcp/udp) [回车默认tcp]: " service_type + send_stats "添加frp內網服務" + # 提示用戶輸入服務名稱和轉發信息 + read -e -p "請輸入服務名稱:" service_name + read -e -p "請輸入轉發類型 (tcp/udp) [回​​車默認tcp]:" service_type local service_type=${service_type:-tcp} - read -e -p "请输入内网IP [回车默认127.0.0.1]: " local_ip + read -e -p "請輸入內網IP [回車默認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 + read -e -p "請輸入內網端口:" local_port + read -e -p "請輸入外網端口:" remote_port - # 将用户输入写入配置文件 + # 將用戶輸入寫入配置文件 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3698,8 +3699,8 @@ remote_port = ${remote_port} EOF - # 输出生成的信息 - echo "服务 $service_name 已成功添加到 frpc.toml" + # 輸出生成的信息 + echo "服務$service_name已成功添加到 frpc.toml" docker restart frpc @@ -3710,12 +3711,12 @@ EOF delete_forwarding_service() { - send_stats "删除frp内网服务" - # 提示用户输入需要删除的服务名称 - read -e -p "请输入需要删除的服务名称: " service_name - # 使用 sed 删除该服务及其相关配置 + send_stats "刪除frp內網服務" + # 提示用戶輸入需要刪除的服務名稱 + read -e -p "請輸入需要刪除的服務名稱:" service_name + # 使用 sed 刪除該服務及其相關配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "服务 $service_name 已成功从 frpc.toml 删除" + echo "服務$service_name已成功從 frpc.toml 刪除" docker restart frpc @@ -3725,7 +3726,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # 打印表頭 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3746,7 +3747,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 如果已有服务信息,在处理新服务之前打印当前服务 + # 如果已有服務信息,在處理新服務之前打印當前服務 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3755,7 +3756,7 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 更新當前服務名稱 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 @@ -3788,7 +3789,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 打印最後一個服務的信息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3801,17 +3802,17 @@ list_forwarding_services() { -# 获取 FRP 服务端端口 +# 獲取 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 的端口 + # 檢查是否有非 8055/8056 的端口 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3820,18 +3821,18 @@ generate_access_urls() { fi done - # 只在有有效端口时显示标题和内容 + # 只在有有效端口時顯示標題和內容 if [ "$has_valid_ports" = true ]; then - echo "FRP服务对外访问地址:" + echo "FRP服務對外訪問地址:" - # 处理 IPv4 地址 + # 處理 IPv4 地址 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # 处理 IPv6 地址(如果存在) + # 處理 IPv6 地址(如果存在) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3840,7 +3841,7 @@ generate_access_urls() { done fi - # 处理 HTTPS 配置 + # 處理 HTTPS 配置 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3867,7 +3868,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRP服務端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3875,25 +3876,25 @@ frps_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP服务端 $check_frp $update_status" - echo "构建FRP内网穿透服务环境,将无公网IP的设备暴露到互联网" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo -e "FRP服務端$check_frp $update_status" + echo "構建FRP內網穿透服務環境,將無公網IP的設備暴露到互聯網" + 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 "1. 安裝 2. 更新 3. 卸載" echo "------------------------" - echo "5. 内网服务域名访问 6. 删除域名访问" + echo "5. 內網服務域名訪問 6. 刪除域名訪問" echo "------------------------" - echo "7. 允许IP+端口访问 8. 阻止IP+端口访问" + echo "7. 允許IP+端口訪問 8. 阻止IP+端口訪問" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00. 刷新服務狀態 0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) install jq grep ss @@ -3901,7 +3902,7 @@ frps_panel() { generate_frps_config mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经安装完成" + echo "FRP服務端已經安裝完成" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3911,7 +3912,7 @@ frps_panel() { donlond_frp frps mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP服务端已经更新完成" + echo "FRP服務端已經更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3922,37 +3923,37 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "應用已卸載" ;; 5) - echo "将内网穿透服务反代成域名访问" - send_stats "FRP对外域名访问" + echo "將內網穿透服務反代成域名訪問" + send_stats "FRP對外域名訪問" add_yuming - read -e -p "请输入你的内网穿透服务端口: " frps_port + read -e -p "請輸入你的內網穿透服務端口:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "域名格式 example.com 不带https://" + echo "域名格式 example.com 不帶https://" web_del ;; 7) - send_stats "允许IP访问" - read -e -p "请输入需要放行的端口: " frps_port + 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 + send_stats "阻止IP訪問" + echo "如果你已經反代域名訪問了,可用此功能阻止IP+端口訪問,這樣更安全。" + read -e -p "請輸入需要阻止的端口:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "刷新FRP服务状态" - echo "已经刷新FRP服务状态" + send_stats "刷新FRP服務狀態" + echo "已經刷新FRP服務狀態" ;; *) @@ -3965,7 +3966,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRP客戶端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3973,10 +3974,10 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP客户端 $check_frp $update_status" - echo "与服务端对接,对接后可创建内网穿透服务到互联网访问" - echo "官网介绍: https://github.com/fatedier/frp/" - echo "视频教学: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo -e "FRP客戶端$check_frp $update_status" + echo "與服務端對接,對接後可創建內網穿透服務到互聯網訪問" + echo "官網介紹: https://github.com/fatedier/frp/" + echo "視頻教學: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3984,13 +3985,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 安裝 2. 更新 3. 卸載" echo "------------------------" - echo "4. 添加对外服务 5. 删除对外服务 6. 手动配置服务" + echo "4. 添加對外服務 5. 刪除對外服務 6. 手動配置服務" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) install jq grep ss @@ -3998,7 +3999,7 @@ frpc_panel() { configure_frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经安装完成" + echo "FRP客戶端已經安裝完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -4008,7 +4009,7 @@ frpc_panel() { donlond_frp frpc mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "FRP客户端已经更新完成" + echo "FRP客戶端已經更新完成" ;; 3) @@ -4019,7 +4020,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "應用已卸載" ;; 4) @@ -4065,33 +4066,33 @@ yt_menu_pro() { fi clear - send_stats "yt-dlp 下载工具" + 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 -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 "已下載視頻列表:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(暫無)" echo "-------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 安裝 2. 更新 3. 卸載" echo "-------------------------" - echo "5. 单个视频下载 6. 批量视频下载 7. 自定义参数下载" - echo "8. 下载为MP3音频 9. 删除视频目录 10. Cookie管理(开发中)" + echo "5. 單個視頻下載 6. 批量視頻下載 7. 自定義參數下載" + echo "8. 下載為MP3音頻 9. 刪除視頻目錄 10. Cookie管理(開發中)" echo "-------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "-------------------------" - read -e -p "请输入选项编号: " choice + read -e -p "請輸入選項編號:" choice case $choice in 1) - send_stats "正在安装 yt-dlp..." - echo "正在安装 yt-dlp..." + send_stats "正在安裝 yt-dlp..." + echo "正在安裝 yt-dlp..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "安装完成。按任意键继续..." + echo "安裝完成。按任意鍵繼續..." read ;; 2) send_stats "正在更新 yt-dlp..." @@ -4099,34 +4100,34 @@ yt_menu_pro() { yt-dlp -U mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) - echo "更新完成。按任意键继续..." + echo "更新完成。按任意鍵繼續..." read ;; 3) - send_stats "正在卸载 yt-dlp..." - echo "正在卸载 yt-dlp..." + send_stats "正在卸載 yt-dlp..." + echo "正在卸載 yt-dlp..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "卸载完成。按任意键继续..." + echo "卸載完成。按任意鍵繼續..." read ;; 5) - send_stats "单个视频下载" - read -e -p "请输入视频链接: " url + 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 "下载完成,按任意键继续..." ;; + read -e -p "下載完成,按任意鍵繼續..." ;; 6) - send_stats "批量视频下载" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 輸入多個視頻鏈接地址\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "现在开始批量下载..." + echo "現在開始批量下載..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4134,31 +4135,31 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "批量下载完成,按任意键继续..." ;; + read -e -p "批量下載完成,按任意鍵繼續..." ;; 7) - send_stats "自定义视频下载" - read -e -p "请输入完整 yt-dlp 参数(不含 yt-dlp): " custom + 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 "执行完成,按任意键继续..." ;; + read -e -p "執行完成,按任意鍵繼續..." ;; 8) - send_stats "MP3下载" - read -e -p "请输入视频链接: " url + 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 "音频下载完成,按任意键继续..." ;; + read -e -p "音頻下載完成,按任意鍵繼續..." ;; 9) - send_stats "删除视频" - read -e -p "请输入删除视频名称: " rmdir + send_stats "刪除視頻" + read -e -p "請輸入刪除視頻名稱:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4194,7 +4195,7 @@ set_timedate() { -# 修复dpkg中断问题 +# 修復dpkg中斷問題 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4203,7 +4204,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}正在系统更新...${gl_bai}" + echo -e "${gl_huang}正在系統更新...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4230,7 +4231,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}正在系统清理...${gl_bai}" + echo -e "${gl_huang}正在系統清理...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4259,13 +4260,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "清理包管理器缓存..." + echo "清理包管理器緩存..." apk cache clean - echo "删除系统日志..." + echo "刪除系統日誌..." rm -rf /var/log/* - echo "删除APK缓存..." + echo "刪除APK緩存..." rm -rf /var/cache/apk/* - echo "删除临时文件..." + echo "刪除臨時文件..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4283,19 +4284,19 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "删除系统日志..." + echo "刪除系統日誌..." rm -rf /var/log/* - echo "删除临时文件..." + echo "刪除臨時文件..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "清理未使用的依赖..." + echo "清理未使用的依賴..." pkg autoremove -y - echo "清理包管理器缓存..." + echo "清理包管理器緩存..." pkg clean -y - echo "删除系统日志..." + echo "刪除系統日誌..." rm -rf /var/log/* - echo "删除临时文件..." + echo "刪除臨時文件..." rm -rf /tmp/* else @@ -4339,26 +4340,26 @@ fi set_dns_ui() { root_use -send_stats "优化DNS" +send_stats "優化DNS" while true; do clear - echo "优化DNS地址" + echo "優化DNS地址" echo "------------------------" - echo "当前DNS地址" + echo "當前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 国外DNS优化: " + 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 "2. 國內DNS優化:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. 手动编辑DNS配置" + echo "3. 手動編輯DNS配置" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "請輸入你的選擇:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4366,7 +4367,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "国外DNS优化" + send_stats "國外DNS優化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4374,12 +4375,12 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内DNS优化" + send_stats "國內DNS優化" ;; 3) install nano nano /etc/resolv.conf - send_stats "手动编辑DNS配置" + send_stats "手動編輯DNS配置" ;; *) break @@ -4402,13 +4403,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 如果找到 PasswordAuthentication 设置为 yes + # 如果找到 PasswordAuthentication 設置為 yes 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 设置为 yes + # 如果找到 PubkeyAuthentication 設置為 yes 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/' \ @@ -4416,7 +4417,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # 如果 PasswordAuthentication 和 PubkeyAuthentication 都没有匹配,则设置默认值 + # 如果 PasswordAuthentication 和 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" @@ -4427,7 +4428,7 @@ correct_ssh_config() { new_ssh_port() { - # 备份 SSH 配置文件 + # 備份 SSH 配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4440,7 +4441,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 端口已修改为: $new_port" + echo "SSH 端口已修改為:$new_port" sleep 1 @@ -4458,7 +4459,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "私钥信息已生成,务必复制保存,可保存成 ${gl_huang}${ipv4_address}_ssh.key${gl_bai} 文件,用于以后的SSH登录" + echo -e "私鑰信息已生成,務必復制保存,可保存成${gl_huang}${ipv4_address}_ssh.key${gl_bai}文件,用於以後的SSH登錄" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4470,17 +4471,17 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}ROOT私鑰登錄已開啟,已關閉ROOT密碼登錄,重連將會生效${gl_bai}" } import_sshkey() { - read -e -p "请输入您的SSH公钥内容(通常以 'ssh-rsa' 或 'ssh-ed25519' 开头): " public_key + read -e -p "請輸入您的SSH公鑰內容(通常以 'ssh-rsa' 或 'ssh-ed25519' 開頭):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}错误:未输入公钥内容。${gl_bai}" + echo -e "${gl_hong}錯誤:未輸入公鑰內容。${gl_bai}" return 1 fi @@ -4498,7 +4499,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公钥已成功导入,ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${gl_bai}" + echo -e "${gl_lv}公鑰已成功導入,ROOT私鑰登錄已開啟,已關閉ROOT密碼登錄,重連將會生效${gl_bai}" } @@ -4507,26 +4508,26 @@ import_sshkey() { add_sshpasswd() { -echo "设置你的ROOT密码" +echo "設置你的ROOT密碼" 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}ROOT登录设置完毕!${gl_bai}" +echo -e "${gl_lv}ROOT登錄設置完畢!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}提示:${gl_bai}該功能需要root用戶才能運行!" && break_end && kejilion } dd_xitong() { - send_stats "重装系统" + 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 @@ -4537,41 +4538,41 @@ dd_xitong() { } dd_xitong_1() { - echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" - echo -e "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "按任意键继续..." + 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 "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hong}注意:${gl_bai}重裝有風險失聯,不放心者慎用。重裝預計花費15分鐘,請提前備份數據。" + echo -e "${gl_hui}感謝leitbogioro大佬和bin456789大佬的腳本支持!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4587,21 +4588,21 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" + echo "35. openSUSE Tumbleweed 36. fnos飛牛公測版" 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 "0. 返回上一級選單" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "請選擇要重裝的系統:" sys_choice case "$sys_choice" in 1) - send_stats "重装debian 13" + send_stats "重裝debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4609,49 +4610,49 @@ dd_xitong() { ;; 2) - send_stats "重装debian 12" + send_stats "重裝debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "重装debian 11" + send_stats "重裝debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "重装debian 10" + send_stats "重裝debian 10" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "重装ubuntu 24.04" + send_stats "重裝ubuntu 24.04" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "重装ubuntu 22.04" + send_stats "重裝ubuntu 22.04" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "重装ubuntu 20.04" + send_stats "重裝ubuntu 20.04" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "重装ubuntu 18.04" + send_stats "重裝ubuntu 18.04" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4660,7 +4661,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "重裝rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4668,7 +4669,7 @@ dd_xitong() { ;; 22) - send_stats "重装rockylinux9" + send_stats "重裝rockylinux9" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4676,7 +4677,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "重裝alma10" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4684,7 +4685,7 @@ dd_xitong() { ;; 24) - send_stats "重装alma9" + send_stats "重裝alma9" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4692,7 +4693,7 @@ dd_xitong() { ;; 25) - send_stats "重装oracle10" + send_stats "重裝oracle10" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4700,7 +4701,7 @@ dd_xitong() { ;; 26) - send_stats "重装oracle9" + send_stats "重裝oracle9" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4708,7 +4709,7 @@ dd_xitong() { ;; 27) - send_stats "重装fedora42" + send_stats "重裝fedora42" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4716,7 +4717,7 @@ dd_xitong() { ;; 28) - send_stats "重装fedora41" + send_stats "重裝fedora41" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4724,7 +4725,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "重裝centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4732,7 +4733,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "重裝centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4740,7 +4741,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "重裝alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4748,7 +4749,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "重裝arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4756,7 +4757,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "重裝kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4764,7 +4765,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "重裝openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4772,7 +4773,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "重裝opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4780,7 +4781,7 @@ dd_xitong() { ;; 36) - send_stats "重装飞牛" + send_stats "重裝飛牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4789,7 +4790,7 @@ dd_xitong() { 41) - send_stats "重装windows11" + send_stats "重裝windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4797,13 +4798,13 @@ dd_xitong() { ;; 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "重裝windows10" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "重装windows7" + send_stats "重裝windows7" 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 @@ -4811,21 +4812,21 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "重裝windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; 45) - send_stats "重装windows server 19" + send_stats "重裝windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; 46) - send_stats "重装windows server 16" + send_stats "重裝windows server 16" dd_xitong_2 bash InstallNET.sh -windows 2016 -lang "cn" reboot @@ -4833,7 +4834,7 @@ dd_xitong() { ;; 47) - send_stats "重装windows11 ARM" + send_stats "重裝windows11 ARM" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4863,17 +4864,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "您已安装xanmod的BBRv3内核" - echo "当前内核版本: $kernel_version" + echo "您已安裝xanmod的BBRv3內核" + echo "當前內核版本:$kernel_version" echo "" - echo "内核管理" + echo "內核管理" echo "------------------------" - echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" + echo "1. 更新BBRv3內核 2. 卸載BBRv3內核" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) @@ -4883,7 +4884,7 @@ bbrv3() { # 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:添加存储库 + # 步驟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+') @@ -4892,7 +4893,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod内核已更新。重启后生效" + echo "XanMod內核已更新。重啟後生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4902,7 +4903,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod内核已卸载。重启后生效" + echo "XanMod內核已卸載。重啟後生效" server_reboot ;; @@ -4915,13 +4916,13 @@ bbrv3() { else clear - echo "设置BBR3加速" - echo "视频介绍: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" + echo "設置BBR3加速" + echo "視頻介紹: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "仅支持Debian/Ubuntu" - echo "请备份数据,将为你升级Linux内核开启BBR3" + echo "僅支持Debian/Ubuntu" + echo "請備份數據,將為你升級Linux內核開啟BBR3" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "確定繼續嗎? (Y/N):" choice case "$choice" in [Yy]) @@ -4929,12 +4930,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "当前环境不支持,仅支持Debian和Ubuntu系统" + echo "當前環境不支持,僅支持Debian和Ubuntu系統" break_end linux_Settings fi else - echo "无法确定操作系统类型" + echo "無法確定操作系統類型" break_end linux_Settings fi @@ -4945,7 +4946,7 @@ bbrv3() { # 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:添加存储库 + # 步驟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+') @@ -4956,7 +4957,7 @@ bbrv3() { bbr_on - echo "XanMod内核安装并BBR3启用成功。重启后生效" + echo "XanMod內核安裝並BBR3啟用成功。重啟後生效" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4966,7 +4967,7 @@ bbrv3() { echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac fi @@ -4975,40 +4976,40 @@ bbrv3() { elrepo_install() { - # 导入 ELRepo GPG 公钥 - echo "导入 ELRepo GPG 公钥..." + # 導入 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" + echo "不支持的操作系統:$os_name" break_end linux_Settings fi - # 打印检测到的操作系统信息 - echo "检测到的操作系统: $os_name $os_version" - # 根据系统版本安装对应的 ELRepo 仓库配置 + # 打印檢測到的操作系統信息 + echo "檢測到的操作系統:$os_name $os_version" + # 根據系統版本安裝對應的 ELRepo 倉庫配置 if [[ "$os_version" == 8 ]]; then - echo "安装 ELRepo 仓库配置 (版本 8)..." + 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)..." + echo "安裝 ELRepo 倉庫配置 (版本 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "安装 ELRepo 仓库配置 (版本 10)..." + echo "安裝 ELRepo 倉庫配置 (版本 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "不支持的系统版本:$os_version" + echo "不支持的系統版本:$os_version" break_end linux_Settings fi - # 启用 ELRepo 内核仓库并安装最新的主线内核 - echo "启用 ELRepo 内核仓库并安装最新的主线内核..." + # 啟用 ELRepo 內核倉庫並安裝最新的主線內核 + echo "啟用 ELRepo 內核倉庫並安裝最新的主線內核..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "已安装 ELRepo 仓库配置并更新到最新主线内核。" + echo "已安裝 ELRepo 倉庫配置並更新到最新主線內核。" server_reboot } @@ -5016,37 +5017,37 @@ elrepo_install() { elrepo() { root_use - send_stats "红帽内核管理" + send_stats "紅帽內核管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "您已安装elrepo内核" - echo "当前内核版本: $kernel_version" + echo "您已安裝elrepo內核" + echo "當前內核版本:$kernel_version" echo "" - echo "内核管理" + echo "內核管理" echo "------------------------" - echo "1. 更新elrepo内核 2. 卸载elrepo内核" + echo "1. 更新elrepo內核 2. 卸載elrepo內核" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "更新红帽内核" + send_stats "更新紅帽內核" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo内核已卸载。重启后生效" - send_stats "卸载红帽内核" + echo "elrepo內核已卸載。重啟後生效" + send_stats "卸載紅帽內核" server_reboot ;; @@ -5059,26 +5060,26 @@ elrepo() { else clear - echo "请备份数据,将为你升级Linux内核" - echo "视频介绍: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + echo "請備份數據,將為你升級Linux內核" + echo "視頻介紹: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "仅支持红帽系列发行版 CentOS/RedHat/Alma/Rocky/oracle " - echo "升级Linux内核可提升系统性能和安全,建议有条件的尝试,生产环境谨慎升级!" + echo "僅支持紅帽系列發行版 CentOS/RedHat/Alma/Rocky/oracle" + echo "升級Linux內核可提升系統性能和安全,建議有條件的嘗試,生產環境謹慎升級!" echo "------------------------------------------------" - read -e -p "确定继续吗?(Y/N): " choice + read -e -p "確定繼續嗎? (Y/N):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "升级红帽内核" + send_stats "升級紅帽內核" server_reboot ;; [Nn]) echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac fi @@ -5089,7 +5090,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}正在更新病毒库...${gl_bai}" + echo -e "${gl_huang}正在更新病毒庫...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5099,19 +5100,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "请指定要扫描的目录。" + echo "請指定要掃描的目錄。" return fi - echo -e "${gl_huang}正在扫描目录$@... ${gl_bai}" + echo -e "${gl_huang}正在掃描目錄$@...${gl_bai}" - # 构建 mount 参数 + # 構建 mount 參數 local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # 构建 clamscan 命令参数 + # 構建 clamscan 命令參數 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5120,7 +5121,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # 执行 Docker 命令 + # 執行 Docker 命令 docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5129,8 +5130,8 @@ clamav_scan() { 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}" + 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}" } @@ -5142,23 +5143,23 @@ clamav_scan() { clamav() { root_use - send_stats "病毒扫描管理" + send_stats "病毒掃描管理" while true; do clear - echo "clamav病毒扫描工具" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "clamav病毒掃描工具" + echo "視頻介紹: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "是一个开源的防病毒软件工具,主要用于检测和删除各种类型的恶意软件。" - echo "包括病毒、特洛伊木马、间谍软件、恶意脚本和其他有害软件。" + echo "是一個開源的防病毒軟件工具,主要用於檢測和刪除各種類型的惡意軟件。" + echo "包括病毒、特洛伊木馬、間諜軟件、惡意腳本和其他有害軟件。" echo "------------------------" - echo -e "${gl_lv}1. 全盘扫描 ${gl_bai} ${gl_huang}2. 重要目录扫描 ${gl_bai} ${gl_kjlan} 3. 自定义目录扫描 ${gl_bai}" + echo -e "${gl_lv}1. 全盤掃描${gl_bai} ${gl_huang}2. 重要目錄掃描${gl_bai} ${gl_kjlan}3. 自定義目錄掃描${gl_bai}" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - send_stats "全盘扫描" + send_stats "全盤掃描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5167,7 +5168,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要目錄掃描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5175,8 +5176,8 @@ clamav() { break_end ;; 3) - send_stats "自定义目录扫描" - read -e -p "请输入要扫描的目录,用空格分隔(例如:/etc /var /usr /home /root): " directories + send_stats "自定義目錄掃描" + read -e -p "請輸入要掃描的目錄,用空格分隔(例如:/etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5193,21 +5194,21 @@ clamav() { -# 高性能模式优化函数 +# 高性能模式優化函數 optimize_high_performance() { - echo -e "${gl_lv}切换到${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}切換到${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}優化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5219,14 +5220,14 @@ optimize_high_performance() { 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}" + echo -e "${gl_lv}優化緩存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}優化CPU設置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}其他優化...${gl_bai}" + # 禁用透明大頁面,減少延遲 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5234,21 +5235,21 @@ optimize_high_performance() { } -# 均衡模式优化函数 +# 均衡模式優化函數 optimize_balanced() { - echo -e "${gl_lv}切换到均衡模式...${gl_bai}" + echo -e "${gl_lv}切換到均衡模式...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}優化文件描述符...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5260,36 +5261,36 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}優化緩存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}優化CPU設置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}其他優化...${gl_bai}" + # 還原透明大頁面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 還原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 还原默认设置函数 +# 還原默認設置函數 restore_defaults() { - echo -e "${gl_lv}还原到默认设置...${gl_bai}" + echo -e "${gl_lv}還原到默認設置...${gl_bai}" - echo -e "${gl_lv}还原文件描述符...${gl_bai}" + echo -e "${gl_lv}還原文件描述符...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}还原虚拟内存...${gl_bai}" + 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}" + 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 @@ -5301,37 +5302,37 @@ restore_defaults() { 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}" + echo -e "${gl_lv}還原緩存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}还原CPU设置...${gl_bai}" + echo -e "${gl_lv}還原CPU設置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}还原其他优化...${gl_bai}" - # 还原透明大页面 + echo -e "${gl_lv}還原其他優化...${gl_bai}" + # 還原透明大頁面 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # 还原 NUMA balancing + # 還原 NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null } -# 网站搭建优化函数 +# 網站搭建優化函數 optimize_web_server() { - echo -e "${gl_lv}切换到网站搭建优化模式...${gl_bai}" + echo -e "${gl_lv}切換到網站搭建優化模式...${gl_bai}" - echo -e "${gl_lv}优化文件描述符...${gl_bai}" + echo -e "${gl_lv}優化文件描述符...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}优化虚拟内存...${gl_bai}" + 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}" + 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 @@ -5343,14 +5344,14 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}優化緩存管理...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}优化CPU设置...${gl_bai}" + echo -e "${gl_lv}優化CPU設置...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}其他优化...${gl_bai}" - # 禁用透明大页面,减少延迟 + echo -e "${gl_lv}其他優化...${gl_bai}" + # 禁用透明大頁面,減少延遲 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 禁用 NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5363,62 +5364,62 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux内核调优管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + send_stats "Linux內核調優管理" + echo "Linux系統內核參數優化" + echo "視頻介紹: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "提供多种系统参数调优模式,用户可以根据自身使用场景进行选择切换。" - echo -e "${gl_huang}提示: ${gl_bai}生产环境请谨慎使用!" + echo "提供多種系統參數調優模式,用戶可以根據自身使用場景進行選擇切換。" + echo -e "${gl_huang}提示:${gl_bai}生產環境請謹慎使用!" echo "--------------------" - echo "1. 高性能优化模式: 最大化系统性能,优化文件描述符、虚拟内存、网络设置、缓存管理和CPU设置。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" - echo "3. 网站优化模式: 针对网站服务器进行优化,提高并发连接处理能力、响应速度和整体性能。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "1. 高性能優化模式: 最大化系統性能,優化文件描述符、虛擬內存、網絡設置、緩存管理和CPU設置。" + echo "2. 均衡優化模式: 在性能與資源消耗之間取得平衡,適合日常使用。" + echo "3. 網站優化模式: 針對網站服務器進行優化,提高並發連接處理能力、響應速度和整體性能。" + echo "4. 直播優化模式: 針對直播推流的特殊需求進行優化,減少延遲,提高傳輸性能。" + echo "5. 遊戲服優化模式: 針對遊戲服務器進行優化,提高並發處理能力和響應速度。" + echo "6. 還原默認設置: 將系統設置還原為默認配置。" echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式优化" + send_stats "高性能模式優化" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式优化" + send_stats "均衡模式優化" ;; 3) cd ~ clear optimize_web_server - send_stats "网站优化模式" + send_stats "網站優化模式" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "直播推流优化" + send_stats "直播推流優化" ;; 5) cd ~ clear local tiaoyou_moshi="游戏服优化模式" optimize_high_performance - send_stats "游戏服优化" + send_stats "遊戲服優化" ;; 6) cd ~ clear restore_defaults - send_stats "还原默认设置" + send_stats "還原默認設置" ;; *) break @@ -5445,7 +5446,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}系統語言已經修改為:$lang重新連接SSH生效。${gl_bai}" hash -r break_end @@ -5454,17 +5455,17 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}系统语言已经修改为: $lang 重新连接SSH生效。${gl_bai}" + echo -e "${gl_lv}系統語言已經修改為:$lang重新連接SSH生效。${gl_bai}" hash -r break_end ;; *) - echo "不支持的系统: $ID" + echo "不支持的系統:$ID" break_end ;; esac else - echo "不支持的系统,无法识别系统类型。" + echo "不支持的系統,無法識別系統類型。" break_end fi } @@ -5474,29 +5475,29 @@ update_locale() { linux_language() { root_use -send_stats "切换系统语言" +send_stats "切換系統語言" while true; do clear - echo "当前系统语言: $LANG" + echo "當前系統語言:$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1. 英文 2. 簡體中文 3. 繁體中文" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "切换到英文" + send_stats "切換到英文" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "切换到简体中文" + send_stats "切換到簡體中文" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "切换到繁体中文" + send_stats "切換到繁體中文" ;; *) break @@ -5518,7 +5519,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}变更完成。重新连接SSH后可查看变化!${gl_bai}" +echo -e "${gl_lv}變更完成。重新連接SSH後可查看變化!${gl_bai}" hash -r break_end @@ -5542,9 +5543,9 @@ shell_bianse() { 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 "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) @@ -5589,7 +5590,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "系统回收站" + send_stats "系統回收站" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5604,17 +5605,17 @@ linux_trash() { fi clear - echo -e "当前回收站 ${trash_status}" - echo -e "启用后rm删除的文件先进入回收站,防止误删重要文件!" + echo -e "當前回收站${trash_status}" + echo -e "啟用後rm刪除的文件先進入回收站,防止誤刪重要文件!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站为空" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "回收站為空" echo "------------------------" - echo "1. 启用回收站 2. 关闭回收站" - echo "3. 还原内容 4. 清空回收站" + echo "1. 啟用回收站 2. 關閉回收站" + echo "3. 還原內容 4. 清空回收站" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) @@ -5622,7 +5623,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已启用,删除的文件将移至回收站。" + echo "回收站已啟用,刪除的文件將移至回收站。" sleep 2 ;; 2) @@ -5630,20 +5631,20 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "回收站已关闭,文件将直接删除。" + echo "回收站已關閉,文件將直接刪除。" sleep 2 ;; 3) - read -e -p "输入要还原的文件名: " file_to_restore + 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 已还原到主目录。" + echo "$file_to_restore已還原到主目錄。" else echo "文件不存在。" fi ;; 4) - read -e -p "确认清空回收站?[y/n]: " confirm + read -e -p "確認清空回收站? [y/n]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty echo "回收站已清空。" @@ -5657,23 +5658,23 @@ linux_trash() { } linux_fav() { -send_stats "命令收藏夹" +send_stats "命令收藏夾" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 创建备份 +# 創建備份 create_backup() { - send_stats "创建备份" + send_stats "創建備份" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 提示用户输入备份目录 - echo "创建备份示例:" - echo " - 备份单个目录: /var/www" - echo " - 备份多个目录: /etc /home /var/log" - echo " - 直接回车将使用默认目录 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + # 提示用戶輸入備份目錄 + echo "創建備份示例:" + echo "- 備份單個目錄: /var/www" + echo "- 備份多個目錄: /etc /home /var/log" + echo "- 直接回車將使用默認目錄 (/etc /usr /home)" + read -r -p "請輸入要備份的目錄(多個目錄用空格分隔,直接回車則使用默認目錄):" input - # 如果用户没有输入目录,则使用默认目录 + # 如果用戶沒有輸入目錄,則使用默認目錄 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5681,119 +5682,119 @@ create_backup() { "/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 "您选择的备份目录为:" + # 打印用戶選擇的目錄 + echo "您選擇的備份目錄為:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done - # 创建备份 - echo "正在创建备份 $BACKUP_NAME..." + # 創建備份 + echo "正在創建備份$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # 检查命令是否成功 + # 檢查命令是否成功 if [ $? -eq 0 ]; then - echo "备份创建成功: $BACKUP_DIR/$BACKUP_NAME" + echo "備份創建成功:$BACKUP_DIR/$BACKUP_NAME" else - echo "备份创建失败!" + echo "備份創建失敗!" exit 1 fi } -# 恢复备份 +# 恢復備份 restore_backup() { - send_stats "恢复备份" - # 选择要恢复的备份 - read -e -p "请输入要恢复的备份文件名: " BACKUP_NAME + send_stats "恢復備份" + # 選擇要恢復的備份 + read -e -p "請輸入要恢復的備份文件名:" BACKUP_NAME - # 检查备份文件是否存在 + # 檢查備份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "備份文件不存在!" exit 1 fi - echo "正在恢复备份 $BACKUP_NAME..." + echo "正在恢復備份$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "备份恢复成功!" + echo "備份恢復成功!" else - echo "备份恢复失败!" + echo "備份恢復失敗!" exit 1 fi } -# 列出备份 +# 列出備份 list_backups() { - echo "可用的备份:" + echo "可用的備份:" ls -1 "$BACKUP_DIR" } -# 删除备份 +# 刪除備份 delete_backup() { - send_stats "删除备份" + send_stats "刪除備份" - read -e -p "请输入要删除的备份文件名: " BACKUP_NAME + read -e -p "請輸入要刪除的備份文件名:" BACKUP_NAME - # 检查备份文件是否存在 + # 檢查備份文件是否存在 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "备份文件不存在!" + echo "備份文件不存在!" exit 1 fi - # 删除备份 + # 刪除備份 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "备份删除成功!" + echo "備份刪除成功!" else - echo "备份删除失败!" + echo "備份刪除失敗!" exit 1 fi } -# 备份主菜单 +# 備份主菜單 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" while true; do clear - send_stats "系统备份功能" - echo "系统备份功能" + send_stats "系統備份功能" + echo "系統備份功能" echo "------------------------" list_backups echo "------------------------" - echo "1. 创建备份 2. 恢复备份 3. 删除备份" + echo "1. 創建備份 2. 恢復備份 3. 刪除備份" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "按回車鍵繼續..." done } @@ -5805,56 +5806,56 @@ linux_backup() { -# 显示连接列表 +# 顯示連接列表 list_connections() { - echo "已保存的连接:" + 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 " - 用户名: root" - echo " - 端口: 22" + send_stats "添加新連接" + echo "創建新連接示例:" + echo "- 連接名稱: my_server" + echo "- IP地址: 192.168.1.100" + echo "- 用戶名: root" + echo "- 端口: 22" echo "------------------------" - read -e -p "请输入连接名称: " name - read -e -p "请输入IP地址: " ip - read -e -p "请输入用户名 (默认: root): " user + read -e -p "請輸入連接名稱:" name + read -e -p "請輸入IP地址:" ip + read -e -p "請輸入用戶名 (默認: root):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "请输入端口号 (默认: 22): " port + read -e -p "請輸入端口號 (默認: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "请选择身份验证方式:" - echo "1. 密码" - echo "2. 密钥" - read -e -p "请输入选择 (1/2): " auth_choice + echo "請選擇身份驗證方式:" + echo "1. 密碼" + echo "2. 密鑰" + read -e -p "請輸入選擇 (1/2):" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "請輸入密碼:" password_or_key echo # 换行 ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + 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" @@ -5863,89 +5864,89 @@ add_connection() { fi ;; *) - echo "无效的选择!" + echo "無效的選擇!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "连接已保存!" + echo "連接已保存!" } -# 删除连接 +# 刪除連接 delete_connection() { - send_stats "删除连接" - read -e -p "请输入要删除的连接编号: " num + send_stats "刪除連接" + read -e -p "請輸入要刪除的連接編號:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + 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 "连接已删除!" + echo "連接已刪除!" } -# 使用连接 +# 使用連接 use_connection() { - send_stats "使用连接" - read -e -p "请输入要使用的连接编号: " num + send_stats "使用連接" + read -e -p "請輸入要使用的連接編號:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "错误:未找到对应的连接。" + echo "錯誤:未找到對應的連接。" return fi IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "正在连接到 $name ($ip)..." + 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. 目标服务器是否允许使用密钥登录。" + 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 "錯誤:未安裝 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 服务是否正常运行。" + echo "連接失敗!請檢查以下內容:" + echo "1. 用戶名和密碼是否正確。" + echo "2. 目標服務器是否允許密碼登錄。" + echo "3. 目標服務器的 SSH 服務是否正常運行。" fi fi } ssh_manager() { - send_stats "ssh远程连接工具" + send_stats "ssh遠程連接工具" CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 检查配置文件和密钥目录是否存在,如果不存在则创建 + # 檢查配置文件和密鑰目錄是否存在,如果不存在則創建 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5957,21 +5958,21 @@ ssh_manager() { while true; do clear - echo "SSH 远程连接工具" - echo "可以通过SSH连接到其他Linux系统上" + echo "SSH 遠程連接工具" + echo "可以通過SSH連接到其他Linux系統上" echo "------------------------" list_connections - echo "1. 创建新连接 2. 使用连接 3. 删除连接" + echo "1. 創建新連接 2. 使用連接 3. 刪除連接" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無效的選擇,請重試。" ;; esac done } @@ -5987,156 +5988,156 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 列出可用的硬盤分區 list_partitions() { - echo "可用的硬盘分区:" + echo "可用的硬盤分區:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 挂载分区 +# 掛載分區 mount_partition() { - send_stats "挂载分区" - read -e -p "请输入要挂载的分区名称(例如 sda1): " PARTITION + send_stats "掛載分區" + read -e -p "請輸入要掛載的分區名稱(例如 sda1):" PARTITION - # 检查分区是否存在 + # 檢查分區是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "分區不存在!" return fi - # 检查分区是否已经挂载 + # 檢查分區是否已經掛載 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载!" + echo "分區已經掛載!" return fi - # 创建挂载点 + # 創建掛載點 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 挂载分区 + # 掛載分區 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分区挂载成功: $MOUNT_POINT" + echo "分區掛載成功:$MOUNT_POINT" else - echo "分区挂载失败!" + echo "分區掛載失敗!" rmdir "$MOUNT_POINT" fi } -# 卸载分区 +# 卸載分區 unmount_partition() { - send_stats "卸载分区" - read -e -p "请输入要卸载的分区名称(例如 sda1): " PARTITION + send_stats "卸載分區" + read -e -p "請輸入要卸載的分區名稱(例如 sda1):" PARTITION - # 检查分区是否已经挂载 + # 檢查分區是否已經掛載 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "分区未挂载!" + echo "分區未掛載!" return fi - # 卸载分区 + # 卸載分區 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区卸载成功: $MOUNT_POINT" + echo "分區卸載成功:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "分区卸载失败!" + echo "分區卸載失敗!" fi } -# 列出已挂载的分区 +# 列出已掛載的分區 list_mounted_partitions() { - echo "已挂载的分区:" + echo "已掛載的分區:" df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# 格式化分區 format_partition() { - send_stats "格式化分区" - read -e -p "请输入要格式化的分区名称(例如 sda1): " PARTITION + send_stats "格式化分區" + read -e -p "請輸入要格式化的分區名稱(例如 sda1):" PARTITION - # 检查分区是否存在 + # 檢查分區是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "分區不存在!" return fi - # 检查分区是否已经挂载 + # 檢查分區是否已經掛載 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "分區已經掛載,請先卸載!" return fi - # 选择文件系统类型 - echo "请选择文件系统类型:" + # 選擇文件系統類型 + echo "請選擇文件系統類型:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "请输入你的选择: " FS_CHOICE + 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 ;; + *) echo "無效的選擇!"; return ;; esac - # 确认格式化 - read -e -p "确认格式化分区 /dev/$PARTITION 为 $FS_TYPE 吗?(y/n): " CONFIRM + # 確認格式化 + read -e -p "確認格式化分區 /dev/$PARTITION為$FS_TYPE嗎? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then echo "操作已取消。" return fi - # 格式化分区 - echo "正在格式化分区 /dev/$PARTITION 为 $FS_TYPE ..." + # 格式化分區 + echo "正在格式化分區 /dev/$PARTITION為$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分区格式化成功!" + echo "分區格式化成功!" else - echo "分区格式化失败!" + echo "分區格式化失敗!" fi } -# 检查分区状态 +# 檢查分區狀態 check_partition() { - send_stats "检查分区状态" - read -e -p "请输入要检查的分区名称(例如 sda1): " PARTITION + send_stats "檢查分區狀態" + read -e -p "請輸入要檢查的分區名稱(例如 sda1):" PARTITION - # 检查分区是否存在 + # 檢查分區是否存在 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "分区不存在!" + echo "分區不存在!" return fi - # 检查分区状态 - echo "检查分区 /dev/$PARTITION 的状态:" + # 檢查分區狀態 + echo "檢查分區 /dev/$PARTITION的狀態:" fsck "/dev/$PARTITION" } -# 主菜单 +# 主菜單 disk_manager() { - send_stats "硬盘管理功能" + send_stats "硬盤管理功能" while true; do clear - echo "硬盘分区管理" - echo -e "${gl_huang}该功能内部测试阶段,请勿在生产环境使用。${gl_bai}" + echo "硬盤分區管理" + echo -e "${gl_huang}該功能內部測試階段,請勿在生產環境使用。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 挂载分区 2. 卸载分区 3. 查看已挂载分区" - echo "4. 格式化分区 5. 检查分区状态" + echo "1. 掛載分區 2. 卸載分區 3. 查看已掛載分區" + echo "4. 格式化分區 5. 檢查分區狀態" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6145,64 +6146,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回车键继续..." + read -e -p "按回車鍵繼續..." done } -# 显示任务列表 +# 顯示任務列表 list_tasks() { - echo "已保存的同步任务:" + 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 " - 远程目录: /backup/www" - echo " - 端口号 (默认 22)" + send_stats "添加新同步任務" + echo "創建新同步任務示例:" + echo "- 任務名稱: backup_www" + echo "- 本地目錄: /var/www" + echo "- 遠程地址: user@192.168.1.100" + echo "- 遠程目錄: /backup/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 + 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 + echo "請選擇身份驗證方式:" + echo "1. 密碼" + echo "2. 密鑰" + read -e -p "請選擇 (1/2):" auth_choice case $auth_choice in 1) - read -s -p "请输入密码: " password_or_key + read -s -p "請輸入密碼:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "请粘贴密钥内容 (粘贴完成后按两次回车):" + 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" @@ -6210,63 +6211,63 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "無效的密鑰內容!" return fi ;; *) - echo "无效的选择!" + echo "無效的選擇!" return ;; esac - echo "请选择同步模式:" - echo "1. 标准模式 (-avz)" - echo "2. 删除目标文件 (-avz --delete)" - read -e -p "请选择 (1/2): " mode + 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" ;; + *) 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 "任务已保存!" + echo "任務已保存!" } -# 删除任务 +# 刪除任務 delete_task() { - send_stats "删除同步任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "刪除同步任務" + read -e -p "請輸入要刪除的任務編號:" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误:未找到对应的任务。" + 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 "任务已删除!" + echo "任務已刪除!" } run_task() { - send_stats "执行同步任务" + send_stats "執行同步任務" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 解析参数 + # 解析參數 local direction="push" # 默认是推送到远端 local num @@ -6277,51 +6278,51 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # 如果沒有傳入任務編號,提示用戶輸入 if [[ -z "$num" ]]; then - read -e -p "请输入要执行的任务编号: " num + read -e -p "請輸入要執行的任務編號:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "错误: 未找到该任务!" + 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" + echo "正在拉取同步到本地:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "正在推送同步到远端: $local_path -> $remote:$remote_path" + echo "正在推送同步到遠端:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # 添加 SSH 连接通用参数 + # 添加 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 "錯誤:未安裝 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" + echo "錯誤:密鑰文件不存在:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:密钥文件权限不正确,正在修复..." + echo "警告:密鑰文件權限不正確,正在修復..." chmod 600 "$password_or_key" fi @@ -6331,30 +6332,30 @@ run_task() { if [[ $? -eq 0 ]]; then echo "同步完成!" else - echo "同步失败! 请检查以下内容:" - echo "1. 网络连接是否正常" - echo "2. 远程主机是否可访问" - echo "3. 认证信息是否正确" - echo "4. 本地和远程目录是否有正确的访问权限" + echo "同步失敗! 請檢查以下內容:" + echo "1. 網絡連接是否正常" + echo "2. 遠程主機是否可訪問" + echo "3. 認證信息是否正確" + echo "4. 本地和遠程目錄是否有正確的訪問權限" fi } -# 创建定时任务 +# 創建定時任務 schedule_task() { - send_stats "添加同步定时任务" + send_stats "添加同步定時任務" - read -e -p "请输入要定时同步的任务编号: " num + read -e -p "請輸入要定時同步的任務編號:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "錯誤: 請輸入有效的任務編號!" return fi - echo "请选择定时执行间隔:" - echo "1) 每小时执行一次" - echo "2) 每天执行一次" - echo "3) 每周执行一次" - read -e -p "请输入选项 (1/2/3): " interval + 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="" @@ -6362,66 +6363,66 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "错误: 请输入有效的选项!" ; return ;; + *) 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 "错误: 该任务的定时同步已存在!" + echo "錯誤: 該任務的定時同步已存在!" return fi - # 创建到用户的 crontab + # 創建到用戶的 crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "定时任务已创建: $cron_job" + echo "定時任務已創建:$cron_job" } -# 查看定时任务 +# 查看定時任務 view_tasks() { - echo "当前的定时任务:" + echo "當前的定時任務:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# 删除定时任务 +# 刪除定時任務 delete_task_schedule() { - send_stats "删除同步定时任务" - read -e -p "请输入要删除的任务编号: " num + send_stats "刪除同步定時任務" + read -e -p "請輸入要刪除的任務編號:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "错误: 请输入有效的任务编号!" + echo "錯誤: 請輸入有效的任務編號!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "已删除任务编号 $num 的定时任务" + echo "已刪除任務編號$num的定時任務" } -# 任务管理主菜单 +# 任務管理主菜單 rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" while true; do clear - echo "Rsync 远程同步工具" - echo "远程目录之间同步,支持增量同步,高效稳定。" + echo "Rsync 遠程同步工具" + echo "遠程目錄之間同步,支持增量同步,高效穩定。" echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 创建新任务 2. 删除任务" - echo "3. 执行本地同步到远端 4. 执行远端同步到本地" - echo "5. 创建定时任务 6. 删除定时任务" + echo "1. 創建新任務 2. 刪除任務" + echo "3. 執行本地同步到遠端 4. 執行遠端同步到本地" + echo "5. 創建定時任務 6. 刪除定時任務" echo "---------------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "---------------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6430,9 +6431,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "無效的選擇,請重試。" ;; esac - read -e -p "按回车键继续..." + read -e -p "按回車鍵繼續..." done } @@ -6447,7 +6448,7 @@ rsync_manager() { linux_ps() { clear - send_stats "系统信息查询" + send_stats "系統信息查詢" ip_address @@ -6497,41 +6498,41 @@ linux_ps() { echo "" - echo -e "系统信息查询" + 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}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主機名:${gl_bai}$hostname" + echo -e "${gl_kjlan}系統版本:${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本:${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}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}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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}總接收:${gl_bai}$rx" + echo -e "${gl_kjlan}總發送:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}網絡算法:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}運營商:${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}運行時長:${gl_bai}$runtime" echo @@ -6544,111 +6545,111 @@ linux_tools() { while true; do clear - # send_stats "基础工具" - echo -e "基础工具" + # send_stats "基礎工具" + echo -e "基礎工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}curl 下载工具 ${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下载工具 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo 超级管理权限工具 ${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}unzip ZIP压缩解压工具 ${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}1. ${gl_bai}curl 下載工具${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget 下載工具${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}sudo 超級管理權限工具${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}unzip ZIP壓縮解壓工具${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}ranger 文件管理工具" - 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + echo -e "${gl_kjlan}11. ${gl_bai}btop 現代化監控工具${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" + 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}nano 文本編輯器${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}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}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}41. ${gl_bai}安裝指定工具${gl_kjlan}42. ${gl_bai}卸載指定工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) clear install curl clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" curl --help - send_stats "安装curl" + send_stats "安裝curl" ;; 2) clear install wget clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" wget --help - send_stats "安装wget" + send_stats "安裝wget" ;; 3) clear install sudo clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" sudo --help - send_stats "安装sudo" + send_stats "安裝sudo" ;; 4) clear install socat clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" socat -h - send_stats "安装socat" + send_stats "安裝socat" ;; 5) clear install htop clear htop - send_stats "安装htop" + send_stats "安裝htop" ;; 6) clear install iftop clear iftop - send_stats "安装iftop" + send_stats "安裝iftop" ;; 7) clear install unzip clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" unzip - send_stats "安装unzip" + send_stats "安裝unzip" ;; 8) clear install tar clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" tar --help - send_stats "安装tar" + send_stats "安裝tar" ;; 9) clear install tmux clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" tmux --help - send_stats "安装tmux" + send_stats "安裝tmux" ;; 10) clear install ffmpeg clear - echo "工具已安装,使用方法如下:" + echo "工具已安裝,使用方法如下:" ffmpeg --help - send_stats "安装ffmpeg" + send_stats "安裝ffmpeg" ;; 11) @@ -6656,7 +6657,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "安裝btop" ;; 12) clear @@ -6665,7 +6666,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "安裝ranger" ;; 13) clear @@ -6674,7 +6675,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "安装ncdu" + send_stats "安裝ncdu" ;; 14) clear @@ -6683,7 +6684,7 @@ linux_tools() { clear fzf cd ~ - send_stats "安装fzf" + send_stats "安裝fzf" ;; 15) clear @@ -6692,7 +6693,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "安装vim" + send_stats "安裝vim" ;; 16) clear @@ -6701,7 +6702,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "安裝nano" ;; @@ -6712,7 +6713,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "安裝git" ;; 21) @@ -6720,67 +6721,67 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "安裝cmatrix" ;; 22) clear install sl clear sl - send_stats "安装sl" + send_stats "安裝sl" ;; 26) clear install bastet clear bastet - send_stats "安装bastet" + send_stats "安裝bastet" ;; 27) clear install nsnake clear nsnake - send_stats "安装nsnake" + send_stats "安裝nsnake" ;; 28) clear install ninvaders clear ninvaders - send_stats "安装ninvaders" + send_stats "安裝ninvaders" ;; 31) clear - send_stats "全部安装" + 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 "全部安装(不含游戏和屏保)" + send_stats "全部安裝(不含遊戲和屏保)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "全部卸载" + 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 + read -e -p "請輸入安裝的工具名(wget curl sudo htop):" installname install $installname - send_stats "安装指定软件" + send_stats "安裝指定軟件" ;; 42) clear - read -e -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename + read -e -p "請輸入卸載的工具名(htop ufw tmux cmatrix):" removename remove $removename - send_stats "卸载指定软件" + send_stats "卸載指定軟件" ;; 0) @@ -6788,7 +6789,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -6808,21 +6809,21 @@ linux_bbr() { 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 "當前TCP阻塞算法:$congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" - echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)" + echo "1. 開啟BBRv3 2. 關閉BBRv3(會重啟)" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) bbr_on - send_stats "alpine开启bbr3" + send_stats "alpine開啟bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6867,21 +6868,21 @@ docker_ssh_migration() { } list_backups() { - echo -e "${BLUE}当前备份列表:${NC}" - ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" + echo -e "${BLUE}當前備份列表:${NC}" + ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "無備份" } # ---------------------------- - # 备份 + # 備份 # ---------------------------- backup_docker() { - send_stats "Docker备份" + send_stats "Docker備份" - echo -e "${YELLOW}正在备份 Docker 容器...${NC}" + echo -e "${YELLOW}正在備份 Docker 容器...${NC}" docker ps --format '{{.Names}}' - read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + read -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers install tar jq gzip install_docker @@ -6892,7 +6893,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}没有找到容器${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}沒有找到容器${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6900,28 +6901,28 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 自动生成的还原脚本" >> "$RESTORE_SCRIPT" + echo "# 自動生成的還原腳本" >> "$RESTORE_SCRIPT" - # 记录已打包过的 Compose 项目路径,避免重复打包 + # 記錄已打包過的 Compose 項目路徑,避免重複打包 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}备份容器: $c${NC}" + echo -e "${GREEN}備份容器:$c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}检测到 $c 是 docker-compose 容器${NC}" + echo -e "${BLUE}檢測到$c是 docker-compose 容器${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未检测到 compose 目录,请手动输入路径: " project_dir + read -p "未檢測到 compose 目錄,請手動輸入路徑:" project_dir fi - # 如果该 Compose 项目已经打包过,跳过 + # 如果該 Compose 項目已經打包過,跳過 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}Compose 項目 [$project_name] 已備份過,跳過重複打包...${NC}" continue fi @@ -6929,19 +6930,19 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose 恢复: $project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 恢復:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose 项目 [$project_name] 已打包: ${project_dir}${NC}" + echo -e "${GREEN}Compose 項目 [$project_name] 已打包:${project_dir}${NC}" else - echo -e "${RED}未找到 docker-compose.yml,跳过此容器...${NC}" + echo -e "${RED}未找到 docker-compose.yml,跳過此容器...${NC}" fi else - # 普通容器备份卷 + # 普通容器備份卷 local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "打包卷: $path" + echo "打包卷:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done @@ -6950,7 +6951,7 @@ docker_ssh_migration() { mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # 环境变量 + # 環境變量 local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done @@ -6959,91 +6960,91 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # 镜像 + # 鏡像 local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\n# 还原容器: $c" >> "$RESTORE_SCRIPT" + echo -e "\n# 還原容器:$c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # 备份 /home/docker 下的所有文件(不含子目录) + # 備份 /home/docker 下的所有文件(不含子目錄) if [ -d "/home/docker" ]; then - echo -e "${BLUE}备份 /home/docker 下的文件...${NC}" + echo -e "${BLUE}備份 /home/docker 下的文件...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}/home/docker 下的文件已打包到: ${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}/home/docker 下的文件已打包到:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}备份完成: ${BACKUP_DIR}${NC}" - echo -e "${GREEN}可用还原脚本: ${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}備份完成:${BACKUP_DIR}${NC}" + echo -e "${GREEN}可用還原腳本:${RESTORE_SCRIPT}${NC}" } # ---------------------------- - # 还原 + # 還原 # ---------------------------- restore_docker() { - send_stats "Docker还原" - read -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker還原" + read -p "請輸入要還原的備份目錄:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } - echo -e "${BLUE}开始执行还原操作...${NC}" + echo -e "${BLUE}開始執行還原操作...${NC}" install tar jq gzip install_docker - # --------- 优先还原 Compose 项目 --------- + # --------- 優先還原 Compose 項目 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + [[ -z "$original_path" ]] && read -p "未找到原始路徑,請輸入還原目錄路徑:" original_path - # 检查该 compose 项目的容器是否已经在运行 + # 檢查該 compose 項目的容器是否已經在運行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已有容器在运行,跳过还原...${NC}" + echo -e "${YELLOW}Compose 項目 [$project_name] 已有容器在運行,跳過還原...${NC}" continue fi - read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + read -p "確認還原 Compose 項目 [$project_name] 到路徑 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -p "請輸入新的還原路徑:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose 项目 [$project_name] 已解压到: $original_path${NC}" + echo -e "${GREEN}Compose 項目 [$project_name] 已解壓到:$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose 项目 [$project_name] 还原完成!${NC}" + echo -e "${GREEN}Compose 項目 [$project_name] 還原完成!${NC}" fi done - # --------- 继续还原普通容器 --------- - echo -e "${BLUE}检查并还原普通 Docker 容器...${NC}" + # --------- 繼續還原普通容器 --------- + echo -e "${BLUE}檢查並還原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}处理容器: $container${NC}" + echo -e "${GREEN}處理容器:$container${NC}" - # 检查容器是否已经存在且正在运行 + # 檢查容器是否已經存在且正在運行 if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 已在运行,跳过还原...${NC}" + echo -e "${YELLOW}容器 [$container] 已在運行,跳過還原...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到鏡像信息,跳過:$container${NC}"; continue; } # 端口映射 PORT_ARGS="" @@ -7052,14 +7053,14 @@ docker_ssh_migration() { [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # 环境变量 + # 環境變量 ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # 卷映射 + 卷数据恢复 + # 卷映射 + 卷數據恢復 VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7070,32 +7071,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "恢复卷数据: $VOL_SRC" + echo "恢復卷數據:$VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 删除已存在但未运行的容器 + # 刪除已存在但未運行的容器 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container] 存在但未运行,删除旧容器...${NC}" + echo -e "${YELLOW}容器 [$container] 存在但未運行,刪除舊容器...${NC}" docker rm -f "$container" fi - # 启动容器 - echo "执行还原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # 啟動容器 + echo "執行還原命令: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的备份信息${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}未找到普通容器的備份信息${NC}" - # 还原 /home/docker 下的文件 + # 還原 /home/docker 下的文件 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}正在还原 /home/docker 下的文件...${NC}" + echo -e "${BLUE}正在還原 /home/docker 下的文件...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" + echo -e "${GREEN}/home/docker 下的文件已還原完成${NC}" else - echo -e "${YELLOW}未找到 /home/docker 下文件的备份,跳过...${NC}" + echo -e "${YELLOW}未找到 /home/docker 下文件的備份,跳過...${NC}" fi @@ -7103,66 +7104,66 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 遷移 # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "Docker遷移" install jq - read -p "请输入要迁移的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + read -p "請輸入要遷移的備份目錄:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } - read -p "目标服务器IP: " TARGET_IP - read -p "目标服务器SSH用户名: " TARGET_USER + read -p "目標服務器IP:" TARGET_IP + read -p "目標服務器SSH用戶名:" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 - echo -e "${YELLOW}传输备份中...${NC}" + echo -e "${YELLOW}傳輸備份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 使用密钥登录 + # 使用密鑰登錄 scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 删除备份 + # 刪除備份 # ---------------------------- delete_backup() { - send_stats "Docker备份文件删除" - read -p "请输入要删除的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker備份文件刪除" + read -p "請輸入要刪除的備份目錄:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" + echo -e "${GREEN}已刪除備份:${BACKUP_DIR}${NC}" } # ---------------------------- - # 主菜单 + # 主菜單 # ---------------------------- main_menu() { - send_stats "Docker备份迁移还原" + send_stats "Docker備份遷移還原" while true; do clear echo "------------------------" - echo -e "Docker备份/迁移/还原工具" + echo -e "Docker備份/遷移/還原工具" echo "------------------------" list_backups echo -e "" echo "------------------------" - echo -e "1. 备份docker项目" - echo -e "2. 迁移docker项目" - echo -e "3. 还原docker项目" - echo -e "4. 删除docker项目的备份文件" + echo -e "1. 備份docker項目" + echo -e "2. 遷移docker項目" + echo -e "3. 還原docker項目" + echo -e "4. 刪除docker項目的備份文件" echo "------------------------" - echo -e "0. 返回上一级菜单" + echo -e "0. 返回上一級菜單" echo "------------------------" - read -p "请选择: " choice + read -p "請選擇:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}無效選項${NC}" ;; esac break_end done @@ -7183,34 +7184,34 @@ linux_docker() { echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}安裝更新Docker環境${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局狀態${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理" - echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理" - echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理" + echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}Docker鏡像管理" + echo -e "${gl_kjlan}5. ${gl_bai}Docker網絡管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker捲管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷" + echo -e "${gl_kjlan}7. ${gl_bai}清理無用的docker容器和鏡像網絡數據卷" 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}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}11. ${gl_bai}開啟Docker-ipv6訪問" + echo -e "${gl_kjlan}12. ${gl_bai}關閉Docker-ipv6訪問" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境" - echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境" + echo -e "${gl_kjlan}19. ${gl_bai}備份/遷移/還原Docker環境" + echo -e "${gl_kjlan}20. ${gl_bai}卸載Docker環境" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) clear - send_stats "安装docker环境" + send_stats "安裝docker環境" install_add_docker ;; @@ -7221,22 +7222,22 @@ linux_docker() { 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 "docker全局状态" + send_stats "docker全局狀態" echo "Docker版本" docker -v docker compose version echo "" - echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} " + echo -e "Docker鏡像:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}" + echo -e "Docker容器:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}" + echo -e "Docker卷:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}" + echo -e "Docker網絡:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7251,8 +7252,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Docker網絡管理" + echo "Docker網絡列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7276,36 +7277,36 @@ linux_docker() { done echo "" - echo "网络操作" + echo "網絡操作" echo "------------------------" - echo "1. 创建网络" - echo "2. 加入网络" - echo "3. 退出网络" - echo "4. 删除网络" + echo "1. 創建網絡" + echo "2. 加入網絡" + echo "3. 退出網絡" + echo "4. 刪除網絡" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - send_stats "创建网络" - read -e -p "设置新网络名: " dockernetwork + send_stats "創建網絡" + read -e -p "設置新網絡名:" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "加入网络" - read -e -p "加入网络名: " dockernetwork - read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames + 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 + send_stats "加入網絡" + read -e -p "退出網絡名:" dockernetwork + read -e -p "那些容器退出該網絡(多個容器名請用空格分隔):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7314,8 +7315,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "刪除網絡" + read -e -p "請輸入要刪除的網絡名:" dockernetwork docker network rm $dockernetwork ;; @@ -7329,29 +7330,29 @@ linux_docker() { 6) while true; do clear - send_stats "Docker卷管理" + send_stats "Docker捲管理" echo "Docker卷列表" docker volume ls echo "" echo "卷操作" echo "------------------------" - echo "1. 创建新卷" - echo "2. 删除指定卷" - echo "3. 删除所有卷" + echo "1. 創建新卷" + echo "2. 刪除指定卷" + echo "3. 刪除所有捲" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) send_stats "新建卷" - read -e -p "设置新卷名: " dockerjuan + read -e -p "設置新卷名:" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans + read -e -p "輸入刪除卷名(多個卷名請用空格分隔):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7360,7 +7361,7 @@ linux_docker() { ;; 3) - send_stats "删除所有卷" + send_stats "刪除所有捲" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7369,7 +7370,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -7391,7 +7392,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -7413,13 +7414,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "Docker v6 開" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "Docker v6 關" docker_ipv6_off ;; @@ -7430,7 +7431,7 @@ linux_docker() { 20) clear - send_stats "Docker卸载" + send_stats "Docker卸載" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7442,7 +7443,7 @@ linux_docker() { [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -7451,7 +7452,7 @@ linux_docker() { kejilion ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -7468,151 +7469,151 @@ linux_test() { while true; do clear - # send_stats "测试脚本合集" - echo -e "测试脚本合集" + # 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}Region 流媒体解锁测试" - echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒体解锁检测" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP质量体检脚本 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}IP及解鎖狀態檢測" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 解鎖狀態檢測" + echo -e "${gl_kjlan}2. ${gl_bai}Region 流媒體解鎖測試" + echo -e "${gl_kjlan}3. ${gl_bai}yeahwu 流媒體解鎖檢測" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP質量體檢腳本${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}网络线路测速" - echo -e "${gl_kjlan}11. ${gl_bai}besttrace 三网回程延迟路由测试" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三网回程线路测试" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三网测速" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程测试脚本" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}11. ${gl_bai}besttrace 三網回程延遲路由測試" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 三網回程線路測試" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 三網測速" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 快速回程測試腳本" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace 指定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}icu/gb5 CPU性能测试脚本" + echo -e "${gl_kjlan}硬件性能測試" + echo -e "${gl_kjlan}21. ${gl_bai}yabs 性能測試" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU性能測試腳本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}综合性测试" - echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" - echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}綜合性測試" + echo -e "${gl_kjlan}31. ${gl_bai}bench 性能測試" + 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}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) clear - send_stats "ChatGPT解锁状态检测" + send_stats "ChatGPT解鎖狀態檢測" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) clear - send_stats "Region流媒体解锁测试" + send_stats "Region流媒體解鎖測試" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "yeahwu流媒体解锁检测" + send_stats "yeahwu流媒體解鎖檢測" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; 4) clear - send_stats "xykt_IP质量体检脚本" + send_stats "xykt_IP質量體檢腳本" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "besttrace三网回程延迟路由测试" + send_stats "besttrace三網回程延遲路由測試" install wget wget -qO- git.io/besttrace | bash ;; 12) clear - send_stats "mtr_trace三网回程线路测试" + send_stats "mtr_trace三網回程線路測試" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed三网测速" + send_stats "Superspeed三網測速" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) clear - send_stats "nxtrace快速回程测试脚本" + send_stats "nxtrace快速回程測試腳本" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "nxtrace指定IP回程测试脚本" - echo "可参考的IP列表" + send_stats "nxtrace指定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 "广州电信: 58.60.188.222" - echo "广州联通: 210.21.196.6" - echo "广州移动: 120.196.165.24" - echo "成都电信: 61.139.2.69" - echo "成都联通: 119.6.6.6" - echo "成都移动: 211.137.96.205" - echo "湖南电信: 36.111.200.100" - echo "湖南联通: 42.48.16.100" - echo "湖南移动: 39.134.254.6" + 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 "廣州電信: 58.60.188.222" + echo "廣州聯通: 210.21.196.6" + echo "廣州移動: 120.196.165.24" + echo "成都電信: 61.139.2.69" + echo "成都聯通: 119.6.6.6" + echo "成都移動: 211.137.96.205" + echo "湖南電信: 36.111.200.100" + echo "湖南聯通: 42.48.16.100" + echo "湖南移動: 39.134.254.6" echo "------------------------" - read -e -p "输入一个指定IP: " testip + read -e -p "輸入一個指定IP:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "ludashi2020三网线路测试" + send_stats "ludashi2020三網線路測試" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "i-abc多功能测速脚本" + send_stats "i-abc多功能測速腳本" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "网络质量测试脚本" + send_stats "網絡質量測試腳本" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "yabs性能测试" + send_stats "yabs性能測試" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "icu/gb5 CPU性能测试脚本" + send_stats "icu/gb5 CPU性能測試腳本" check_swap bash <(curl -sL bash.icu/gb5) ;; 31) clear - send_stats "bench性能测试" + send_stats "bench性能測試" curl -Lso- bench.sh | bash ;; 32) - send_stats "spiritysdx融合怪测评" + 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 ;; @@ -7622,7 +7623,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -7638,51 +7639,51 @@ linux_Oracle() { while true; do clear - send_stats "甲骨文云脚本合集" - echo -e "甲骨文云脚本合集" + send_stats "甲骨文云腳本合集" + echo -e "甲骨文云腳本合集" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}安装闲置机器活跃脚本" - echo -e "${gl_kjlan}2. ${gl_bai}卸载闲置机器活跃脚本" + 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}开启ROOT密码登录模式" - echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢复工具" + echo -e "${gl_kjlan}3. ${gl_bai}DD重裝系統腳本" + echo -e "${gl_kjlan}4. ${gl_bai}R探長開機腳本" + echo -e "${gl_kjlan}5. ${gl_bai}開啟ROOT密碼登錄模式" + echo -e "${gl_kjlan}6. ${gl_bai}IPV6恢復工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) clear - echo "活跃脚本: CPU占用10-20% 内存占用20% " - read -e -p "确定安装吗?(Y/N): " choice + 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 + # 提示用戶輸入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 + 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 + read -e -p "請輸入內存佔用百分比 [默認:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "請輸入Speedtest間隔時間(秒) [默認:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 运行Docker容器 + # 運行Docker容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7690,14 +7691,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安装活跃脚本" + send_stats "甲骨文云安裝活躍腳本" ;; [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -7705,20 +7706,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸载活跃脚本" + send_stats "甲骨文云卸載活躍腳本" ;; 3) clear - echo "重装系统" + echo "重裝系統" echo "--------------------------------" - echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - read -e -p "确定继续吗?(Y/N): " choice + 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 + read -e -p "請選擇要重裝的系統: 1. Debian12 | 2. Ubuntu20.04 :" sys_choice case "$sys_choice" in 1) @@ -7730,28 +7731,28 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "无效的选择,请重新输入。" + echo "無效的選擇,請重新輸入。" ;; esac done - read -e -p "请输入你重装后的密码: " vpspasswd + 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 "甲骨文云重装系统脚本" + send_stats "甲骨文云重裝系統腳本" ;; [Nn]) echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; 4) clear - echo "该功能处于开发阶段,敬请期待!" + echo "該功能處於開發階段,敬請期待!" ;; 5) clear @@ -7761,15 +7762,15 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "該功能由jhb大神提供,感謝他!" + send_stats "ipv6修復" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -7790,7 +7791,7 @@ docker_tato() { 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}" + 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 } @@ -7811,7 +7812,7 @@ 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" + echo -e "${gl_lv}環境已安裝${gl_bai}站點:$output資料庫:$db_output" fi fi @@ -7843,27 +7844,27 @@ linux_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}安装WordPress ${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}安装Discuz论坛 ${gl_huang}4. ${gl_bai}安装可道云桌面" - echo -e "${gl_huang}5. ${gl_bai}安装苹果CMS影视站 ${gl_huang}6. ${gl_bai}安装独角数发卡网" - echo -e "${gl_huang}7. ${gl_bai}安装flarum论坛网站 ${gl_huang}8. ${gl_bai}安装typecho轻量博客网站" - echo -e "${gl_huang}9. ${gl_bai}安装LinkStack共享链接平台 ${gl_huang}20. ${gl_bai}自定义动态站点" + echo -e "${gl_huang}1. ${gl_bai}安裝LDNMP環境${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}安裝WordPress${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}安裝Discuz論壇${gl_huang}4. ${gl_bai}安裝可道云桌面" + echo -e "${gl_huang}5. ${gl_bai}安裝蘋果CMS影視站${gl_huang}6. ${gl_bai}安裝獨角數發卡網" + echo -e "${gl_huang}7. ${gl_bai}安裝flarum論壇網站${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}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" - echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" - echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}21. ${gl_bai}僅安裝nginx${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}站點重定向" + echo -e "${gl_huang}23. ${gl_bai}站點反向代理-IP+端口${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站點反向代理-域名" + echo -e "${gl_huang}25. ${gl_bai}安裝Bitwarden密碼管理平台${gl_huang}26. ${gl_bai}安裝Halo博客網站" + echo -e "${gl_huang}27. ${gl_bai}安裝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}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}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}0. ${gl_bai}返回主菜單" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in @@ -7877,10 +7878,10 @@ linux_ldnmp() { 3) clear - # Discuz论坛 + # Discuz論壇 webname="Discuz论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7903,11 +7904,11 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: discuz_" + echo "數據庫地址: mysql" + echo "數據庫名:$dbname" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" + echo "表前綴: discuz_" ;; @@ -7916,8 +7917,8 @@ linux_ldnmp() { clear # 可道云桌面 webname="可道云桌面" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7939,20 +7940,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" - echo "redis主机: redis" + echo "數據庫地址: mysql" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" + echo "數據庫名:$dbname" + echo "redis主機: redis" ;; 5) clear - # 苹果CMS + # 蘋果CMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7978,24 +7979,24 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库前缀: mac_" + echo "數據庫地址: mysql" + echo "數據庫端口: 3306" + echo "數據庫名:$dbname" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" + echo "數據庫前綴: mac_" echo "------------------------" - echo "安装成功后登录后台地址" + echo "安裝成功後登錄後台地址" echo "https://$yuming/vip.php" ;; 6) clear - # 独脚数卡 + # 獨腳數卡 webname="独脚数卡" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8016,34 +8017,34 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "數據庫地址: mysql" + echo "數據庫端口: 3306" + echo "數據庫名:$dbname" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" echo "" echo "redis地址: redis" - echo "redis密码: 默认不填写" + echo "redis密碼: 默認不填寫" echo "redis端口: 6379" echo "" - echo "网站url: https://$yuming" - echo "后台登录路径: /admin" + echo "網站url: https://$yuming" + echo "後台登錄路徑: /admin" echo "------------------------" - echo "用户名: admin" - echo "密码: admin" + echo "用戶名: admin" + echo "密碼: admin" echo "------------------------" - echo "登录时右上角如果出现红色error0请使用如下命令: " - echo "我也很气愤独角数卡为啥这么麻烦,会有这样的问题!" + echo "登錄時右上角如果出現紅色error0請使用如下命令:" + echo "我也很氣憤獨角數卡為啥這麼麻煩,會有這樣的問題!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # flarum论坛 + # flarum論壇 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8080,12 +8081,12 @@ linux_ldnmp() { ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: flarum_" - echo "管理员信息自行设置" + echo "數據庫地址: mysql" + echo "數據庫名:$dbname" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" + echo "表前綴: flarum_" + echo "管理員信息自行設置" ;; @@ -8093,8 +8094,8 @@ linux_ldnmp() { clear # typecho webname="typecho" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8118,11 +8119,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" - echo "数据库地址: mysql" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "数据库名: $dbname" + echo "數據庫前綴: typecho_" + echo "數據庫地址: mysql" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" + echo "數據庫名:$dbname" ;; @@ -8131,8 +8132,8 @@ linux_ldnmp() { clear # LinkStack webname="LinkStack" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8157,18 +8158,18 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库地址: mysql" - echo "数据库端口: 3306" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" + echo "數據庫地址: mysql" + echo "數據庫端口: 3306" + echo "數據庫名:$dbname" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" ;; 20) clear webname="PHP动态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8185,10 +8186,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] 上传PHP源码" + echo -e "[${gl_huang}1/6${gl_bai}] 上傳PHP源碼" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "目前只允許上傳zip格式的源碼包,請將源碼包放到/home/web/html/${yuming}目錄下" + read -e -p "也可以輸入下載鏈接,遠程下載源碼包,直接回車將跳過遠程下載:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8198,20 +8199,20 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php所在路径" + 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 + 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 -e "[${gl_huang}3/6${gl_bai}] 請選擇PHP版本" echo "-------------" - read -e -p "1. php最新版 | 2. php7.4 : " pho_v + 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 @@ -8222,15 +8223,15 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "无效的选择,请重新输入。" + echo "無效的選擇,請重新輸入。" ;; esac clear - echo -e "[${gl_huang}4/6${gl_bai}] 安装指定扩展" + echo -e "[${gl_huang}4/6${gl_bai}] 安裝指定擴展" echo "-------------" - echo "已经安装的扩展" + echo "已經安裝的擴展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8240,25 +8241,25 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}] 编辑站点配置" + echo -e "[${gl_huang}5/6${gl_bai}] 編輯站點配置" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] 數據庫管理" echo "-------------" - read -e -p "1. 我搭建新站 2. 我搭建老站有数据库备份: " use_db + read -e -p "1. 我搭建新站 2. 我搭建老站有數據庫備份:" use_db case $use_db in 1) echo ;; 2) - echo "数据库备份必须是.gz结尾的压缩包。请放到/home/目录下,支持宝塔/1panel备份数据导入。" - read -e -p "也可以输入下载链接,远程下载备份数据,直接回车将跳过远程下载: " url_download_db + echo "數據庫備份必須是.gz結尾的壓縮包。請放到/home/目錄下,支持寶塔/1panel備份數據導入。" + read -e -p "也可以輸入下載鏈接,遠程下載備份數據,直接回車將跳過遠程下載:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8268,10 +8269,10 @@ linux_ldnmp() { 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 "数据库导入的表数据" + echo "數據庫導入的表數據" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "数据库导入完成" + echo "數據庫導入完成" ;; *) echo @@ -8283,12 +8284,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "数据库地址: mysql" - echo "数据库名: $dbname" - echo "用户名: $dbuse" - echo "密码: $dbusepasswd" - echo "表前缀: $prefix" - echo "管理员登录信息自行设置" + echo "數據庫地址: mysql" + echo "數據庫名:$dbname" + echo "使用者名稱:$dbuse" + echo "密碼:$dbusepasswd" + echo "表前綴:$prefix" + echo "管理員登錄信息自行設置" ;; @@ -8301,10 +8302,10 @@ linux_ldnmp() { 22) clear webname="站点重定向" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming - read -e -p "请输入跳转域名: " reverseproxy + read -e -p "請輸入跳轉域名:" reverseproxy nginx_install_status install_ssltls certs_status @@ -8326,7 +8327,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "已阻止IP+端口訪問該服務" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8337,11 +8338,11 @@ linux_ldnmp() { 24) clear webname="反向代理-域名" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming - echo -e "域名格式: ${gl_huang}google.com${gl_bai}" - read -e -p "请输入你的反代域名: " fandai_yuming + echo -e "域名格式:${gl_huang}google.com${gl_bai}" + read -e -p "請輸入你的反代域名:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8361,8 +8362,8 @@ linux_ldnmp() { 25) clear webname="Bitwarden" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming nginx_install_status install_ssltls @@ -8384,8 +8385,8 @@ linux_ldnmp() { 26) clear webname="halo" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming nginx_install_status install_ssltls @@ -8402,8 +8403,8 @@ linux_ldnmp() { 27) clear webname="AI绘画提示词生成器" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming nginx_install_status install_ssltls @@ -8436,8 +8437,8 @@ linux_ldnmp() { 30) clear webname="静态站点" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "安裝$webname" + echo "開始部署$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8454,10 +8455,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 上传静态源码" + echo -e "[${gl_huang}1/2${gl_bai}] 上傳靜態源碼" echo "-------------" - echo "目前只允许上传zip格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" - read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "目前只允許上傳zip格式的源碼包,請將源碼包放到/home/web/html/${yuming}目錄下" + read -e -p "也可以輸入下載鏈接,遠程下載源碼包,直接回車將跳過遠程下載:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8467,12 +8468,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html所在路径" + 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 + 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 @@ -8497,21 +8498,21 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP環境備份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在備份$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do clear - echo "备份文件已创建: /home/$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "備份文件已創建: /home/$backup_filename" + read -e -p "要傳送備份數據到遠程服務器嗎? (Y/N):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "請輸入遠端服務器IP:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "錯誤: 請輸入遠端服務器IP。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8519,9 +8520,9 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "文件已传送至远程服务器home目录。" + echo "文件已傳送至遠程服務器home目錄。" else - echo "未找到要传送的文件。" + echo "未找到要傳送的文件。" fi break ;; @@ -8529,7 +8530,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac done @@ -8537,9 +8538,9 @@ linux_ldnmp() { 33) clear - send_stats "定时远程备份" - read -e -p "输入远程服务器IP: " useip - read -e -p "输入远程服务器密码: " usepasswd + 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 @@ -8549,18 +8550,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 每周备份 2. 每天备份" - read -e -p "请输入你的选择: " dingshi + echo "1. 每周備份 2. 每天備份" + read -e -p "請輸入你的選擇:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "选择每周备份的星期几 (0-6,0代表星期日): " weekday + 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 + read -e -p "選擇每天備份的時間(小時,0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8574,19 +8575,19 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP环境还原" - echo "可用的站点备份" + send_stats "LDNMP環境還原" + echo "可用的站點備份" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + 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 @@ -8596,7 +8597,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}正在解壓$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8605,7 +8606,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "没有找到压缩包。" + echo "沒有找到壓縮包。" fi ;; @@ -8623,11 +8624,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "更新LDNMP环境" - echo "更新LDNMP环境" + send_stats "更新LDNMP環境" + echo "更新LDNMP環境" echo "------------------------" ldnmp_v - echo "发现新版本的组件" + echo "發現新版本的組件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8649,11 +8650,11 @@ linux_ldnmp() { echo echo "1. 更新nginx 2. 更新mysql 3. 更新php 4. 更新redis" echo "------------------------" - echo "5. 更新完整环境" + echo "5. 更新完整環境" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8662,7 +8663,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "请输入${ldnmp_pods}版本号 (如: 8.0 8.3 8.4 9.0)(回车获取最新版): " version + read -e -p "請輸入${ldnmp_pods}版本號 (如: 8.0 8.3 8.4 9.0)(回車獲取最新版):" version local version=${version:-latest} cd /home/web/ @@ -8679,7 +8680,7 @@ linux_ldnmp() { ;; 3) local ldnmp_pods="php" - read -e -p "请输入${ldnmp_pods}版本号 (如: 7.4 8.0 8.1 8.2 8.3)(回车获取最新版): " version + 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 @@ -8732,7 +8733,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "完整更新LDNMP环境" + send_stats "完整更新LDNMP環境" cd /home/web/ docker compose down --rmi all @@ -8758,7 +8759,7 @@ linux_ldnmp() { 38) root_use - send_stats "卸载LDNMP环境" + send_stats "卸載LDNMP環境" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8772,7 +8773,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -8782,7 +8783,7 @@ linux_ldnmp() { ;; *) - echo "无效的输入!" + echo "無效的輸入!" esac break_end @@ -8802,12 +8803,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "应用市场" + echo -e "應用市場" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 用循环设置颜色 + # 用循環設置顏色 for i in {1..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8816,70 +8817,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}宝塔面板官方版 ${gl_kjlan}2. ${color2}aaPanel宝塔国际版" - echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板 ${gl_kjlan}4. ${color4}NginxProxyManager可视化面板" - echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" - echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" - echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" + echo -e "${gl_kjlan}1. ${color1}寶塔面板官方版${gl_kjlan}2. ${color2}aaPanel寶塔國際版" + echo -e "${gl_kjlan}3. ${color3}1Panel新一代管理面板${gl_kjlan}4. ${color4}NginxProxyManager可視化面板" + echo -e "${gl_kjlan}5. ${color5}OpenList多存儲文件列表程序${gl_kjlan}6. ${color6}Ubuntu遠程桌面網頁版" + echo -e "${gl_kjlan}7. ${color7}哪吒探針VPS監控面板${gl_kjlan}8. ${color8}QB離線BT磁力下載面板" + echo -e "${gl_kjlan}9. ${color9}Poste.io郵件服務器程序${gl_kjlan}10. ${color10}RocketChat多人在線聊天系統" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" - echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" - echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" - echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}11. ${color11}禪道項目管理軟件${gl_kjlan}12. ${color12}青龍面板定時任務管理平台" + echo -e "${gl_kjlan}13. ${color13}Cloudreve網盤${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}簡單圖床圖片管理程序" + echo -e "${gl_kjlan}15. ${color15}emby多媒體管理系統${gl_kjlan}16. ${color16}Speedtest測速面板" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome去廣告軟件${gl_kjlan}18. ${color18}onlyoffice在線辦公OFFICE" + echo -e "${gl_kjlan}19. ${color19}雷池WAF防火牆面板${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" - echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" - echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" - echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" + echo -e "${gl_kjlan}21. ${color21}VScode網頁版${gl_kjlan}22. ${color22}UptimeKuma監控工具" + echo -e "${gl_kjlan}23. ${color23}Memos網頁備忘錄${gl_kjlan}24. ${color24}Webtop遠程桌面網頁版${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud網盤${gl_kjlan}26. ${color26}QD-Today定時任務管理框架" + echo -e "${gl_kjlan}27. ${color27}Dockge容器堆棧管理面板${gl_kjlan}28. ${color28}LibreSpeed測速工具" + echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相冊系統" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" - echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" - echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" - echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全${gl_kjlan}32. ${color32}drawio免費的在線圖表軟件${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel導航面板${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" + echo -e "${gl_kjlan}35. ${color35}極簡朋友圈${gl_kjlan}36. ${color36}LobeChatAI聊天聚合網站" + echo -e "${gl_kjlan}37. ${color37}MyIP工具箱${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" + echo -e "${gl_kjlan}39. ${color39}Bililive直播錄製工具${gl_kjlan}40. ${color40}webssh網頁版SSH連接工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" - echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" - echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" + echo -e "${gl_kjlan}41. ${color41}耗子管理面板${gl_kjlan}42. ${color42}Nexterm遠程連接工具" + echo -e "${gl_kjlan}43. ${color43}RustDesk遠程桌面(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk遠程桌面(中繼端)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速站${gl_kjlan}46. ${color46}GitHub加速站${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}普羅米修斯監控${gl_kjlan}48. ${color48}普羅米修斯(主機監控)" + echo -e "${gl_kjlan}49. ${color49}普羅米修斯(容器監控)${gl_kjlan}50. ${color50}補貨監控工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" - echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" - echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + echo -e "${gl_kjlan}51. ${color51}PVE開小雞面板${gl_kjlan}52. ${color52}DPanel容器管理面板" + echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型${gl_kjlan}54. ${color54}AMH主機建站管理面板" + echo -e "${gl_kjlan}55. ${color55}FRP內網穿透(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP內網穿透(客戶端)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型${gl_kjlan}58. ${color58}Dify大模型知識庫${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI大模型資產管理${gl_kjlan}60. ${color60}JumpServer開源堡壘機" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" - echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" - echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + echo -e "${gl_kjlan}61. ${color61}在線翻譯服務器${gl_kjlan}62. ${color62}RAGFlow大模型知識庫" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自託管AI平台${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" + echo -e "${gl_kjlan}65. ${color65}n8n自動化工作流平台${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp視頻下載工具" + echo -e "${gl_kjlan}67. ${color67}ddns-go動態DNS管理工具${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL證書管理平台" + echo -e "${gl_kjlan}69. ${color69}SFTPGo文件傳輸工具${gl_kjlan}70. ${color70}AstrBot聊天機器人框架" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" - echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" - echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" - echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" + echo -e "${gl_kjlan}71. ${color71}Navidrome私有音樂服務器${gl_kjlan}72. ${color72}bitwarden密碼管理器${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV私有影視${gl_kjlan}74. ${color74}MoonTV私有影視" + echo -e "${gl_kjlan}75. ${color75}Melody音樂精靈${gl_kjlan}76. ${color76}在線DOS老遊戲" + echo -e "${gl_kjlan}77. ${color77}迅雷離線下載工具${gl_kjlan}78. ${color78}PandaWiki智能文檔管理系統" + echo -e "${gl_kjlan}79. ${color79}Beszel服務器監控${gl_kjlan}80. ${color80}linkwarden書籤管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" - echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" - echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" - echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet視頻會議${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" + echo -e "${gl_kjlan}83. ${color83}komari服務器監控工具${gl_kjlan}84. ${color84}Wallos個人財務管理工具" + echo -e "${gl_kjlan}85. ${color85}immich圖片視頻管理器${gl_kjlan}86. ${color86}jellyfin媒體管理系統" + echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器${gl_kjlan}88. ${color88}Owncast自託管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快遞${gl_kjlan}90. ${color90}matrix去中心化聊天協議" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" - echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" - echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" - echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}91. ${color91}gitea私有代碼倉庫${gl_kjlan}92. ${color92}FileBrowser文件管理器" + echo -e "${gl_kjlan}93. ${color93}Dufs極簡靜態文件服務器${gl_kjlan}94. ${color94}Gopeed高速下載工具" + echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台" + echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" + echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice fi case $sub_choice in @@ -9032,8 +9033,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "設置登錄用戶名:" admin + read -e -p "設置登錄用戶密碼:" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9075,9 +9076,9 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "哪吒监控 $check_docker $update_status" - echo "开源、轻量、易用的服务器监控与运维工具" - echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" + echo -e "哪吒監控$check_docker $update_status" + echo "開源、輕量、易用的服務器監控與運維工具" + echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip @@ -9086,9 +9087,9 @@ while true; do echo "------------------------" echo "1. 使用" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) @@ -9145,7 +9146,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "搭建郵局" clear install telnet local app_id="9" @@ -9155,43 +9156,43 @@ while true; do check_docker_image_update $docker_name clear - echo -e "邮局服务 $check_docker $update_status" - echo "poste.io 是一个开源的邮件服务器解决方案," - echo "视频介绍: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo -e "郵局服務$check_docker $update_status" + echo "poste.io 是一個開源的郵件服務器解決方案," + echo "視頻介紹: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" - 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}" + echo -e "${gl_lv}端口$port當前可用${gl_bai}" else - echo -e "${gl_hong}端口 $port 当前不可用${gl_bai}" + echo -e "${gl_hong}端口$port當前不可用${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then yuming=$(cat /home/docker/mail.txt) - echo "访问地址: " + echo "訪問地址:" echo "https://$yuming" fi echo "------------------------" - echo "1. 安装 2. 更新 3. 卸载" + echo "1. 安裝 2. 更新 3. 卸載" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) check_disk_space 2 - read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming + read -e -p "請設置郵箱域名 例如 mail.yuming.com :" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "先解析这些DNS记录" + echo "先解析這些DNS記錄" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9201,7 +9202,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "按任意鍵繼續..." read -n 1 -s -r -p "" install jq @@ -9220,9 +9221,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "poste.io已經安裝完成" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "您可以使用以下地址訪問poste.io:" echo "https://$yuming" echo "" @@ -9245,9 +9246,9 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "poste.io已经安装完成" + echo "poste.io已經安裝完成" echo "------------------------" - echo "您可以使用以下地址访问poste.io:" + echo "您可以使用以下地址訪問poste.io:" echo "https://$yuming" echo "" ;; @@ -9258,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "應用已卸載" ;; *) @@ -9292,7 +9293,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -9302,7 +9303,7 @@ while true; do 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已经安装完成" + echo "rocket.chat已經安裝完成" check_docker_app_ip } @@ -9312,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -9396,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -9410,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -9563,20 +9564,20 @@ while true; do while true; do check_docker_app clear - echo -e "雷池服务 $check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + echo -e "雷池服務$check_docker" + echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" + echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安装 2. 更新 3. 重置密码 4. 卸载" + echo "1. 安裝 2. 更新 3. 重置密碼 4. 卸載" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) @@ -9586,7 +9587,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经安装完成" + echo "雷池WAF面板已經安裝完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9599,7 +9600,7 @@ while true; do mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) clear - echo "雷池WAF面板已经更新完成" + echo "雷池WAF面板已經更新完成" check_docker_app_ip ;; 3) @@ -9610,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "如果你是默认安装目录那现在项目已经卸载。如果你是自定义安装目录你需要到安装目录下自行执行:" + echo "如果你是默認安裝目錄那現在項目已經卸載。如果你是自定義安裝目錄你需要到安裝目錄下自行執行:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9729,8 +9730,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password + read -e -p "設置登錄用戶名:" admin + read -e -p "設置登錄用戶密碼:" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10018,7 +10019,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="官网介绍: ${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10275,9 +10276,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "初始用戶名密碼均為: admin" } docker_app_update() { @@ -10295,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10382,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVE开小鸡" + send_stats "PVE開小雞" 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 ;; @@ -10502,7 +10503,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10517,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10545,7 +10546,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10560,7 +10561,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10568,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10589,17 +10590,17 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip - echo "初始用户名: admin" - echo "初始密码: ChangeMe" + echo "初始用戶名: admin" + echo "初始密碼: ChangeMe" } docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "应用已更新" + echo "應用已更新" } @@ -10609,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10656,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10672,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10934,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "設置LibreTV的登錄密碼:" app_passwd docker run -d \ --name libretv \ @@ -10968,9 +10969,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "设置登录用户名: " admin - read -e -p "设置登录用户密码: " admin_password - read -e -p "输入授权码: " shouquanma + read -e -p "設置登錄用戶名:" admin + read -e -p "設置登錄用戶密碼:" admin_password + read -e -p "輸入授權碼:" shouquanma mkdir -p /home/docker/moontv @@ -10986,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11000,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -11073,8 +11074,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "設置登錄用戶名:" app_use + read -e -p "設置登錄密碼:" app_passwd docker run -d \ --name xunlei \ @@ -11171,11 +11172,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 下载官方 docker-compose 和 env 文件 + # 下載官方 docker-compose 和 env 文件 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 生成随机密钥与密码 + # 生成隨機密鑰與密碼 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11184,17 +11185,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 追加管理员账号信息 + # 追加管理員賬號信息 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 启动容器 + # 啟動容器 docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11204,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 保留原本的变量 + # 保留原本的變量 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11221,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -11271,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -11289,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "设置${docker_name}的登录密钥(sk-开头字母和数字组合)如: sk-159kejilionyyds163: " app_passwd + read -e -p "設定${docker_name}的登錄密鑰(sk-開頭字母和數字組合)如: sk-159kejilionyyds163:" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11393,7 +11394,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11406,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -11567,7 +11568,7 @@ while true; do --restart unless-stopped \ matrixdotorg/synapse:latest - echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" + echo "創建初始用戶或管理員。請設置以下內容用戶名和密碼以及是否為管理員。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11619,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11633,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -11708,8 +11709,8 @@ while true; do docker_rum() { - read -e -p "设置登录用户名: " app_use - read -e -p "设置登录密码: " app_passwd + read -e -p "設置登錄用戶名:" app_use + read -e -p "設置登錄密碼:" app_passwd docker run -d \ --name ${docker_name} \ @@ -11757,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11771,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -11788,12 +11789,12 @@ while true; do docker_rum() { - read -p "请输入组网的客户端数量 (默认 5): " COUNT + read -p "請輸入組網的客戶端數量 (默認 5):" COUNT COUNT=${COUNT:-5} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - - stop_containers_or_kill_process 51820 &>/dev/null + + ip link delete wg0 &>/dev/null ip_address docker run -d \ @@ -11833,7 +11834,7 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二维码: $base_name.png" + echo "生成二維碼:$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' @@ -11843,11 +11844,11 @@ while true; do sleep 2 docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" - echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" - echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" - echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}" + echo -e "${gl_lv}${COUNT}個客戶端配置全部輸出,使用方法如下:${gl_bai}" + echo -e "${gl_lv}1. 手機下載wg的APP,掃描上方二維碼,可以快速連接網絡${gl_bai}" + echo -e "${gl_lv}2. Windows下載客戶端,複製配置代碼連接網絡。${gl_bai}" + echo -e "${gl_lv}3. Linux用腳本部署WG客戶端,複製配置代碼連接網絡。${gl_bai}" + echo -e "${gl_lv}官方客戶端下載方式: https://www.wireguard.com/install/${gl_bai}" break_end } @@ -11875,16 +11876,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 創建目錄(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "請粘貼你的客戶端配置,連續按兩次回車保存:" - # 初始化变量 + # 初始化變量 input="" empty_line_count=0 - # 逐行读取用户输入 + # 逐行讀取用戶輸入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11897,10 +11898,10 @@ while true; do fi done - # 写入配置文件 + # 寫入配置文件 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "客戶端配置已保存到$CONFIG_FILE" docker run -d \ --name wireguardc \ @@ -11933,21 +11934,21 @@ while true; do b) clear - send_stats "全部应用备份" + send_stats "全部應用備份" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在備份$backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "备份文件已创建: /$backup_filename" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "備份文件已創建: /$backup_filename" + read -e -p "要傳送備份數據到遠程服務器嗎? (Y/N):" choice case "$choice" in [Yy]) - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "請輸入遠端服務器IP:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" + echo "錯誤: 請輸入遠端服務器IP。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -11955,14 +11956,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "文件已传送至远程服务器/根目录。" + echo "文件已傳送至遠程服務器/根目錄。" else - echo "未找到要传送的文件。" + echo "未找到要傳送的文件。" fi break ;; *) - echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "注意: 目前備份僅包含docker項目,不包含寶塔,1panel等建站面板的數據備份。" break ;; esac @@ -11972,29 +11973,29 @@ while true; do r) root_use - send_stats "全部应用还原" - echo "可用的应用备份" + send_stats "全部應用還原" + echo "可用的應用備份" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + read -e -p "回車鍵還原最新的備份,輸入備份文件名還原指定的備份,輸入0退出:" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # 如果用户没有输入文件名,使用最新的压缩包 + # 如果用戶沒有輸入文件名,使用最新的壓縮包 if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + echo -e "${gl_huang}正在解壓$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" + echo "應用數據已還原,目前請手動進入指定應用菜單,更新應用,即可還原應用。" else - echo "没有找到压缩包。" + echo "沒有找到壓縮包。" fi ;; @@ -12017,35 +12018,35 @@ linux_work() { while true; do clear - send_stats "后台工作区" - echo -e "后台工作区" - echo -e "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务" - echo -e "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。" - echo -e "${gl_huang}提示: ${gl_bai}进入工作区后使用Ctrl+b再单独按d,退出工作区!" + send_stats "後台工作區" + echo -e "後台工作區" + echo -e "系統將為你提供可以後台常駐運行的工作區,你可以用來執行長時間的任務" + echo -e "即使你斷開SSH,工作區中的任務也不會中斷,後台常駐任務。" + echo -e "${gl_huang}提示:${gl_bai}進入工作區後使用Ctrl+b再單獨按d,退出工作區!" echo -e "${gl_kjlan}------------------------" - echo "当前已存在的工作区列表" + 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}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}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}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in @@ -12053,7 +12054,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; @@ -12061,63 +12062,63 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 5) clear install tmux local SESSION_NAME="work5" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; @@ -12129,21 +12130,21 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH常驻模式 " - echo -e "SSH常驻模式 ${tmux_sshd_status}" - echo "开启后SSH连接后会直接进入常驻模式,直接回到之前的工作状态。" + send_stats "SSH常駐模式" + echo -e "SSH常駐模式${tmux_sshd_status}" + echo "開啟後SSH連接後會直接進入常駐模式,直接回到之前的工作狀態。" echo "------------------------" - echo "1. 开启 2. 关闭" + echo "1. 開啟 2. 關閉" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " gongzuoqu_del + 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 + 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 ;; @@ -12159,29 +12160,29 @@ linux_work() { ;; 22) - read -e -p "请输入你创建或进入的工作区名称,如1001 kj001 work1: " SESSION_NAME + read -e -p "請輸入你創建或進入的工作區名稱,如1​​001 kj001 work1:" SESSION_NAME tmux_run - send_stats "自定义工作区" + send_stats "自定義工作區" ;; 23) - read -e -p "请输入你要后台执行的命令,如:curl -fsSL https://get.docker.com | sh: " tmuxd + read -e -p "請輸入你要後台執行的命令,如:curl -fsSL https://get.docker.com | sh:" tmuxd tmux_run_d - send_stats "注入命令到后台工作区" + send_stats "注入命令到後台工作區" ;; 24) - read -e -p "请输入要删除的工作区名称: " gongzuoqu_name + read -e -p "請輸入要刪除的工作區名稱:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "删除工作区" + send_stats "刪除工作區" ;; 0) kejilion ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -12206,54 +12207,54 @@ linux_Settings() { while true; do clear - # send_stats "系统工具" - echo -e "系统工具" + # 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}ROOT密码登录模式 ${gl_kjlan}4. ${gl_bai}安装Python指定版本" - 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}1. ${gl_bai}設置腳本啟動快捷鍵${gl_kjlan}2. ${gl_bai}修改登錄密碼" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT密碼登錄模式${gl_kjlan}4. ${gl_bai}安裝Python指定版本" + 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}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}本机host解析 ${gl_kjlan}22. ${gl_bai}SSH防御程序" - echo -e "${gl_kjlan}23. ${gl_bai}限流自动关机 ${gl_kjlan}24. ${gl_bai}ROOT私钥登录模式" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系统监控预警 ${gl_kjlan}26. ${gl_bai}修复OpenSSH高危漏洞" - echo -e "${gl_kjlan}27. ${gl_bai}红帽系Linux内核升级 ${gl_kjlan}28. ${gl_bai}Linux系统内核参数优化 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}病毒扫描工具 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}文件管理器" + echo -e "${gl_kjlan}21. ${gl_bai}本機host解析${gl_kjlan}22. ${gl_bai}SSH防禦程序" + echo -e "${gl_kjlan}23. ${gl_bai}限流自動關機${gl_kjlan}24. ${gl_bai}ROOT私鑰登錄模式" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot系統監控預警${gl_kjlan}26. ${gl_bai}修復OpenSSH高危漏洞" + echo -e "${gl_kjlan}27. ${gl_bai}紅帽系Linux內核升級${gl_kjlan}28. ${gl_bai}Linux系統內核參數優化${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}39. ${gl_bai}命令收藏夹 ${gl_huang}★${gl_bai}" + 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}39. ${gl_bai}命令收藏夾${gl_huang}★${gl_bai}" 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}卸载科技lion脚本" + 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}卸載科技lion腳本" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "请输入你的快捷按键(输入0退出): " kuaijiejian + 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 "脚本快捷键已设置" + echo "快捷鍵已設置" + send_stats "腳本快捷鍵已設置" break_end linux_Settings done @@ -12261,13 +12262,13 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "設置你的登錄密碼" + echo "設置你的登錄密碼" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "root密碼模式" add_sshpasswd ;; @@ -12275,20 +12276,20 @@ linux_Settings() { root_use send_stats "py版本管理" echo "python版本管理" - echo "视频介绍: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" + echo "視頻介紹: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "该功能可无缝安装python官方支持的任何版本!" + echo "該功能可無縫安裝python官方支持的任何版本!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" + echo -e "當前python版本號:${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 "推薦版本: 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 + read -e -p "輸入你要安裝的python版本號(輸入0退出):" py_new_v if [[ "$py_new_v" == "0" ]]; then - send_stats "脚本PY管理" + send_stats "腳本PY管理" break_end linux_Settings fi @@ -12350,17 +12351,17 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "当前python版本号: ${gl_huang}$VERSION${gl_bai}" - send_stats "脚本PY版本切换" + echo -e "當前python版本號:${gl_huang}$VERSION${gl_bai}" + send_stats "腳本PY版本切換" ;; 5) root_use - send_stats "开放端口" + send_stats "開放端口" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "端口已全部开放" + echo "端口已全部開放" ;; 6) @@ -12371,19 +12372,19 @@ EOF clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 读取当前的 SSH 端口号 + # 讀取當前的 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}" + # 打印當前的 SSH 端口號 + echo -e "當前的 SSH 端口號是:${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "端口号范围1到65535之间的数字。(输入0退出)" + echo "端口號範圍1到65535之間的數字。 (輸入0退出)" - # 提示用户输入新的 SSH 端口号 - read -e -p "请输入新的 SSH 端口号: " new_port + # 提示用戶輸入新的 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端口已修改" @@ -12392,13 +12393,13 @@ EOF send_stats "退出SSH端口修改" break else - echo "端口号无效,请输入1到65535之间的数字。" - send_stats "输入无效SSH端口" + echo "端口號無效,請輸入1到65535之間的數字。" + send_stats "輸入無效SSH端口" break_end fi else - echo "输入无效,请输入数字。" - send_stats "输入无效SSH端口" + echo "輸入無效,請輸入數字。" + send_stats "輸入無效SSH端口" break_end fi done @@ -12417,8 +12418,8 @@ EOF ;; 9) root_use - send_stats "新用户禁用root" - read -e -p "请输入新用户名(输入0退出): " new_username + send_stats "新用戶禁用root" + read -e -p "請輸入新用戶名(輸入0退出):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12439,43 +12440,43 @@ EOF 10) root_use - send_stats "设置v4/v6优先级" + send_stats "設置v4/v6優先級" while true; do clear - echo "设置v4/v6优先级" + 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} 优先" + echo -e "當前網絡優先級設置:${gl_huang}IPv4${gl_bai}優先" else - echo -e "当前网络优先级设置: ${gl_huang}IPv6${gl_bai} 优先" + echo -e "當前網絡優先級設置:${gl_huang}IPv6${gl_bai}優先" fi echo "" echo "------------------------" - echo "1. IPv4 优先 2. IPv6 优先 3. IPv6 修复工具" + echo "1. IPv4 優先 2. IPv6 優先 3. IPv6 修復工具" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "选择优先的网络: " choice + 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 优先" + echo "已切換為 IPv4 優先" + send_stats "已切換為 IPv4 優先" ;; 2) sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 - echo "已切换为 IPv6 优先" - send_stats "已切换为 IPv6 优先" + echo "已切換為 IPv6 優先" + send_stats "已切換為 IPv6 優先" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "该功能由jhb大神提供,感谢他!" - send_stats "ipv6修复" + echo "該功能由jhb大神提供,感謝他!" + send_stats "ipv6修復" ;; *) @@ -12493,43 +12494,43 @@ EOF 12) root_use - send_stats "设置虚拟内存" + send_stats "設置虛擬內存" while true; do clear - echo "设置虚拟内存" + 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 -e "當前虛擬內存:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定义大小" + echo "1. 分配1024M 2. 分配2048M 3. 分配4096M 4. 自定義大小" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " choice + read -e -p "請輸入你的選擇:" choice case "$choice" in 1) - send_stats "已设置1G虚拟内存" + send_stats "已設置1G虛擬內存" add_swap 1024 ;; 2) - send_stats "已设置2G虚拟内存" + send_stats "已設置2G虛擬內存" add_swap 2048 ;; 3) - send_stats "已设置4G虚拟内存" + send_stats "已設置4G虛擬內存" add_swap 4096 ;; 4) - read -e -p "请输入虚拟内存大小(单位M): " new_swap + read -e -p "請輸入虛擬內存大小(單位M):" new_swap add_swap "$new_swap" - send_stats "已设置自定义虚拟内存" + send_stats "已設置自定義虛擬內存" ;; *) @@ -12542,8 +12543,8 @@ EOF 13) while true; do root_use - send_stats "用户管理" - echo "用户列表" + send_stats "用戶管理" + echo "用戶列表" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12554,24 +12555,24 @@ EOF echo "" - echo "账户操作" + echo "賬戶操作" echo "------------------------" - echo "1. 创建普通账户 2. 创建高级账户" + echo "1. 創建普通賬戶 2. 創建高級賬戶" echo "------------------------" - echo "3. 赋予最高权限 4. 取消最高权限" + echo "3. 賦予最高權限 4. 取消最高權限" echo "------------------------" - echo "5. 删除账号" + echo "5. 刪除賬號" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 提示用戶輸入新用戶名 + read -e -p "請輸入新用戶名:" new_username - # 创建新用户并设置密码 + # 創建新用戶並設置密碼 useradd -m -s /bin/bash "$new_username" passwd "$new_username" @@ -12579,14 +12580,14 @@ EOF ;; 2) - # 提示用户输入新用户名 - read -e -p "请输入新用户名: " new_username + # 提示用戶輸入新用戶名 + read -e -p "請輸入新用戶名:" new_username - # 创建新用户并设置密码 + # 創建新用戶並設置密碼 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 赋予新用户sudo权限 + # 賦予新用戶sudo權限 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12595,21 +12596,21 @@ EOF ;; 3) - read -e -p "请输入用户名: " username - # 赋予新用户sudo权限 + read -e -p "請輸入用戶名:" username + # 賦予新用戶sudo權限 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "请输入用户名: " username - # 从sudoers文件中移除用户的sudo权限 + read -e -p "請輸入用戶名:" username + # 從sudoers文件中移除用戶的sudo權限 sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) - read -e -p "请输入要删除的用户名: " username - # 删除用户及其主目录 + read -e -p "請輸入要刪除的用戶名:" username + # 刪除用戶及其主目錄 userdel -r "$username" ;; @@ -12622,50 +12623,50 @@ EOF 14) clear - send_stats "用户信息生成器" - echo "随机用户名" + send_stats "用戶信息生成器" + echo "隨機用戶名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "随机用户名 $i: $username" + echo "隨機用戶名$i: $username" done echo "" - 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个随机用户姓名 + # 生成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" + echo "隨機用戶姓名$i: $user_name" done echo "" - echo "随机UUID" + echo "隨機UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "随机UUID $i: $uuid" + echo "隨機UUID$i: $uuid" done echo "" - echo "16位随机密码" + 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" + echo "隨機密碼$i: $password" done echo "" - echo "32位随机密码" + 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" + echo "隨機密碼$i: $password" done echo "" @@ -12673,46 +12674,46 @@ EOF 15) root_use - send_stats "换时区" + send_stats "換時區" while true; do clear - echo "系统时间信息" + echo "系統時間信息" - # 获取当前系统时区 + # 獲取當前系統時區 local timezone=$(current_timezone) - # 获取当前系统时间 + # 獲取當前系統時間 local current_time=$(date +"%Y-%m-%d %H:%M:%S") - # 显示时区和时间 - echo "当前系统时区:$timezone" - echo "当前系统时间:$current_time" + # 顯示時區和時間 + echo "當前系統時區:$timezone" + echo "當前系統時間:$current_time" echo "" - echo "时区切换" + echo "時區切換" echo "------------------------" - echo "亚洲" - echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + 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 "11. 英國倫敦時間 12. 法國巴黎時間" + echo "13. 德國柏林時間 14. 俄羅斯莫斯科時間" + echo "15. 荷蘭尤特賴赫特時間 16. 西班牙馬德里時間" echo "------------------------" echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" - echo "23. 加拿大时间 24. 墨西哥时间" - echo "25. 巴西时间 26. 阿根廷时间" + echo "21. 美國西部時間 22. 美國東部時間" + echo "23. 加拿大時間 24. 墨西哥時間" + echo "25. 巴西時間 26. 阿根廷時間" echo "------------------------" - echo "31. UTC全球标准时间" + echo "31. UTC全球標準時間" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in @@ -12755,21 +12756,21 @@ EOF 18) root_use - send_stats "修改主机名" + send_stats "修改主機名" while true; do clear local current_hostname=$(uname -n) - echo -e "当前主机名: ${gl_huang}$current_hostname${gl_bai}" + echo -e "當前主機名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " new_hostname + 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 等 + # 其他系統,如 Debian, Ubuntu, CentOS 等 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -12787,11 +12788,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "主机名已更改为: $new_hostname" - send_stats "主机名已更改" + echo "主機名已更改為:$new_hostname" + send_stats "主機名已更改" sleep 1 else - echo "已退出,未更改主机名。" + echo "已退出,未更改主機名。" break fi done @@ -12799,24 +12800,24 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "換系統更新源" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "選擇更新源區域" + echo "接入LinuxMirrors切換系統更新源" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 中國大陸【默認】 2. 中國大陸【教育網】 3. 海外地區" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "输入你的选择: " choice + read -e -p "輸入你的選擇:" choice case $choice in 1) - send_stats "中国大陆默认源" + send_stats "中國大陸默認源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "中国大陆教育源" + send_stats "中國大陸教育源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) @@ -12832,62 +12833,62 @@ EOF ;; 20) - send_stats "定时任务管理" + send_stats "定時任務管理" while true; do clear check_crontab_installed clear - echo "定时任务列表" + echo "定時任務列表" crontab -l echo "" echo "操作" echo "------------------------" - echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务" + echo "1. 添加定時任務 2. 刪除定時任務 3. 編輯定時任務" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - read -e -p "请输入新任务的执行命令: " newquest + read -e -p "請輸入新任務的執行命令:" newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" - echo "3. 每天任务 4. 每小时任务" + echo "1. 每月任務 2. 每週任務" + echo "3. 每天任務 4. 每小時任務" echo "------------------------" - read -e -p "请输入你的选择: " dingshi + read -e -p "請輸入你的選擇:" dingshi case $dingshi in 1) - read -e -p "选择每月的几号执行任务? (1-30): " day + 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 + 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 + read -e -p "選擇每天幾點執行任務? (小時,0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute + read -e -p "輸入每小時的第幾分鐘執行任務? (分鐘,0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "添加定时任务" + send_stats "添加定時任務" ;; 2) - read -e -p "请输入需要删除任务的关键字: " kquest + read -e -p "請輸入需要刪除任務的關鍵字:" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "删除定时任务" + send_stats "刪除定時任務" ;; 3) crontab -e - send_stats "编辑定时任务" + send_stats "編輯定時任務" ;; *) break # 跳出循环,退出菜单 @@ -12902,29 +12903,29 @@ EOF send_stats "本地host解析" while true; do clear - echo "本机host解析列表" - echo "如果你在这里添加解析匹配,将不再使用动态解析了" + echo "本機host解析列表" + echo "如果你在這裡添加解析匹配,將不再使用動態解析了" cat /etc/hosts echo "" echo "操作" echo "------------------------" - echo "1. 添加新的解析 2. 删除解析地址" + echo "1. 添加新的解析 2. 刪除解析地址" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "請輸入你的選擇:" host_dns case $host_dns in 1) - read -e -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost + read -e -p "請輸入新的解析記錄 格式: 110.25.5.33 kejilion.pro :" addhost echo "$addhost" >> /etc/hosts send_stats "本地host解析新增" ;; 2) - read -e -p "请输入需要删除的解析内容关键字: " delhost + read -e -p "請輸入需要刪除的解析內容關鍵字:" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析删除" + send_stats "本地host解析刪除" ;; *) break # 跳出循环,退出菜单 @@ -12935,7 +12936,7 @@ EOF 22) root_use - send_stats "ssh防御" + send_stats "ssh防禦" while true; do if [ -x "$(command -v fail2ban-client)" ] ; then clear @@ -12947,20 +12948,20 @@ EOF docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 docker_name="fail2ban" check_docker_app - echo -e "SSH防御程序 $check_docker" - echo "fail2ban是一个SSH防止暴力破解工具" - echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防禦程序$check_docker" + echo "fail2ban是一個SSH防止暴力破解工具" + echo "官網介紹:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 安装防御程序" + echo "1. 安裝防禦程序" echo "------------------------" - echo "2. 查看SSH拦截记录" - echo "3. 日志实时监控" + echo "2. 查看SSH攔截記錄" + echo "3. 日誌實時監控" echo "------------------------" - echo "9. 卸载防御程序" + echo "9. 卸載防禦程序" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " sub_choice + read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) install_docker @@ -12983,7 +12984,7 @@ EOF 9) docker rm -f fail2ban rm -rf /path/to/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防禦程序已卸載" ;; *) break @@ -12996,47 +12997,47 @@ EOF 23) root_use - send_stats "限流关机功能" + send_stats "限流關機功能" while true; do clear - echo "限流关机功能" - echo "视频介绍: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" + echo "限流關機功能" + echo "視頻介紹: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "当前流量使用情况,重启服务器流量计算会清零!" + echo "當前流量使用情況,重啟服務器流量計算會清零!" output_status - echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}總接收:${gl_bai}$rx" + echo -e "${gl_kjlan}總發送:${gl_bai}$tx" - # 检查是否存在 Limiting_Shut_down.sh 文件 + # 檢查是否存在 Limiting_Shut_down.sh 文件 if [ -f ~/Limiting_Shut_down.sh ]; then - # 获取 threshold_gb 的值 + # 獲取 threshold_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}" + 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}" + echo -e "${gl_hui}當前未啟用限流關機功能${gl_bai}" fi echo echo "------------------------------------------------" - echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!" + echo "系統每分鐘會檢測實際流量是否到達閾值,到達後會自動關閉服務器!" echo "------------------------" - echo "1. 开启限流关机功能 2. 停用限流关机功能" + echo "1. 開啟限流關機功能 2. 停用限流關機功能" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "請輸入你的選擇:" Limiting case "$Limiting" in 1) - # 输入新的虚拟内存大小 - echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出。" - read -e -p "请输入进站流量阈值(单位为G,默认100G): " rx_threshold_gb + # 輸入新的虛擬內存大小 + echo "如果實際服務器就100G流量,可設置閾值為95G,提前關機,以免出現流量誤差或溢出。" + read -e -p "請輸入進站流量閾值(單位為G,默認100G):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "请输入出站流量阈值(单位为G,默认100G): " tx_threshold_gb + read -e -p "請輸入出站流量閾值(單位為G,默認100G):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "请输入流量重置日期(默认每月1日重置): " cz_day + read -e -p "請輸入流量重置日期(默認每月1日重置):" cz_day cz_day=${cz_day:-1} cd ~ @@ -13049,15 +13050,15 @@ EOF (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 "限流关机已设置" + 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 "已关闭限流关机功能" + echo "已關閉限流關機功能" ;; *) break @@ -13070,40 +13071,40 @@ EOF 24) root_use - send_stats "私钥登录" + send_stats "私鑰登錄" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "ROOT私鑰登錄模式" + echo "視頻介紹: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "將會生成密鑰對,更安全的方式SSH登錄" echo "------------------------" - echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" + echo "1. 生成新密鑰 2. 導入已有密鑰 3. 查看本機密鑰" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " host_dns + read -e -p "請輸入你的選擇:" host_dns case $host_dns in 1) - send_stats "生成新密钥" + send_stats "生成新密鑰" add_sshkey break_end ;; 2) - send_stats "导入已有公钥" + send_stats "導入已有公鑰" import_sshkey break_end ;; 3) - send_stats "查看本机密钥" + send_stats "查看本機密鑰" echo "------------------------" - echo "公钥信息" + echo "公鑰信息" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私钥信息" + echo "私鑰信息" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13119,18 +13120,18 @@ EOF 25) root_use - send_stats "电报预警" - echo "TG-bot监控预警功能" - echo "视频介绍: https://youtu.be/vLL-eb3Z_TY" + send_stats "電報預警" + echo "TG-bot監控預警功能" + echo "視頻介紹: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警" - echo "到达阈值后会向用户发预警消息" - echo -e "${gl_hui}-关于流量,重启服务器将重新计算-${gl_bai}" - read -e -p "确定继续吗?(Y/N): " choice + echo "您需要配置tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬盤,流量,SSH登錄的實時監控預警" + echo "到達閾值後會向用戶發預警消息" + echo -e "${gl_hui}-關於流量,重啟服務器將重新計算-${gl_bai}" + read -e -p "確定繼續嗎? (Y/N):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "電報預警啟用" cd ~ install nano tmux bc jq check_crontab_installed @@ -13163,21 +13164,21 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" - echo -e "${gl_hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${gl_bai}" + echo "TG-bot預警系統已啟動" + echo -e "${gl_hui}你還可以將root目錄中的TG-check-notify.sh預警文件放到其他機器上直接使用!${gl_bai}" ;; [Nn]) echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; 26) root_use - send_stats "修复SSH高危漏洞" + 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 @@ -13221,7 +13222,7 @@ EOF ;; 37) clear - send_stats "命令行历史记录" + 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; } @@ -13245,60 +13246,60 @@ EOF 41) clear send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" + echo "科技lion留言板已遷移至官方社區!請在官方社區進行留言噢!" echo "https://bbs.kejilion.pro/" ;; 66) root_use - send_stats "一条龙调优" - echo "一条龙系统调优" + 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + 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. Linux系統內核參數優化切換到${gl_huang}均衡優化模式${gl_bai}" echo "------------------------------------------------" - read -e -p "确定一键保养吗?(Y/N): " choice + read -e -p "確定一鍵保養嗎? (Y/N):" choice case "$choice" in [Yy]) clear - send_stats "一条龙调优启动" + send_stats "一條龍調優啟動" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系統到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + 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 -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 -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 -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 -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 -e "[${gl_lv}OK${gl_bai}] 7/10. 設置時區到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13315,25 +13316,25 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + 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 -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. Linux系统内核参数优化" - echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux系統內核參數優化" + echo -e "${gl_lv}一條龍系統調優已完成${gl_bai}" ;; [Nn]) echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac @@ -13341,7 +13342,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "重啟系統" server_reboot ;; 100) @@ -13357,32 +13358,32 @@ EOF local status_message="无法确定的状态" fi - echo "隐私与安全" - echo "脚本将收集用户使用功能的数据,优化脚本体验,制作更多好玩好用的功能" - echo "将收集脚本版本号,使用的时间,系统版本,CPU架构,机器所属国家和使用的功能的名称," + echo "隱私與安全" + echo "腳本將收集用戶使用功能的數據,優化腳本體驗,製作更多好玩好用的功能" + echo "將收集腳本版本號,使用的時間,系統版本,CPU架構,機器所屬國家和使用的功能的名稱," echo "------------------------------------------------" - echo -e "当前状态: $status_message" + echo -e "當前狀態:$status_message" echo "--------------------" - echo "1. 开启采集" - echo "2. 关闭采集" + echo "1. 開啟採集" + echo "2. 關閉採集" echo "--------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "--------------------" - read -e -p "请输入你的选择: " sub_choice + 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 "隐私与安全已开启采集" + 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 "隐私与安全已关闭采集" + echo "已關閉採集" + send_stats "隱私與安全已關閉採集" ;; *) break @@ -13398,11 +13399,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + send_stats "卸載科技lion腳本" + echo "卸載科技lion腳本" echo "------------------------------------------------" - echo "将彻底卸载kejilion脚本,不影响你其他功能" - read -e -p "确定继续吗?(Y/N): " choice + echo "將徹底卸載kejilion腳本,不影響你其他功能" + read -e -p "確定繼續嗎? (Y/N):" choice case "$choice" in [Yy]) @@ -13410,7 +13411,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "腳本已卸載,再見!" break_end clear exit @@ -13419,7 +13420,7 @@ EOF echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -13429,7 +13430,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -13452,182 +13453,182 @@ linux_file() { clear echo "文件管理器" echo "------------------------" - echo "当前路径" + echo "當前路徑" pwd echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 进入目录 2. 创建目录 3. 修改目录权限 4. 重命名目录" - echo "5. 删除目录 6. 返回上一级选单目录" + echo "1. 進入目錄 2. 創建目錄 3. 修改目錄權限 4. 重命名目錄" + echo "5. 刪除目錄 6. 返回上一級選單目錄" echo "------------------------" - echo "11. 创建文件 12. 编辑文件 13. 修改文件权限 14. 重命名文件" - echo "15. 删除文件" + echo "11. 創建文件 12. 編輯文件 13. 修改文件權限 14. 重命名文件" + echo "15. 刪除文件" echo "------------------------" - echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" - echo "25. 传文件至其他服务器" + echo "21. 壓縮文件目錄 22. 解壓文件目錄 23. 移動文件目錄 24. 複製文件目錄" + echo "25. 傳文件至其他服務器" echo "------------------------" - echo "0. 返回上一级选单" + echo "0. 返回上一級選單" echo "------------------------" - read -e -p "请输入你的选择: " Limiting + read -e -p "請輸入你的選擇:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "请输入目录名: " dirname - cd "$dirname" 2>/dev/null || echo "无法进入目录" - send_stats "进入目录" + read -e -p "請輸入目錄名:" dirname + cd "$dirname" 2>/dev/null || echo "無法進入目錄" + send_stats "進入目錄" ;; 2) # 创建目录 - read -e -p "请输入要创建的目录名: " dirname - mkdir -p "$dirname" && echo "目录已创建" || echo "创建失败" - send_stats "创建目录" + 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 "修改目录权限" + 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 "重命名目录" + 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 "删除目录" + read -e -p "請輸入要刪除的目錄名:" dirname + rm -rf "$dirname" && echo "目錄已刪除" || echo "刪除失敗" + send_stats "刪除目錄" ;; 6) # 返回上一级选单目录 cd .. - send_stats "返回上一级选单目录" + send_stats "返回上一級選單目錄" ;; 11) # 创建文件 - read -e -p "请输入要创建的文件名: " filename - touch "$filename" && echo "文件已创建" || echo "创建失败" - send_stats "创建文件" + read -e -p "請輸入要創建的文件名:" filename + touch "$filename" && echo "文件已創建" || echo "創建失敗" + send_stats "創建文件" ;; 12) # 编辑文件 - read -e -p "请输入要编辑的文件名: " filename + read -e -p "請輸入要編輯的文件名:" filename install nano nano "$filename" - send_stats "编辑文件" + send_stats "編輯文件" ;; 13) # 修改文件权限 - read -e -p "请输入文件名: " filename - read -e -p "请输入权限 (如 755): " perm - chmod "$perm" "$filename" && echo "权限已修改" || echo "修改失败" - send_stats "修改文件权限" + 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 "重命名失败" + 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 "删除文件" + read -e -p "請輸入要刪除的文件名:" filename + rm -f "$filename" && echo "文件已刪除" || echo "刪除失敗" + send_stats "刪除文件" ;; 21) # 压缩文件/目录 - read -e -p "请输入要压缩的文件/目录名: " name + read -e -p "請輸入要壓縮的文件/目錄名:" name install tar - tar -czvf "$name.tar.gz" "$name" && echo "已压缩为 $name.tar.gz" || echo "压缩失败" - send_stats "压缩文件/目录" + tar -czvf "$name.tar.gz" "$name" && echo "已壓縮為$name.tar.gz" || echo "壓縮失敗" + send_stats "壓縮文件/目錄" ;; 22) # 解压文件/目录 - read -e -p "请输入要解压的文件名 (.tar.gz): " filename + read -e -p "請輸入要解壓的文件名 (.tar.gz):" filename install tar - tar -xzvf "$filename" && echo "已解压 $filename" || echo "解压失败" - send_stats "解压文件/目录" + tar -xzvf "$filename" && echo "已解壓$filename" || echo "解壓失敗" + send_stats "解壓文件/目錄" ;; 23) # 移动文件或目录 - read -e -p "请输入要移动的文件或目录路径: " src_path + read -e -p "請輸入要移動的文件或目錄路徑:" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "移动文件或目录失败: 文件或目录不存在" + echo "錯誤: 文件或目錄不存在。" + send_stats "移動文件或目錄失敗: 文件或目錄不存在" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "請輸入目標路徑 (包括新文件名或目錄名):" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "移动文件或目录失败: 目标路径未指定" + echo "錯誤: 請輸入目標路徑。" + send_stats "移動文件或目錄失敗: 目標路徑未指定" continue fi - mv "$src_path" "$dest_path" && echo "文件或目录已移动到 $dest_path" || echo "移动文件或目录失败" - send_stats "移动文件或目录" + mv "$src_path" "$dest_path" && echo "文件或目錄已移動到$dest_path" || echo "移動文件或目錄失敗" + send_stats "移動文件或目錄" ;; 24) # 复制文件目录 - read -e -p "请输入要复制的文件或目录路径: " src_path + read -e -p "請輸入要復制的文件或目錄路徑:" src_path if [ ! -e "$src_path" ]; then - echo "错误: 文件或目录不存在。" - send_stats "复制文件或目录失败: 文件或目录不存在" + echo "錯誤: 文件或目錄不存在。" + send_stats "複製文件或目錄失敗: 文件或目錄不存在" continue fi - read -e -p "请输入目标路径 (包括新文件名或目录名): " dest_path + read -e -p "請輸入目標路徑 (包括新文件名或目錄名):" dest_path if [ -z "$dest_path" ]; then - echo "错误: 请输入目标路径。" - send_stats "复制文件或目录失败: 目标路径未指定" + echo "錯誤: 請輸入目標路徑。" + send_stats "複製文件或目錄失敗: 目標路徑未指定" continue fi - # 使用 -r 选项以递归方式复制目录 - cp -r "$src_path" "$dest_path" && echo "文件或目录已复制到 $dest_path" || echo "复制文件或目录失败" - send_stats "复制文件或目录" + # 使用 -r 選項以遞歸方式複制目錄 + cp -r "$src_path" "$dest_path" && echo "文件或目錄已復製到$dest_path" || echo "複製文件或目錄失敗" + send_stats "複製文件或目錄" ;; 25) # 传送文件至远端服务器 - read -e -p "请输入要传送的文件路径: " file_to_transfer + read -e -p "請輸入要傳送的文件路徑:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "错误: 文件不存在。" - send_stats "传送文件失败: 文件不存在" + echo "錯誤: 文件不存在。" + send_stats "傳送文件失敗: 文件不存在" continue fi - read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "請輸入遠端服務器IP:" remote_ip if [ -z "$remote_ip" ]; then - echo "错误: 请输入远端服务器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + echo "錯誤: 請輸入遠端服務器IP。" + send_stats "傳送文件失敗: 未輸入遠端服務器IP" continue fi - read -e -p "请输入远端服务器用户名 (默认root): " remote_user + read -e -p "請輸入遠端服務器用戶名 (默認root):" remote_user remote_user=${remote_user:-root} - read -e -p "请输入远端服务器密码: " -s remote_password + read -e -p "請輸入遠端服務器密碼:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "错误: 请输入远端服务器密码。" - send_stats "传送文件失败: 未输入远端服务器密码" + echo "錯誤: 請輸入遠端服務器密碼。" + send_stats "傳送文件失敗: 未輸入遠端服務器密碼" continue fi - read -e -p "请输入登录端口 (默认22): " remote_port + 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傳輸文件 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" - send_stats "脚本已经最新$sh_v_new" + echo -e "${gl_lv}腳本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" + send_stats "腳本已經最新$sh_v_new" break_end ~/kejilion.sh exit @@ -13925,15 +13926,15 @@ while true; do (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 "开启脚本自动更新" + 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 "关闭脚本自动更新" + echo -e "${gl_lv}自動更新已關閉${gl_bai}" + send_stats "關閉腳本自動更新" break_end ;; *) @@ -13955,37 +13956,37 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "科技lion脚本工具箱 v$sh_v" -echo -e "命令行输入${gl_huang}k${gl_kjlan}可快速启动脚本${gl_bai}" +echo -e "科技lion腳本工具箱 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}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}Docker管理" echo -e "${gl_kjlan}7. ${gl_bai}WARP管理" -echo -e "${gl_kjlan}8. ${gl_bai}测试脚本合集" -echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云脚本合集" +echo -e "${gl_kjlan}8. ${gl_bai}測試腳本合集" +echo -e "${gl_kjlan}9. ${gl_bai}甲骨文云腳本合集" 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}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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}p. ${gl_bai}幻獸帕魯開服腳本" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}00. ${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}0. ${gl_bai}退出腳本" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "请输入你的选择: " choice +read -e -p "請輸入你的選擇:" choice case $choice in 1) linux_ps ;; - 2) clear ; send_stats "系统更新" ; linux_update ;; - 3) clear ; send_stats "系统清理" ; linux_clean ;; + 2) clear ; send_stats "系統更新" ; linux_update ;; + 3) clear ; send_stats "系統清理" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; 6) linux_docker ;; @@ -14000,13 +14001,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ + p) send_stats "幻獸帕魯開服腳本" ; 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 "无效的输入!" ;; + *) echo "無效的輸入!" ;; esac break_end done @@ -14014,68 +14015,68 @@ done k_info() { -send_stats "k命令参考用例" +send_stats "k命令參考用例" echo "-------------------" -echo "视频介绍: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下是k命令参考用例:" -echo "启动脚本 k" -echo "安装软件包 k install nano wget | k add nano wget | k 安装 nano wget" -echo "卸载软件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸载 nano wget" -echo "更新系统 k update | k 更新" -echo "清理系统垃圾 k clean | k 清理" -echo "重装系统面板 k dd | k 重装" +echo "視頻介紹: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "以下是k命令參考用例:" +echo "啟動腳本 k" +echo "安裝軟件包 k install nano wget | k add nano wget | k 安裝 nano wget" +echo "卸載軟件包 k remove nano wget | k del nano wget | k uninstall nano wget | k 卸載 nano wget" +echo "更新系統 k update | k 更新" +echo "清理系統垃圾 k clean | k 清理" +echo "重裝系統面板 k dd | k 重裝" echo "bbr3控制面板 k bbr3 | k bbrv3" -echo "内核调优面板 k nhyh | k 内核优化" -echo "设置虚拟内存 k swap 2048" -echo "设置虚拟时区 k time Asia/Shanghai | k 时区 Asia/Shanghai" -echo "系统回收站 k trash | k hsz | k 回收站" -echo "系统备份功能 k backup | k bf | k 备份" -echo "ssh远程连接工具 k ssh | k 远程连接" -echo "rsync远程同步工具 k rsync | k 远程同步" -echo "硬盘管理工具 k disk | k 硬盘管理" -echo "内网穿透(服务端) k frps" -echo "内网穿透(客户端) k frpc" -echo "软件启动 k start sshd | k 启动 sshd " -echo "软件停止 k stop sshd | k 停止 sshd " -echo "软件重启 k restart sshd | k 重启 sshd " -echo "软件状态查看 k status sshd | k 状态 sshd " -echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " -echo "域名证书申请 k ssl" -echo "域名证书到期查询 k ssl ps" -echo "docker环境安装 k docker install |k docker 安装" +echo "內核調優面板 k nhyh | k 內核優化" +echo "設置虛擬內存 k swap 2048" +echo "設置虛擬時區 k time Asia/Shanghai | k 時區 Asia/Shanghai" +echo "系統回收站 k trash | k hsz | k 回收站" +echo "系統備份功能 k backup | k bf | k 備份" +echo "ssh遠程連接工具 k ssh | k 遠程連接" +echo "rsync遠程同步工具 k rsync | k 遠程同步" +echo "硬盤管理工具 k disk | k 硬盤管理" +echo "內網穿透(服務端) k frps" +echo "內網穿透(客戶端) k frpc" +echo "軟件啟動 k start sshd | k 啟動 sshd" +echo "軟件停止 k stop sshd | k 停止 sshd" +echo "軟件重啟 k restart sshd | k 重啟 sshd" +echo "軟件狀態查看 k status sshd | k 狀態 sshd" +echo "軟件開機啟動 k enable docker | k autostart docke | k 開機啟動 docker" +echo "域名證書申請 k ssl" +echo "域名證書到期查詢 k ssl ps" +echo "docker環境安裝 k docker install |k docker 安裝" echo "docker容器管理 k docker ps |k docker 容器" -echo "docker镜像管理 k docker img |k docker 镜像" -echo "LDNMP站点管理 k web" -echo "LDNMP缓存清理 k web cache" -echo "安装WordPress k wp |k wordpress |k wp xxx.com" -echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" -echo "安装负载均衡 k loadbalance |k 负载均衡" -echo "防火墙面板 k fhq |k 防火墙" -echo "开放端口 k dkdk 8080 |k 打开端口 8080" -echo "关闭端口 k gbdk 7800 |k 关闭端口 7800" +echo "docker鏡像管理 k docker img |k docker 鏡像" +echo "LDNMP站點管理 k web" +echo "LDNMP緩存清理 k web cache" +echo "安裝WordPress k wp |k wordpress |k wp xxx.com" +echo "安裝反向代理 k fd |k rp |k 反代 |k fd xxx.com" +echo "安裝負載均衡 k loadbalance |k 負載均衡" +echo "防火牆面板 k fhq |k 防火牆" +echo "開放端口 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 "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" -echo "命令收藏夹 k fav | k 命令收藏夹" -echo "应用市场管理 k app" -echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "命令收藏夾 k fav | k 命令收藏夾" +echo "應用市場管理 k app" +echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" } if [ "$#" -eq 0 ]; then - # 如果没有参数,运行交互式逻辑 + # 如果沒有參數,運行交互式邏輯 kejilion_sh else - # 如果有参数,执行相应函数 + # 如果有參數,執行相應函數 case $1 in install|add|安装) shift - send_stats "安装软件" + send_stats "安裝軟件" install "$@" ;; remove|del|uninstall|卸载) shift - send_stats "卸载软件" + send_stats "卸載軟件" remove "$@" ;; update|更新) @@ -14109,7 +14110,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "定時rsync同步" run_task "$@" ;; @@ -14128,7 +14129,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "已阻止IP+端口访问该服务" + echo "已阻止IP+端口訪問該服務" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14141,13 +14142,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "快速設置虛擬內存" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "快速設置時區" set_timedate "$@" ;; @@ -14195,42 +14196,42 @@ else status|状态) shift - send_stats "软件状态查看" + send_stats "軟件狀態查看" status "$@" ;; start|启动) shift - send_stats "软件启动" + send_stats "軟件啟動" start "$@" ;; stop|停止) shift - send_stats "软件暂停" + send_stats "軟件暫停" stop "$@" ;; restart|重启) shift - send_stats "软件重启" + send_stats "軟件重啟" restart "$@" ;; enable|autostart|开机启动) shift - send_stats "软件开机自启" + send_stats "軟件開機自啟" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "查看证书状态" + send_stats "查看證書狀態" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "快速申请证书" + send_stats "快速申請證書" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "快速申请证书" + send_stats "快速申請證書" else k_info fi @@ -14240,7 +14241,7 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "快捷安裝docker" install_docker ;; ps|容器) @@ -14248,7 +14249,7 @@ else docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "快捷鏡像管理" docker_image ;; *) @@ -14275,7 +14276,7 @@ else app) shift - send_stats "应用$@" + send_stats "應用$@" linux_panel "$@" ;; From c8425328c32b07dca958a6301654caba1fa2b6a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:03:15 +0800 Subject: [PATCH 136/553] Update kejilion.sh --- cn/kejilion.sh | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index dc0846216..dca97b01a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11785,15 +11785,17 @@ while true; do local app_id="97" local docker_name="wireguard" local docker_img="lscr.io/linuxserver/wireguard:latest" - local docker_port=51820 + local docker_port=8097 docker_rum() { read -p "请输入组网的客户端数量 (默认 5): " COUNT COUNT=${COUNT:-5} + read -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK + NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - + ip link delete wg0 &>/dev/null ip_address @@ -11808,8 +11810,8 @@ while true; do -e SERVERURL=${ipv4_address} \ -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ - -e INTERNAL_SUBNET=10.13.13.0 \ - -e ALLOWEDIPS=10.13.13.0/24 \ + -e INTERNAL_SUBNET=${NETWORK} \ + -e ALLOWEDIPS=${NETWORK}/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ @@ -11819,6 +11821,19 @@ while true; do sleep 3 + + docker exec wireguard sh -c " + f='/config/wg_confs/wg0.conf' + # 全局替换所有 51820 为新端口 + sed -i 's/51820/${docker_port}/g' \$f + " + + docker exec wireguard sh -c " + for d in /config/peer_*; do + sed -i 's/51820/${docker_port}/g' \$d/*.conf + done + " + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' docker exec wireguard sh -c ' for d in /config/peer_*; do @@ -11839,10 +11854,12 @@ while true; do done ' + docker restart wireguard + sleep 2 docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 - docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" From f93a8864256b72f640f67bd935d3d4a1caa75baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 28 Aug 2025 10:03:50 +0800 Subject: [PATCH 137/553] Change WireGuard port and update configuration scripts --- kejilion.sh | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index e8af4649c..6e3cd5745 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11785,15 +11785,17 @@ while true; do local app_id="97" local docker_name="wireguard" local docker_img="lscr.io/linuxserver/wireguard:latest" - local docker_port=51820 + local docker_port=8097 docker_rum() { read -p "请输入组网的客户端数量 (默认 5): " COUNT COUNT=${COUNT:-5} + read -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK + NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - + ip link delete wg0 &>/dev/null ip_address @@ -11808,8 +11810,8 @@ while true; do -e SERVERURL=${ipv4_address} \ -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ - -e INTERNAL_SUBNET=10.13.13.0 \ - -e ALLOWEDIPS=10.13.13.0/24 \ + -e INTERNAL_SUBNET=${NETWORK} \ + -e ALLOWEDIPS=${NETWORK}/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ @@ -11819,6 +11821,19 @@ while true; do sleep 3 + + docker exec wireguard sh -c " + f='/config/wg_confs/wg0.conf' + # 全局替换所有 51820 为新端口 + sed -i 's/51820/${docker_port}/g' \$f + " + + docker exec wireguard sh -c " + for d in /config/peer_*; do + sed -i 's/51820/${docker_port}/g' \$d/*.conf + done + " + docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' docker exec wireguard sh -c ' for d in /config/peer_*; do @@ -11839,10 +11854,12 @@ while true; do done ' + docker restart wireguard + sleep 2 docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 - docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}" From 58801f6400ca43bbfbf594d3cac7fd380fea7517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 28 Aug 2025 12:20:35 +0800 Subject: [PATCH 138/553] Update kejilion.sh --- cn/kejilion.sh | 66 +++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index dca97b01a..8fb605605 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter # Run Prometheus container @@ -2958,7 +2958,7 @@ docker run -d \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ --user 0:0 \ prom/prometheus:latest @@ -2968,7 +2968,7 @@ docker run -d \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ grafana/grafana:latest } @@ -3037,7 +3037,7 @@ f2b_install_sshd() { -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/fail2ban:latest sleep 3 @@ -9049,7 +9049,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:ubuntu-kde @@ -9131,7 +9131,7 @@ while true; do -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/qbittorrent:latest } @@ -9366,7 +9366,7 @@ while true; do -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ - --restart unless-stopped \ + --restart=always \ whyour/qinglong:latest @@ -9432,7 +9432,7 @@ while true; do -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ - --restart unless-stopped \ + --restart=always \ ddsderek/easyimage:latest } @@ -9749,7 +9749,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:latest } @@ -9812,7 +9812,7 @@ while true; do 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 + docker run -d --name dockge --restart=always -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 } @@ -9854,7 +9854,7 @@ while true; do docker run -d \ --name searxng \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v "/home/docker/searxng:/etc/searxng" \ searxng/searxng @@ -10008,7 +10008,7 @@ while true; do docker_rum() { - docker run -d --restart unless-stopped \ + docker run -d --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ @@ -10162,7 +10162,7 @@ while true; do -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ + --restart=always \ germannewsmaker/nexterm:latest } @@ -10183,7 +10183,7 @@ while true; do docker_rum() { - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs } @@ -10204,7 +10204,7 @@ while true; do docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr } @@ -10313,7 +10313,7 @@ while true; do docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter @@ -10337,7 +10337,7 @@ while true; do docker run -d \ --name=cadvisor \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ @@ -10708,7 +10708,7 @@ while true; do local docker_port=8064 docker_rum() { - docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest + docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" @@ -10852,7 +10852,7 @@ while true; do -p 6199:6199 \ -p 11451:11451 \ -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ + --restart=always \ --name astrbot \ soulter/astrbot:latest @@ -10877,7 +10877,7 @@ while true; do docker run -d \ --name navidrome \ - --restart=unless-stopped \ + --restart=always \ --user $(id -u):$(id -g) \ -v /home/docker/navidrome/music:/music \ -v /home/docker/navidrome/data:/data \ @@ -10939,7 +10939,7 @@ while true; do docker run -d \ --name libretv \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -e PASSWORD=${app_passwd} \ bestzwei/libretv:latest @@ -11020,7 +11020,7 @@ while true; do docker run -d \ --name melody \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:5566 \ -v /home/docker/melody/.profile:/app/backend/.profile \ foamzou/melody:latest @@ -11049,7 +11049,7 @@ while true; do docker_rum() { docker run -d \ --name dosgame \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:262 \ oldiy/dosgame-web-docker:latest @@ -11079,7 +11079,7 @@ while true; do docker run -d \ --name xunlei \ - --restart unless-stopped \ + --restart=always \ --privileged \ -e XL_DASHBOARD_USERNAME=${app_use} \ -e XL_DASHBOARD_PASSWORD=${app_passwd} \ @@ -11141,7 +11141,7 @@ while true; do mkdir -p /home/docker/beszel && \ docker run -d \ --name beszel \ - --restart=unless-stopped \ + --restart=always \ -v /home/docker/beszel:/beszel_data \ -p ${docker_port}:8090 \ henrygd/beszel @@ -11359,7 +11359,7 @@ while true; do -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=UTC \ -p ${docker_port}:80 \ - --restart unless-stopped \ + --restart=always \ bellamy/wallos:latest } @@ -11436,7 +11436,7 @@ while true; do --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ -p ${docker_port}:8096 \ -p 7359:7359/udp \ - --restart=unless-stopped \ + --restart=always \ jellyfin/jellyfin @@ -11524,7 +11524,7 @@ while true; do --name file-code-box \ -p ${docker_port}:12345 \ -v /home/docker/file-code-box/data:/app/data \ - --restart unless-stopped \ + --restart=always \ lanol/filecodebox:latest } @@ -11565,7 +11565,7 @@ while true; do --name matrix \ -v /home/docker/matrix/data:/data \ -p ${docker_port}:8008 \ - --restart unless-stopped \ + --restart=always \ matrixdotorg/synapse:latest echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" @@ -11655,7 +11655,7 @@ while true; do docker run -d \ --name filebrowser \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/filebrowser/data:/data \ -v /home/docker/filebrowser/config:/config \ @@ -11684,7 +11684,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}:/data \ -p ${docker_port}:5000 \ ${docker_img} /data -A @@ -11714,7 +11714,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}/downloads:/app/Downloads \ -v /home/docker/${docker_name}/storage:/app/storage \ -p ${docker_port}:9999 \ @@ -11816,7 +11816,7 @@ while true; do -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/wireguard:latest From a4751d4ec424c8a33ec2e4eedc700c9dc19f71f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 28 Aug 2025 12:22:04 +0800 Subject: [PATCH 139/553] Change Docker restart policy to always --- kejilion.sh | 66 ++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 6e3cd5745..216548b03 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter # Run Prometheus container @@ -2958,7 +2958,7 @@ docker run -d \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ --user 0:0 \ prom/prometheus:latest @@ -2968,7 +2968,7 @@ docker run -d \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ grafana/grafana:latest } @@ -3037,7 +3037,7 @@ f2b_install_sshd() { -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/fail2ban:latest sleep 3 @@ -9049,7 +9049,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:ubuntu-kde @@ -9131,7 +9131,7 @@ while true; do -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/qbittorrent:latest } @@ -9366,7 +9366,7 @@ while true; do -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ - --restart unless-stopped \ + --restart=always \ whyour/qinglong:latest @@ -9432,7 +9432,7 @@ while true; do -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ - --restart unless-stopped \ + --restart=always \ ddsderek/easyimage:latest } @@ -9749,7 +9749,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:latest } @@ -9812,7 +9812,7 @@ while true; do 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 + docker run -d --name dockge --restart=always -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 } @@ -9854,7 +9854,7 @@ while true; do docker run -d \ --name searxng \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v "/home/docker/searxng:/etc/searxng" \ searxng/searxng @@ -10008,7 +10008,7 @@ while true; do docker_rum() { - docker run -d --restart unless-stopped \ + docker run -d --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ @@ -10162,7 +10162,7 @@ while true; do -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ + --restart=always \ germannewsmaker/nexterm:latest } @@ -10183,7 +10183,7 @@ while true; do docker_rum() { - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs } @@ -10204,7 +10204,7 @@ while true; do docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr } @@ -10313,7 +10313,7 @@ while true; do docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter @@ -10337,7 +10337,7 @@ while true; do docker run -d \ --name=cadvisor \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ @@ -10708,7 +10708,7 @@ while true; do local docker_port=8064 docker_rum() { - docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest + docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" @@ -10852,7 +10852,7 @@ while true; do -p 6199:6199 \ -p 11451:11451 \ -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ + --restart=always \ --name astrbot \ soulter/astrbot:latest @@ -10877,7 +10877,7 @@ while true; do docker run -d \ --name navidrome \ - --restart=unless-stopped \ + --restart=always \ --user $(id -u):$(id -g) \ -v /home/docker/navidrome/music:/music \ -v /home/docker/navidrome/data:/data \ @@ -10939,7 +10939,7 @@ while true; do docker run -d \ --name libretv \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -e PASSWORD=${app_passwd} \ bestzwei/libretv:latest @@ -11020,7 +11020,7 @@ while true; do docker run -d \ --name melody \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:5566 \ -v /home/docker/melody/.profile:/app/backend/.profile \ foamzou/melody:latest @@ -11049,7 +11049,7 @@ while true; do docker_rum() { docker run -d \ --name dosgame \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:262 \ oldiy/dosgame-web-docker:latest @@ -11079,7 +11079,7 @@ while true; do docker run -d \ --name xunlei \ - --restart unless-stopped \ + --restart=always \ --privileged \ -e XL_DASHBOARD_USERNAME=${app_use} \ -e XL_DASHBOARD_PASSWORD=${app_passwd} \ @@ -11141,7 +11141,7 @@ while true; do mkdir -p /home/docker/beszel && \ docker run -d \ --name beszel \ - --restart=unless-stopped \ + --restart=always \ -v /home/docker/beszel:/beszel_data \ -p ${docker_port}:8090 \ henrygd/beszel @@ -11359,7 +11359,7 @@ while true; do -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=UTC \ -p ${docker_port}:80 \ - --restart unless-stopped \ + --restart=always \ bellamy/wallos:latest } @@ -11436,7 +11436,7 @@ while true; do --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ -p ${docker_port}:8096 \ -p 7359:7359/udp \ - --restart=unless-stopped \ + --restart=always \ jellyfin/jellyfin @@ -11524,7 +11524,7 @@ while true; do --name file-code-box \ -p ${docker_port}:12345 \ -v /home/docker/file-code-box/data:/app/data \ - --restart unless-stopped \ + --restart=always \ lanol/filecodebox:latest } @@ -11565,7 +11565,7 @@ while true; do --name matrix \ -v /home/docker/matrix/data:/data \ -p ${docker_port}:8008 \ - --restart unless-stopped \ + --restart=always \ matrixdotorg/synapse:latest echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。" @@ -11655,7 +11655,7 @@ while true; do docker run -d \ --name filebrowser \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/filebrowser/data:/data \ -v /home/docker/filebrowser/config:/config \ @@ -11684,7 +11684,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}:/data \ -p ${docker_port}:5000 \ ${docker_img} /data -A @@ -11714,7 +11714,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}/downloads:/app/Downloads \ -v /home/docker/${docker_name}/storage:/app/storage \ -p ${docker_port}:9999 \ @@ -11816,7 +11816,7 @@ while true; do -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/wireguard:latest From accc7e95ca90fbaf886b10cdc9e57e6a1a75a966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 07:48:59 +0800 Subject: [PATCH 140/553] Update kejilion.sh --- cn/kejilion.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8fb605605..ffbd27911 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11824,7 +11824,6 @@ while true; do docker exec wireguard sh -c " f='/config/wg_confs/wg0.conf' - # 全局替换所有 51820 为新端口 sed -i 's/51820/${docker_port}/g' \$f " @@ -11834,12 +11833,18 @@ while true; do done " - docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + sed -i "/^DNS/i MTU = 1420" "$d"/*.conf + sed -i "/^DNS/d" "$d"/*.conf + done + ' + docker exec wireguard sh -c ' for d in /config/peer_*; do for f in "$d"/*.conf; do - grep -q "^PersistentKeepalive *= *25$" "$f" || \ - sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + grep -q "^PersistentKeepalive" "$f" || \ + sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f" done done ' @@ -11849,7 +11854,6 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二维码: $base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' From 41e3f9bd7e4ba81e65c04d2f2c9c22c308b8e806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 07:49:36 +0800 Subject: [PATCH 141/553] Modify WireGuard config handling in kejilion.sh Replace DNS entries and update PersistentKeepalive settings in WireGuard configuration files. --- kejilion.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 216548b03..7c5ceba3b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11824,7 +11824,6 @@ while true; do docker exec wireguard sh -c " f='/config/wg_confs/wg0.conf' - # 全局替换所有 51820 为新端口 sed -i 's/51820/${docker_port}/g' \$f " @@ -11834,12 +11833,18 @@ while true; do done " - docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + docker exec wireguard sh -c ' + for d in /config/peer_*; do + sed -i "/^DNS/i MTU = 1420" "$d"/*.conf + sed -i "/^DNS/d" "$d"/*.conf + done + ' + docker exec wireguard sh -c ' for d in /config/peer_*; do for f in "$d"/*.conf; do - grep -q "^PersistentKeepalive *= *25$" "$f" || \ - sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + grep -q "^PersistentKeepalive" "$f" || \ + sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f" done done ' @@ -11849,7 +11854,6 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二维码: $base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' From 010337cb936814e0d42bbc3355aa8a5ca45a2caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 09:41:51 +0800 Subject: [PATCH 142/553] Update kejilion.sh --- cn/kejilion.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index ffbd27911..7d6b52605 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11835,7 +11835,6 @@ while true; do docker exec wireguard sh -c ' for d in /config/peer_*; do - sed -i "/^DNS/i MTU = 1420" "$d"/*.conf sed -i "/^DNS/d" "$d"/*.conf done ' From 4cf9c4e4c1fdd61a5abedf0eb990a027fdae0cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 09:42:23 +0800 Subject: [PATCH 143/553] Modify peer configuration in kejilion.sh --- kejilion.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 7c5ceba3b..d2293f10c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11835,7 +11835,6 @@ while true; do docker exec wireguard sh -c ' for d in /config/peer_*; do - sed -i "/^DNS/i MTU = 1420" "$d"/*.conf sed -i "/^DNS/d" "$d"/*.conf done ' From fbdd845fc884cc45fc7af18302e2024b53ae09b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 09:51:03 +0800 Subject: [PATCH 144/553] Enhance output for client configurations in kejilion.sh --- cn/kejilion.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 7d6b52605..b40319141 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11860,8 +11860,12 @@ while true; do docker restart wireguard sleep 2 + echo + echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 + echo + echo -e "${gl_huang}所有客户端配置代码: ${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" From 3841a90467a6f070ae6d6ea8ce4e4cae0785690f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 09:52:06 +0800 Subject: [PATCH 145/553] Enhance kejilion.sh with client config outputs --- kejilion.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index d2293f10c..263b9fe54 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11860,8 +11860,12 @@ while true; do docker restart wireguard sleep 2 + echo + echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 + echo + echo -e "${gl_huang}所有客户端配置代码: ${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}" From 12f74d47e9a1c68ee2eaf2db20ba427aec75756d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 29 Aug 2025 03:21:28 +0000 Subject: [PATCH 146/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-29=2003:21:28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 110 +++++++++++++++++++++++++++------------------ jp/kejilion.sh | 118 +++++++++++++++++++++++++++++-------------------- kr/kejilion.sh | 110 +++++++++++++++++++++++++++------------------ tw/kejilion.sh | 108 ++++++++++++++++++++++++++------------------ 4 files changed, 271 insertions(+), 175 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 1b54f388d..bbd681882 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1558,7 +1558,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter # Run Prometheus container @@ -2958,7 +2958,7 @@ docker run -d \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ --user 0:0 \ prom/prometheus:latest @@ -2968,7 +2968,7 @@ docker run -d \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ grafana/grafana:latest } @@ -3037,7 +3037,7 @@ f2b_install_sshd() { -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/fail2ban:latest sleep 3 @@ -9049,7 +9049,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:ubuntu-kde @@ -9131,7 +9131,7 @@ while true; do -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/qbittorrent:latest } @@ -9366,7 +9366,7 @@ while true; do -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ - --restart unless-stopped \ + --restart=always \ whyour/qinglong:latest @@ -9432,7 +9432,7 @@ while true; do -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ - --restart unless-stopped \ + --restart=always \ ddsderek/easyimage:latest } @@ -9749,7 +9749,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:latest } @@ -9812,7 +9812,7 @@ while true; do 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 + docker run -d --name dockge --restart=always -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 } @@ -9854,7 +9854,7 @@ while true; do docker run -d \ --name searxng \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v "/home/docker/searxng:/etc/searxng" \ searxng/searxng @@ -10008,7 +10008,7 @@ while true; do docker_rum() { - docker run -d --restart unless-stopped \ + docker run -d --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ @@ -10162,7 +10162,7 @@ while true; do -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ + --restart=always \ germannewsmaker/nexterm:latest } @@ -10183,7 +10183,7 @@ while true; do docker_rum() { - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs } @@ -10204,7 +10204,7 @@ while true; do docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr } @@ -10313,7 +10313,7 @@ while true; do docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter @@ -10337,7 +10337,7 @@ while true; do docker run -d \ --name=cadvisor \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ @@ -10708,7 +10708,7 @@ while true; do local docker_port=8064 docker_rum() { - docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest + docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" @@ -10852,7 +10852,7 @@ while true; do -p 6199:6199 \ -p 11451:11451 \ -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ + --restart=always \ --name astrbot \ soulter/astrbot:latest @@ -10877,7 +10877,7 @@ while true; do docker run -d \ --name navidrome \ - --restart=unless-stopped \ + --restart=always \ --user $(id -u):$(id -g) \ -v /home/docker/navidrome/music:/music \ -v /home/docker/navidrome/data:/data \ @@ -10939,7 +10939,7 @@ while true; do docker run -d \ --name libretv \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -e PASSWORD=${app_passwd} \ bestzwei/libretv:latest @@ -11020,7 +11020,7 @@ while true; do docker run -d \ --name melody \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:5566 \ -v /home/docker/melody/.profile:/app/backend/.profile \ foamzou/melody:latest @@ -11049,7 +11049,7 @@ while true; do docker_rum() { docker run -d \ --name dosgame \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:262 \ oldiy/dosgame-web-docker:latest @@ -11079,7 +11079,7 @@ while true; do docker run -d \ --name xunlei \ - --restart unless-stopped \ + --restart=always \ --privileged \ -e XL_DASHBOARD_USERNAME=${app_use} \ -e XL_DASHBOARD_PASSWORD=${app_passwd} \ @@ -11141,7 +11141,7 @@ while true; do mkdir -p /home/docker/beszel && \ docker run -d \ --name beszel \ - --restart=unless-stopped \ + --restart=always \ -v /home/docker/beszel:/beszel_data \ -p ${docker_port}:8090 \ henrygd/beszel @@ -11359,7 +11359,7 @@ while true; do -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=UTC \ -p ${docker_port}:80 \ - --restart unless-stopped \ + --restart=always \ bellamy/wallos:latest } @@ -11436,7 +11436,7 @@ while true; do --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ -p ${docker_port}:8096 \ -p 7359:7359/udp \ - --restart=unless-stopped \ + --restart=always \ jellyfin/jellyfin @@ -11524,7 +11524,7 @@ while true; do --name file-code-box \ -p ${docker_port}:12345 \ -v /home/docker/file-code-box/data:/app/data \ - --restart unless-stopped \ + --restart=always \ lanol/filecodebox:latest } @@ -11565,7 +11565,7 @@ while true; do --name matrix \ -v /home/docker/matrix/data:/data \ -p ${docker_port}:8008 \ - --restart unless-stopped \ + --restart=always \ matrixdotorg/synapse:latest echo "Create an initial user or administrator. Please set the following username and password and whether you are an administrator." @@ -11655,7 +11655,7 @@ while true; do docker run -d \ --name filebrowser \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/filebrowser/data:/data \ -v /home/docker/filebrowser/config:/config \ @@ -11684,7 +11684,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}:/data \ -p ${docker_port}:5000 \ ${docker_img} /data -A @@ -11714,7 +11714,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}/downloads:/app/Downloads \ -v /home/docker/${docker_name}/storage:/app/storage \ -p ${docker_port}:9999 \ @@ -11785,15 +11785,17 @@ while true; do local app_id="97" local docker_name="wireguard" local docker_img="lscr.io/linuxserver/wireguard:latest" - local docker_port=51820 + local docker_port=8097 docker_rum() { read -p "Please enter the number of clients to form the network (default 5):" COUNT COUNT=${COUNT:-5} + read -p "Please enter the WireGuard segment (default 10.13.13.0):" NETWORK + NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - + ip link delete wg0 &>/dev/null ip_address @@ -11808,23 +11810,40 @@ while true; do -e SERVERURL=${ipv4_address} \ -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ - -e INTERNAL_SUBNET=10.13.13.0 \ - -e ALLOWEDIPS=10.13.13.0/24 \ + -e INTERNAL_SUBNET=${NETWORK} \ + -e ALLOWEDIPS=${NETWORK}/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/wireguard:latest sleep 3 - docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + + docker exec wireguard sh -c " + f='/config/wg_confs/wg0.conf' + sed -i 's/51820/${docker_port}/g' \$f + " + + docker exec wireguard sh -c " + for d in /config/peer_*; do + sed -i 's/51820/${docker_port}/g' \$d/*.conf + done + " + + docker exec wireguard sh -c ' + for d in /config/peer_*; do + sed -i "/^DNS/d" "$d"/*.conf + done + ' + docker exec wireguard sh -c ' for d in /config/peer_*; do for f in "$d"/*.conf; do - grep -q "^PersistentKeepalive *= *25$" "$f" || \ - sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + grep -q "^PersistentKeepalive" "$f" || \ + sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f" done done ' @@ -11834,15 +11853,20 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "Generate QR code:$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' + docker restart wireguard + sleep 2 + echo + echo -e "${gl_huang}All client QR code configuration:${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 - docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + echo + echo -e "${gl_huang}All client configuration codes:${gl_bai}" + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}All outputs are provided by each client. The usage method is as follows:${gl_bai}" echo -e "${gl_lv}1. Download wg's APP on your mobile phone, scan the QR code above to quickly connect to the network${gl_bai}" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 4f60c7f2e..49903c967 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -793,7 +793,7 @@ docker_ipv6_on() { 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 @@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter # Run Prometheus container @@ -2958,7 +2958,7 @@ docker run -d \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ --user 0:0 \ prom/prometheus:latest @@ -2968,7 +2968,7 @@ docker run -d \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ grafana/grafana:latest } @@ -3037,7 +3037,7 @@ f2b_install_sshd() { -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/fail2ban:latest sleep 3 @@ -6557,7 +6557,7 @@ linux_tools() { 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}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}ヘビを食べるゲーム" @@ -9049,7 +9049,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:ubuntu-kde @@ -9131,7 +9131,7 @@ while true; do -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/qbittorrent:latest } @@ -9366,7 +9366,7 @@ while true; do -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ - --restart unless-stopped \ + --restart=always \ whyour/qinglong:latest @@ -9432,7 +9432,7 @@ while true; do -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ - --restart unless-stopped \ + --restart=always \ ddsderek/easyimage:latest } @@ -9749,7 +9749,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:latest } @@ -9812,7 +9812,7 @@ while true; do 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 + docker run -d --name dockge --restart=always -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 } @@ -9854,7 +9854,7 @@ while true; do docker run -d \ --name searxng \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v "/home/docker/searxng:/etc/searxng" \ searxng/searxng @@ -10008,7 +10008,7 @@ while true; do docker_rum() { - docker run -d --restart unless-stopped \ + docker run -d --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ @@ -10162,7 +10162,7 @@ while true; do -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ + --restart=always \ germannewsmaker/nexterm:latest } @@ -10183,7 +10183,7 @@ while true; do docker_rum() { - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs } @@ -10204,7 +10204,7 @@ while true; do docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr } @@ -10313,7 +10313,7 @@ while true; do docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter @@ -10337,7 +10337,7 @@ while true; do docker run -d \ --name=cadvisor \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ @@ -10708,7 +10708,7 @@ while true; do local docker_port=8064 docker_rum() { - docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest + docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" @@ -10852,7 +10852,7 @@ while true; do -p 6199:6199 \ -p 11451:11451 \ -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ + --restart=always \ --name astrbot \ soulter/astrbot:latest @@ -10877,7 +10877,7 @@ while true; do docker run -d \ --name navidrome \ - --restart=unless-stopped \ + --restart=always \ --user $(id -u):$(id -g) \ -v /home/docker/navidrome/music:/music \ -v /home/docker/navidrome/data:/data \ @@ -10939,7 +10939,7 @@ while true; do docker run -d \ --name libretv \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -e PASSWORD=${app_passwd} \ bestzwei/libretv:latest @@ -11020,7 +11020,7 @@ while true; do docker run -d \ --name melody \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:5566 \ -v /home/docker/melody/.profile:/app/backend/.profile \ foamzou/melody:latest @@ -11049,7 +11049,7 @@ while true; do docker_rum() { docker run -d \ --name dosgame \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:262 \ oldiy/dosgame-web-docker:latest @@ -11079,7 +11079,7 @@ while true; do docker run -d \ --name xunlei \ - --restart unless-stopped \ + --restart=always \ --privileged \ -e XL_DASHBOARD_USERNAME=${app_use} \ -e XL_DASHBOARD_PASSWORD=${app_passwd} \ @@ -11141,7 +11141,7 @@ while true; do mkdir -p /home/docker/beszel && \ docker run -d \ --name beszel \ - --restart=unless-stopped \ + --restart=always \ -v /home/docker/beszel:/beszel_data \ -p ${docker_port}:8090 \ henrygd/beszel @@ -11359,7 +11359,7 @@ while true; do -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=UTC \ -p ${docker_port}:80 \ - --restart unless-stopped \ + --restart=always \ bellamy/wallos:latest } @@ -11436,7 +11436,7 @@ while true; do --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ -p ${docker_port}:8096 \ -p 7359:7359/udp \ - --restart=unless-stopped \ + --restart=always \ jellyfin/jellyfin @@ -11524,7 +11524,7 @@ while true; do --name file-code-box \ -p ${docker_port}:12345 \ -v /home/docker/file-code-box/data:/app/data \ - --restart unless-stopped \ + --restart=always \ lanol/filecodebox:latest } @@ -11565,7 +11565,7 @@ while true; do --name matrix \ -v /home/docker/matrix/data:/data \ -p ${docker_port}:8008 \ - --restart unless-stopped \ + --restart=always \ matrixdotorg/synapse:latest echo "初期ユーザーまたは管理者を作成します。次のユーザー名とパスワード、およびあなたが管理者であるかどうかを設定してください。" @@ -11655,7 +11655,7 @@ while true; do docker run -d \ --name filebrowser \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/filebrowser/data:/data \ -v /home/docker/filebrowser/config:/config \ @@ -11684,7 +11684,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}:/data \ -p ${docker_port}:5000 \ ${docker_img} /data -A @@ -11714,7 +11714,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}/downloads:/app/Downloads \ -v /home/docker/${docker_name}/storage:/app/storage \ -p ${docker_port}:9999 \ @@ -11785,15 +11785,17 @@ while true; do local app_id="97" local docker_name="wireguard" local docker_img="lscr.io/linuxserver/wireguard:latest" - local docker_port=51820 + local docker_port=8097 docker_rum() { read -p "ネットワークを形成するためにクライアントの数を入力してください(デフォルト5):" COUNT COUNT=${COUNT:-5} + read -p "WireGuardセグメントを入力してください(デフォルト10.13.13.0):" NETWORK + NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - + ip link delete wg0 &>/dev/null ip_address @@ -11808,23 +11810,40 @@ while true; do -e SERVERURL=${ipv4_address} \ -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ - -e INTERNAL_SUBNET=10.13.13.0 \ - -e ALLOWEDIPS=10.13.13.0/24 \ + -e INTERNAL_SUBNET=${NETWORK} \ + -e ALLOWEDIPS=${NETWORK}/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/wireguard:latest sleep 3 - docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + + docker exec wireguard sh -c " + f='/config/wg_confs/wg0.conf' + sed -i 's/51820/${docker_port}/g' \$f + " + + docker exec wireguard sh -c " + for d in /config/peer_*; do + sed -i 's/51820/${docker_port}/g' \$d/*.conf + done + " + + docker exec wireguard sh -c ' + for d in /config/peer_*; do + sed -i "/^DNS/d" "$d"/*.conf + done + ' + docker exec wireguard sh -c ' for d in /config/peer_*; do for f in "$d"/*.conf; do - grep -q "^PersistentKeepalive *= *25$" "$f" || \ - sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + grep -q "^PersistentKeepalive" "$f" || \ + sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f" done done ' @@ -11834,15 +11853,20 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "QRコードを生成します:$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' + docker restart wireguard + sleep 2 + echo + echo -e "${gl_huang}すべてのクライアントQRコード構成:${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 - docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + echo + echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}すべての出力は各クライアントによって提供されます。使用方法は次のとおりです。${gl_bai}" echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}" @@ -12229,7 +12253,7 @@ linux_Settings() { 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}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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" @@ -12393,7 +12417,7 @@ EOF send_stats "SSHポート変更を終了します" break else - echo "ポート番号が無効です。1〜65535の数字を入力してください。" + echo "ポート番号は無効です。1〜65535の数字を入力してください。" send_stats "無効なSSHポート入力" break_end fi @@ -12604,7 +12628,7 @@ EOF ;; 4) read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudo許可を削除します + # sudoersファイルからユーザーのsudoアクセス許可を削除します sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 7aed0d70d..f5581ad44 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1664,7 +1664,7 @@ cf_purge_cache() { # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트하십시오 + # 캐시 청소 여부를 사용자에게 프롬프트합니다 read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer if [[ "$answer" == "y" ]]; then echo "CF 정보가 저장됩니다$CONFIG_FILE, 나중에 CF 정보를 수정할 수 있습니다" @@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter # Run Prometheus container @@ -2958,7 +2958,7 @@ docker run -d \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ --user 0:0 \ prom/prometheus:latest @@ -2968,7 +2968,7 @@ docker run -d \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ grafana/grafana:latest } @@ -3037,7 +3037,7 @@ f2b_install_sshd() { -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/fail2ban:latest sleep 3 @@ -9049,7 +9049,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:ubuntu-kde @@ -9131,7 +9131,7 @@ while true; do -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/qbittorrent:latest } @@ -9366,7 +9366,7 @@ while true; do -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ - --restart unless-stopped \ + --restart=always \ whyour/qinglong:latest @@ -9432,7 +9432,7 @@ while true; do -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ - --restart unless-stopped \ + --restart=always \ ddsderek/easyimage:latest } @@ -9749,7 +9749,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:latest } @@ -9812,7 +9812,7 @@ while true; do 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 + docker run -d --name dockge --restart=always -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 } @@ -9854,7 +9854,7 @@ while true; do docker run -d \ --name searxng \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v "/home/docker/searxng:/etc/searxng" \ searxng/searxng @@ -10008,7 +10008,7 @@ while true; do docker_rum() { - docker run -d --restart unless-stopped \ + docker run -d --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ @@ -10162,7 +10162,7 @@ while true; do -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ + --restart=always \ germannewsmaker/nexterm:latest } @@ -10183,7 +10183,7 @@ while true; do docker_rum() { - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs } @@ -10204,7 +10204,7 @@ while true; do docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr } @@ -10313,7 +10313,7 @@ while true; do docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter @@ -10337,7 +10337,7 @@ while true; do docker run -d \ --name=cadvisor \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ @@ -10708,7 +10708,7 @@ while true; do local docker_port=8064 docker_rum() { - docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest + docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" @@ -10852,7 +10852,7 @@ while true; do -p 6199:6199 \ -p 11451:11451 \ -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ + --restart=always \ --name astrbot \ soulter/astrbot:latest @@ -10877,7 +10877,7 @@ while true; do docker run -d \ --name navidrome \ - --restart=unless-stopped \ + --restart=always \ --user $(id -u):$(id -g) \ -v /home/docker/navidrome/music:/music \ -v /home/docker/navidrome/data:/data \ @@ -10939,7 +10939,7 @@ while true; do docker run -d \ --name libretv \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -e PASSWORD=${app_passwd} \ bestzwei/libretv:latest @@ -11020,7 +11020,7 @@ while true; do docker run -d \ --name melody \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:5566 \ -v /home/docker/melody/.profile:/app/backend/.profile \ foamzou/melody:latest @@ -11049,7 +11049,7 @@ while true; do docker_rum() { docker run -d \ --name dosgame \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:262 \ oldiy/dosgame-web-docker:latest @@ -11079,7 +11079,7 @@ while true; do docker run -d \ --name xunlei \ - --restart unless-stopped \ + --restart=always \ --privileged \ -e XL_DASHBOARD_USERNAME=${app_use} \ -e XL_DASHBOARD_PASSWORD=${app_passwd} \ @@ -11141,7 +11141,7 @@ while true; do mkdir -p /home/docker/beszel && \ docker run -d \ --name beszel \ - --restart=unless-stopped \ + --restart=always \ -v /home/docker/beszel:/beszel_data \ -p ${docker_port}:8090 \ henrygd/beszel @@ -11359,7 +11359,7 @@ while true; do -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=UTC \ -p ${docker_port}:80 \ - --restart unless-stopped \ + --restart=always \ bellamy/wallos:latest } @@ -11436,7 +11436,7 @@ while true; do --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ -p ${docker_port}:8096 \ -p 7359:7359/udp \ - --restart=unless-stopped \ + --restart=always \ jellyfin/jellyfin @@ -11524,7 +11524,7 @@ while true; do --name file-code-box \ -p ${docker_port}:12345 \ -v /home/docker/file-code-box/data:/app/data \ - --restart unless-stopped \ + --restart=always \ lanol/filecodebox:latest } @@ -11565,7 +11565,7 @@ while true; do --name matrix \ -v /home/docker/matrix/data:/data \ -p ${docker_port}:8008 \ - --restart unless-stopped \ + --restart=always \ matrixdotorg/synapse:latest echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." @@ -11655,7 +11655,7 @@ while true; do docker run -d \ --name filebrowser \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/filebrowser/data:/data \ -v /home/docker/filebrowser/config:/config \ @@ -11684,7 +11684,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}:/data \ -p ${docker_port}:5000 \ ${docker_img} /data -A @@ -11714,7 +11714,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}/downloads:/app/Downloads \ -v /home/docker/${docker_name}/storage:/app/storage \ -p ${docker_port}:9999 \ @@ -11785,15 +11785,17 @@ while true; do local app_id="97" local docker_name="wireguard" local docker_img="lscr.io/linuxserver/wireguard:latest" - local docker_port=51820 + local docker_port=8097 docker_rum() { read -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT COUNT=${COUNT:-5} + read -p "Wireguard 세그먼트를 입력하십시오 (기본값 10.13.13.0) :" NETWORK + NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - + ip link delete wg0 &>/dev/null ip_address @@ -11808,23 +11810,40 @@ while true; do -e SERVERURL=${ipv4_address} \ -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ - -e INTERNAL_SUBNET=10.13.13.0 \ - -e ALLOWEDIPS=10.13.13.0/24 \ + -e INTERNAL_SUBNET=${NETWORK} \ + -e ALLOWEDIPS=${NETWORK}/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/wireguard:latest sleep 3 - docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + + docker exec wireguard sh -c " + f='/config/wg_confs/wg0.conf' + sed -i 's/51820/${docker_port}/g' \$f + " + + docker exec wireguard sh -c " + for d in /config/peer_*; do + sed -i 's/51820/${docker_port}/g' \$d/*.conf + done + " + + docker exec wireguard sh -c ' + for d in /config/peer_*; do + sed -i "/^DNS/d" "$d"/*.conf + done + ' + docker exec wireguard sh -c ' for d in /config/peer_*; do for f in "$d"/*.conf; do - grep -q "^PersistentKeepalive *= *25$" "$f" || \ - sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + grep -q "^PersistentKeepalive" "$f" || \ + sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f" done done ' @@ -11834,15 +11853,20 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "QR 코드 생성 :$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' + docker restart wireguard + sleep 2 + echo + echo -e "${gl_huang}모든 클라이언트 QR 코드 구성 :${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 - docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + echo + echo -e "${gl_huang}모든 클라이언트 구성 코드 :${gl_bai}" + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}모든 출력은 각 클라이언트가 제공합니다. 사용법은 다음과 같습니다.${gl_bai}" echo -e "${gl_lv}1. 휴대 전화에서 WG의 앱을 다운로드하고 위의 QR 코드를 스캔하여 네트워크에 빠르게 연결하십시오.${gl_bai}" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 960b74c13..982ef2ad2 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME docker run -d \ --name=node-exporter \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter # Run Prometheus container @@ -2958,7 +2958,7 @@ docker run -d \ -v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \ -v $PROMETHEUS_DIR/data:/prometheus \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ --user 0:0 \ prom/prometheus:latest @@ -2968,7 +2968,7 @@ docker run -d \ -p ${docker_port}:3000 \ -v $GRAFANA_DIR:/var/lib/grafana \ --network $NETWORK_NAME \ - --restart unless-stopped \ + --restart=always \ grafana/grafana:latest } @@ -3037,7 +3037,7 @@ f2b_install_sshd() { -v /path/to/fail2ban/config:/config \ -v /var/log:/var/log:ro \ -v /home/web/log/nginx/:/remotelogs/nginx:ro \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/fail2ban:latest sleep 3 @@ -9049,7 +9049,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:ubuntu-kde @@ -9131,7 +9131,7 @@ while true; do -p 56881:56881/udp \ -v /home/docker/qbittorrent/config:/config \ -v /home/docker/qbittorrent/downloads:/downloads \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/qbittorrent:latest } @@ -9366,7 +9366,7 @@ while true; do -p ${docker_port}:5700 \ --name qinglong \ --hostname qinglong \ - --restart unless-stopped \ + --restart=always \ whyour/qinglong:latest @@ -9432,7 +9432,7 @@ while true; do -e PGID=1000 \ -v /home/docker/easyimage/config:/app/web/config \ -v /home/docker/easyimage/i:/app/web/i \ - --restart unless-stopped \ + --restart=always \ ddsderek/easyimage:latest } @@ -9749,7 +9749,7 @@ while true; do -v /home/docker/webtop/data:/config \ -v /var/run/docker.sock:/var/run/docker.sock \ --shm-size="1gb" \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/webtop:latest } @@ -9812,7 +9812,7 @@ while true; do 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 + docker run -d --name dockge --restart=always -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 } @@ -9854,7 +9854,7 @@ while true; do docker run -d \ --name searxng \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v "/home/docker/searxng:/etc/searxng" \ searxng/searxng @@ -10008,7 +10008,7 @@ while true; do docker_rum() { - docker run -d --restart unless-stopped \ + docker run -d --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/moments/data:/app/data \ -v /etc/localtime:/etc/localtime:ro \ @@ -10162,7 +10162,7 @@ while true; do -e ENCRYPTION_KEY=${ENCRYPTION_KEY} \ -p ${docker_port}:6989 \ -v /home/docker/nexterm:/app/data \ - --restart unless-stopped \ + --restart=always \ germannewsmaker/nexterm:latest } @@ -10183,7 +10183,7 @@ while true; do docker_rum() { - docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs + docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs } @@ -10204,7 +10204,7 @@ while true; do docker_rum() { - docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr + docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr } @@ -10313,7 +10313,7 @@ while true; do docker run -d \ --name=node-exporter \ -p ${docker_port}:9100 \ - --restart unless-stopped \ + --restart=always \ prom/node-exporter @@ -10337,7 +10337,7 @@ while true; do docker run -d \ --name=cadvisor \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ @@ -10708,7 +10708,7 @@ while true; do local docker_port=8064 docker_rum() { - docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest + docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" @@ -10852,7 +10852,7 @@ while true; do -p 6199:6199 \ -p 11451:11451 \ -v /home/docker/astrbot/data:/AstrBot/data \ - --restart unless-stopped \ + --restart=always \ --name astrbot \ soulter/astrbot:latest @@ -10877,7 +10877,7 @@ while true; do docker run -d \ --name navidrome \ - --restart=unless-stopped \ + --restart=always \ --user $(id -u):$(id -g) \ -v /home/docker/navidrome/music:/music \ -v /home/docker/navidrome/data:/data \ @@ -10939,7 +10939,7 @@ while true; do docker run -d \ --name libretv \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -e PASSWORD=${app_passwd} \ bestzwei/libretv:latest @@ -11020,7 +11020,7 @@ while true; do docker run -d \ --name melody \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:5566 \ -v /home/docker/melody/.profile:/app/backend/.profile \ foamzou/melody:latest @@ -11049,7 +11049,7 @@ while true; do docker_rum() { docker run -d \ --name dosgame \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:262 \ oldiy/dosgame-web-docker:latest @@ -11079,7 +11079,7 @@ while true; do docker run -d \ --name xunlei \ - --restart unless-stopped \ + --restart=always \ --privileged \ -e XL_DASHBOARD_USERNAME=${app_use} \ -e XL_DASHBOARD_PASSWORD=${app_passwd} \ @@ -11141,7 +11141,7 @@ while true; do mkdir -p /home/docker/beszel && \ docker run -d \ --name beszel \ - --restart=unless-stopped \ + --restart=always \ -v /home/docker/beszel:/beszel_data \ -p ${docker_port}:8090 \ henrygd/beszel @@ -11359,7 +11359,7 @@ while true; do -v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=UTC \ -p ${docker_port}:80 \ - --restart unless-stopped \ + --restart=always \ bellamy/wallos:latest } @@ -11436,7 +11436,7 @@ while true; do --mount type=bind,source=/home/docker/jellyfin/media,target=/media \ -p ${docker_port}:8096 \ -p 7359:7359/udp \ - --restart=unless-stopped \ + --restart=always \ jellyfin/jellyfin @@ -11524,7 +11524,7 @@ while true; do --name file-code-box \ -p ${docker_port}:12345 \ -v /home/docker/file-code-box/data:/app/data \ - --restart unless-stopped \ + --restart=always \ lanol/filecodebox:latest } @@ -11565,7 +11565,7 @@ while true; do --name matrix \ -v /home/docker/matrix/data:/data \ -p ${docker_port}:8008 \ - --restart unless-stopped \ + --restart=always \ matrixdotorg/synapse:latest echo "創建初始用戶或管理員。請設置以下內容用戶名和密碼以及是否為管理員。" @@ -11655,7 +11655,7 @@ while true; do docker run -d \ --name filebrowser \ - --restart unless-stopped \ + --restart=always \ -p ${docker_port}:8080 \ -v /home/docker/filebrowser/data:/data \ -v /home/docker/filebrowser/config:/config \ @@ -11684,7 +11684,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}:/data \ -p ${docker_port}:5000 \ ${docker_img} /data -A @@ -11714,7 +11714,7 @@ while true; do docker run -d \ --name ${docker_name} \ - --restart unless-stopped \ + --restart=always \ -v /home/docker/${docker_name}/downloads:/app/Downloads \ -v /home/docker/${docker_name}/storage:/app/storage \ -p ${docker_port}:9999 \ @@ -11785,15 +11785,17 @@ while true; do local app_id="97" local docker_name="wireguard" local docker_img="lscr.io/linuxserver/wireguard:latest" - local docker_port=51820 + local docker_port=8097 docker_rum() { read -p "請輸入組網的客戶端數量 (默認 5):" COUNT COUNT=${COUNT:-5} + read -p "請輸入 WireGuard 網段 (默認 10.13.13.0):" NETWORK + NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) - + ip link delete wg0 &>/dev/null ip_address @@ -11808,23 +11810,40 @@ while true; do -e SERVERURL=${ipv4_address} \ -e SERVERPORT=51820 \ -e PEERS=${PEERS} \ - -e INTERNAL_SUBNET=10.13.13.0 \ - -e ALLOWEDIPS=10.13.13.0/24 \ + -e INTERNAL_SUBNET=${NETWORK} \ + -e ALLOWEDIPS=${NETWORK}/24 \ -e PERSISTENTKEEPALIVE_PEERS=all \ -e LOG_CONFS=true \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules \ - --restart unless-stopped \ + --restart=always \ lscr.io/linuxserver/wireguard:latest sleep 3 - docker exec wireguard sh -c 'for d in /config/peer_*; do sed -i "/^DNS *= *10\.13\.13\.1$/d" "$d"/*.conf; done' + + docker exec wireguard sh -c " + f='/config/wg_confs/wg0.conf' + sed -i 's/51820/${docker_port}/g' \$f + " + + docker exec wireguard sh -c " + for d in /config/peer_*; do + sed -i 's/51820/${docker_port}/g' \$d/*.conf + done + " + + docker exec wireguard sh -c ' + for d in /config/peer_*; do + sed -i "/^DNS/d" "$d"/*.conf + done + ' + docker exec wireguard sh -c ' for d in /config/peer_*; do for f in "$d"/*.conf; do - grep -q "^PersistentKeepalive *= *25$" "$f" || \ - sed -i "/^AllowedIPs *= *10\.13\.13\.0\/24$/a PersistentKeepalive = 25" "$f" + grep -q "^PersistentKeepalive" "$f" || \ + sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f" done done ' @@ -11834,15 +11853,20 @@ while true; do cd "$d" || continue conf_file=$(ls *.conf) base_name="${conf_file%.conf}" - echo "生成二維碼:$base_name.png" qrencode -o "$base_name.png" < "$conf_file" done ' + docker restart wireguard + sleep 2 + echo + echo -e "${gl_huang}所有客戶端二維碼配置:${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 - docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done' + echo + echo -e "${gl_huang}所有客戶端配置代碼:${gl_bai}" + docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}個客戶端配置全部輸出,使用方法如下:${gl_bai}" echo -e "${gl_lv}1. 手機下載wg的APP,掃描上方二維碼,可以快速連接網絡${gl_bai}" From 506d02f4f005015b2dfe20c472587af6be81f88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 22:11:01 +0800 Subject: [PATCH 147/553] Update kejilion.sh --- cn/kejilion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b40319141..a07a34820 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11927,6 +11927,8 @@ while true; do echo "客户端配置已保存到 $CONFIG_FILE" + ip link delete wg0 &>/dev/null + docker run -d \ --name wireguardc \ --network host \ From 0572d013e6e6272374d9c532157e34344a6dd13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 29 Aug 2025 22:13:22 +0800 Subject: [PATCH 148/553] Update kejilion.sh --- kejilion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 263b9fe54..c4b1c3b54 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11927,6 +11927,8 @@ while true; do echo "客户端配置已保存到 $CONFIG_FILE" + ip link delete wg0 &>/dev/null + docker run -d \ --name wireguardc \ --network host \ From e6234a21922c2567994951c8d4004754f64cba8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:48:11 +0800 Subject: [PATCH 149/553] Update kejilion.sh --- cn/kejilion.sh | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index a07a34820..a654a167e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -4591,8 +4591,8 @@ dd_xitong() { echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "43. Windows 7 44. Windows Server 2025" + echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" echo "0. 返回上一级选单" @@ -4788,7 +4788,6 @@ dd_xitong() { exit ;; - 41) send_stats "重装windows11" dd_xitong_2 @@ -4796,6 +4795,7 @@ dd_xitong() { reboot exit ;; + 42) dd_xitong_2 send_stats "重装windows10" @@ -4803,6 +4803,7 @@ dd_xitong() { reboot exit ;; + 43) send_stats "重装windows7" dd_xitong_4 @@ -4812,23 +4813,25 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "重装windows server 25" dd_xitong_2 - bash InstallNET.sh -windows 2022 -lang "cn" + bash InstallNET.sh -windows 2025 -lang "cn" reboot exit ;; + 45) - send_stats "重装windows server 19" + send_stats "重装windows server 22" dd_xitong_2 - bash InstallNET.sh -windows 2019 -lang "cn" + bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; + 46) - send_stats "重装windows server 16" + send_stats "重装windows server 19" dd_xitong_2 - bash InstallNET.sh -windows 2016 -lang "cn" + bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; From a0bcba71e67fb47fe942703eb0ab1ea00159cd42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:49:10 +0800 Subject: [PATCH 150/553] Update Windows versions in kejilion.sh --- kejilion.sh | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index c4b1c3b54..0709e8047 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -4591,8 +4591,8 @@ dd_xitong() { echo "35. openSUSE Tumbleweed 36. fnos飞牛公测版" 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 "43. Windows 7 44. Windows Server 2025" + echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" echo "0. 返回上一级选单" @@ -4788,7 +4788,6 @@ dd_xitong() { exit ;; - 41) send_stats "重装windows11" dd_xitong_2 @@ -4796,6 +4795,7 @@ dd_xitong() { reboot exit ;; + 42) dd_xitong_2 send_stats "重装windows10" @@ -4803,6 +4803,7 @@ dd_xitong() { reboot exit ;; + 43) send_stats "重装windows7" dd_xitong_4 @@ -4812,23 +4813,25 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 22" + send_stats "重装windows server 25" dd_xitong_2 - bash InstallNET.sh -windows 2022 -lang "cn" + bash InstallNET.sh -windows 2025 -lang "cn" reboot exit ;; + 45) - send_stats "重装windows server 19" + send_stats "重装windows server 22" dd_xitong_2 - bash InstallNET.sh -windows 2019 -lang "cn" + bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; + 46) - send_stats "重装windows server 16" + send_stats "重装windows server 19" dd_xitong_2 - bash InstallNET.sh -windows 2016 -lang "cn" + bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; From 7f53ab1f3cfce7dc61f775d36c0f5cee23524869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:50:46 +0800 Subject: [PATCH 151/553] Add installation instructions for Windows sreve 2025 --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 4b6de42ef..e94f0069e 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1290,4 +1290,5 @@ docker管理增加全局备份还原迁移功能。 ------------------------ 2025-08-27 v4.1.2 应用市场新增WireGuard异地隧道组网工具的安装及使用。 +系统工具中一键重装系统新增Windows sreve 2025的安装。 ------------------------ From d65e24a05fd5f383b9acec72bedb880353089d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:53:56 +0800 Subject: [PATCH 152/553] Update kejilion.sh --- cn/kejilion.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index a654a167e..1525f00e2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6885,7 +6885,7 @@ docker_ssh_migration() { echo -e "${YELLOW}正在备份 Docker 容器...${NC}" docker ps --format '{{.Names}}' - read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + read -e -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip install_docker @@ -6920,7 +6920,7 @@ docker_ssh_migration() { local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未检测到 compose 目录,请手动输入路径: " project_dir + read -e -p "未检测到 compose 目录,请手动输入路径: " project_dir fi # 如果该 Compose 项目已经打包过,跳过 @@ -6993,7 +6993,7 @@ docker_ssh_migration() { restore_docker() { send_stats "Docker还原" - read -p "请输入要还原的备份目录: " BACKUP_DIR + read -e -p "请输入要还原的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } echo -e "${BLUE}开始执行还原操作...${NC}" @@ -7008,7 +7008,7 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + [[ -z "$original_path" ]] && read -e -p "未找到原始路径,请输入还原目录路径: " original_path # 检查该 compose 项目的容器是否已经在运行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) @@ -7017,8 +7017,8 @@ docker_ssh_migration() { continue fi - read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + read -e -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "请输入新的还原路径: " original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7112,11 +7112,11 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker迁移" install jq - read -p "请输入要迁移的备份目录: " BACKUP_DIR + read -e -p "请输入要迁移的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } - read -p "目标服务器IP: " TARGET_IP - read -p "目标服务器SSH用户名: " TARGET_USER + read -e -p "目标服务器IP: " TARGET_IP + read -e -p "目标服务器SSH用户名: " TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 @@ -7133,7 +7133,7 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Docker备份文件删除" - read -p "请输入要删除的备份目录: " BACKUP_DIR + read -e -p "请输入要删除的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" @@ -7159,7 +7159,7 @@ docker_ssh_migration() { echo "------------------------" echo -e "0. 返回上一级菜单" echo "------------------------" - read -p "请选择: " choice + read -e -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -11792,9 +11792,9 @@ while true; do docker_rum() { - read -p "请输入组网的客户端数量 (默认 5): " COUNT + read -e -p "请输入组网的客户端数量 (默认 5): " COUNT COUNT=${COUNT:-5} - read -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) From 5d407d5ceecd531f4424539e09233927baa3a3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 11:54:23 +0800 Subject: [PATCH 153/553] Update read prompts to use -e option for editing --- kejilion.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 0709e8047..febdadf4e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6885,7 +6885,7 @@ docker_ssh_migration() { echo -e "${YELLOW}正在备份 Docker 容器...${NC}" docker ps --format '{{.Names}}' - read -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers + read -e -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " containers install tar jq gzip install_docker @@ -6920,7 +6920,7 @@ docker_ssh_migration() { local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未检测到 compose 目录,请手动输入路径: " project_dir + read -e -p "未检测到 compose 目录,请手动输入路径: " project_dir fi # 如果该 Compose 项目已经打包过,跳过 @@ -6993,7 +6993,7 @@ docker_ssh_migration() { restore_docker() { send_stats "Docker还原" - read -p "请输入要还原的备份目录: " BACKUP_DIR + read -e -p "请输入要还原的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } echo -e "${BLUE}开始执行还原操作...${NC}" @@ -7008,7 +7008,7 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路径,请输入还原目录路径: " original_path + [[ -z "$original_path" ]] && read -e -p "未找到原始路径,请输入还原目录路径: " original_path # 检查该 compose 项目的容器是否已经在运行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) @@ -7017,8 +7017,8 @@ docker_ssh_migration() { continue fi - read -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "请输入新的还原路径: " original_path + read -e -p "确认还原 Compose 项目 [$project_name] 到路径 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "请输入新的还原路径: " original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7112,11 +7112,11 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker迁移" install jq - read -p "请输入要迁移的备份目录: " BACKUP_DIR + read -e -p "请输入要迁移的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } - read -p "目标服务器IP: " TARGET_IP - read -p "目标服务器SSH用户名: " TARGET_USER + read -e -p "目标服务器IP: " TARGET_IP + read -e -p "目标服务器SSH用户名: " TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 @@ -7133,7 +7133,7 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Docker备份文件删除" - read -p "请输入要删除的备份目录: " BACKUP_DIR + read -e -p "请输入要删除的备份目录: " BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}已删除备份: ${BACKUP_DIR}${NC}" @@ -7159,7 +7159,7 @@ docker_ssh_migration() { echo "------------------------" echo -e "0. 返回上一级菜单" echo "------------------------" - read -p "请选择: " choice + read -e -p "请选择: " choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -11792,9 +11792,9 @@ while true; do docker_rum() { - read -p "请输入组网的客户端数量 (默认 5): " COUNT + read -e -p "请输入组网的客户端数量 (默认 5): " COUNT COUNT=${COUNT:-5} - read -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) From ecb6c8508380e906b48ec049d3b5375c3a235461 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 31 Aug 2025 08:48:20 +0000 Subject: [PATCH 154/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-08-31=2008:48:20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 55 +++++++++++++++-------------- jp/kejilion.sh | 93 ++++++++++++++++++++++++++------------------------ kr/kejilion.sh | 55 +++++++++++++++-------------- tw/kejilion.sh | 49 ++++++++++++++------------ 4 files changed, 136 insertions(+), 116 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index bbd681882..d8334ddda 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1558,7 +1558,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -4591,8 +4591,8 @@ dd_xitong() { echo "35. openSUSE Tumbleweed 36. fnos Feiniu public beta version" 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 "43. Windows 7 44. Windows Server 2025" + echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" echo "0. Return to the previous menu" @@ -4788,7 +4788,6 @@ dd_xitong() { exit ;; - 41) send_stats "Reinstall windows11" dd_xitong_2 @@ -4796,6 +4795,7 @@ dd_xitong() { reboot exit ;; + 42) dd_xitong_2 send_stats "Reinstall Windows 10" @@ -4803,6 +4803,7 @@ dd_xitong() { reboot exit ;; + 43) send_stats "Reinstall Windows 7" dd_xitong_4 @@ -4812,23 +4813,25 @@ dd_xitong() { ;; 44) - send_stats "Reinstall windows server 22" + send_stats "Reinstall windows server 25" dd_xitong_2 - bash InstallNET.sh -windows 2022 -lang "cn" + bash InstallNET.sh -windows 2025 -lang "cn" reboot exit ;; + 45) - send_stats "Reinstall windows server 19" + send_stats "Reinstall windows server 22" dd_xitong_2 - bash InstallNET.sh -windows 2019 -lang "cn" + bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; + 46) - send_stats "Reinstall windows server 16" + send_stats "Reinstall windows server 19" dd_xitong_2 - bash InstallNET.sh -windows 2016 -lang "cn" + bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; @@ -5818,7 +5821,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Example to create a new connection:" + echo "Create a new connection example:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -6882,7 +6885,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Backing up Docker container...${NC}" docker ps --format '{{.Names}}' - read -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers + read -e -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers install tar jq gzip install_docker @@ -6917,7 +6920,7 @@ docker_ssh_migration() { local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "The compose directory is not detected, please enter the path manually:" project_dir + read -e -p "The compose directory is not detected, please enter the path manually:" project_dir fi # If the Compose project has been packaged, skip it @@ -6990,7 +6993,7 @@ docker_ssh_migration() { restore_docker() { send_stats "Docker restore" - read -p "Please enter the backup directory to restore:" BACKUP_DIR + read -e -p "Please enter the backup directory to restore:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } echo -e "${BLUE}Start the restore operation...${NC}" @@ -7005,7 +7008,7 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "The original path was not found, please enter the restore directory path:" original_path + [[ -z "$original_path" ]] && read -e -p "The original path was not found, please enter the restore directory path:" original_path # Check if the container for the compose project is already running running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) @@ -7014,8 +7017,8 @@ docker_ssh_migration() { continue fi - read -p "Confirm restoring the Compose project [$project_name] to path [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "Please enter a new restore path:" original_path + read -e -p "Confirm restoring the Compose project [$project_name] to path [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "Please enter a new restore path:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7109,11 +7112,11 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker migration" install jq - read -p "Please enter the backup directory to migrate:" BACKUP_DIR + read -e -p "Please enter the backup directory to migrate:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } - read -p "Target server IP:" TARGET_IP - read -p "Target server SSH username:" TARGET_USER + read -e -p "Target server IP:" TARGET_IP + read -e -p "Target server SSH username:" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 @@ -7130,7 +7133,7 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Docker backup file deletion" - read -p "Please enter the backup directory to delete:" BACKUP_DIR + read -e -p "Please enter the backup directory to delete:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}Deleted backup:${BACKUP_DIR}${NC}" @@ -7156,7 +7159,7 @@ docker_ssh_migration() { echo "------------------------" echo -e "0. Return to the previous menu" echo "------------------------" - read -p "Please select:" choice + read -e -p "Please select:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -11789,9 +11792,9 @@ while true; do docker_rum() { - read -p "Please enter the number of clients to form the network (default 5):" COUNT + read -e -p "Please enter the number of clients to form the network (default 5):" COUNT COUNT=${COUNT:-5} - read -p "Please enter the WireGuard segment (default 10.13.13.0):" NETWORK + read -e -p "Please enter the WireGuard segment (default 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11868,7 +11871,7 @@ while true; do echo -e "${gl_huang}All client configuration codes:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}All outputs are provided by each client. The usage method is as follows:${gl_bai}" + echo -e "${gl_lv}${COUNT}All outputs are all configured by each client, and the usage method is as follows:${gl_bai}" echo -e "${gl_lv}1. Download wg's APP on your mobile phone, scan the QR code above to quickly connect to the network${gl_bai}" echo -e "${gl_lv}2. Download the Windows client and copy the configuration code to connect to the network.${gl_bai}" echo -e "${gl_lv}3. Linux uses scripts to deploy WG clients and copy configuration code to connect to the network.${gl_bai}" @@ -11927,6 +11930,8 @@ while true; do echo "Client configuration has been saved to$CONFIG_FILE" + ip link delete wg0 &>/dev/null + docker run -d \ --name wireguardc \ --network host \ diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 49903c967..98244489e 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -793,7 +793,7 @@ docker_ipv6_on() { 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 @@ -825,7 +825,7 @@ docker_ipv6_off() { # 現在のIPv6ステータスを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 元の構成を新しい構成と比較します + # 元の構成と新しい構成を比較します if [[ "$CURRENT_IPV6" == "false" ]]; then echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" else @@ -1558,7 +1558,7 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -3892,7 +3892,7 @@ frps_panel() { echo "------------------------" echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "00。サービスのステータスを更新します。前のメニューに戻ります" + echo "00。サービスのステータスを更新します0。前のメニューに戻ります" echo "------------------------" read -e -p "あなたの選択を入力してください:" choice case $choice in @@ -4147,7 +4147,7 @@ yt_menu_pro() { --no-overwrites --no-post-overwrites read -e -p "実行が完了したら、キーを押して続行します..." ;; 8) - send_stats "mp3ダウンロード" + send_stats "MP3ダウンロード" read -e -p "ビデオリンクを入力してください:" url yt-dlp -P "$VIDEO_DIR" -x --audio-format mp3 \ --write-subs --sub-langs all \ @@ -4521,7 +4521,7 @@ echo -e "${gl_lv}ルートログインがセットアップされます!${gl_b root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能では、ルートユーザーを実行する必要があります!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion } @@ -4591,8 +4591,8 @@ dd_xitong() { echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" 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 "43. Windows 7 44. Windows Server 2025" + echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" echo "0。前のメニューに戻ります" @@ -4788,7 +4788,6 @@ dd_xitong() { exit ;; - 41) send_stats "Windows11を再インストールします" dd_xitong_2 @@ -4796,6 +4795,7 @@ dd_xitong() { reboot exit ;; + 42) dd_xitong_2 send_stats "Windows 10を再インストールします" @@ -4803,6 +4803,7 @@ dd_xitong() { reboot exit ;; + 43) send_stats "Windows 7を再インストールします" dd_xitong_4 @@ -4812,23 +4813,25 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22を再インストールします" + send_stats "Windows Server 25を再インストールします" dd_xitong_2 - bash InstallNET.sh -windows 2022 -lang "cn" + bash InstallNET.sh -windows 2025 -lang "cn" reboot exit ;; + 45) - send_stats "Windows Server 19を再インストールします" + send_stats "Windows Server 22を再インストールします" dd_xitong_2 - bash InstallNET.sh -windows 2019 -lang "cn" + bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; + 46) - send_stats "Windows Server 16を再インストールします" + send_stats "Windows Server 19を再インストールします" dd_xitong_2 - bash InstallNET.sh -windows 2016 -lang "cn" + bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; @@ -5278,7 +5281,7 @@ optimize_balanced() { # デフォルト設定関数を復元します restore_defaults() { - echo -e "${gl_lv}デフォルト設定に復元...${gl_bai}" + echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" ulimit -n 1024 @@ -5818,7 +5821,7 @@ list_connections() { # 新しい接続を追加します add_connection() { send_stats "新しい接続を追加します" - echo "新しい接続を作成する例:" + echo "新しい接続例を作成します:" echo "- 接続名:my_server" echo "- IPアドレス:192.168.1.100" echo "- ユーザー名:root" @@ -6418,7 +6421,7 @@ rsync_manager() { echo echo "1.新しいタスクを作成します2。タスクを削除します" echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6.タイミングタスクを削除します" + echo "5.タイミングタスクを作成6。タイミングタスクを削除します" echo "---------------------------------" echo "0。前のメニューに戻ります" echo "---------------------------------" @@ -6882,7 +6885,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}" docker ps --format '{{.Names}}' - read -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers + read -e -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers install tar jq gzip install_docker @@ -6917,7 +6920,7 @@ docker_ssh_migration() { local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "Compose Directoryは検出されません。手動でパスを入力してください。" project_dir + read -e -p "Compose Directoryは検出されません。手動でパスを入力してください。" project_dir fi # Composeプロジェクトがパッケージ化されている場合は、スキップしてください @@ -6990,7 +6993,7 @@ docker_ssh_migration() { restore_docker() { send_stats "Dockerの復元" - read -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR + read -e -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } echo -e "${BLUE}復元操作を開始します...${NC}" @@ -7005,7 +7008,7 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "元のパスが見つかりませんでした。復元ディレクトリパスを入力してください。" original_path + [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりませんでした。復元ディレクトリパスを入力してください。" original_path # Composeプロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) @@ -7014,8 +7017,8 @@ docker_ssh_migration() { continue fi - read -p "Composeプロジェクトの復元を確認します[$project_name]パスへ[$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "新しい復元パスを入力してください:" original_path + read -e -p "Composeプロジェクトの復元を確認します[$project_name]パスへ[$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "新しい復元パスを入力してください:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7109,11 +7112,11 @@ docker_ssh_migration() { migrate_docker() { send_stats "Dockerの移行" install jq - read -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR + read -e -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } - read -p "ターゲットサーバーIP:" TARGET_IP - read -p "ターゲットサーバーSSHユーザー名:" TARGET_USER + read -e -p "ターゲットサーバーIP:" TARGET_IP + read -e -p "ターゲットサーバーSSHユーザー名:" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 @@ -7130,7 +7133,7 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Dockerバックアップファイルの削除" - read -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR + read -e -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" @@ -7156,7 +7159,7 @@ docker_ssh_migration() { echo "------------------------" echo -e "0。前のメニューに戻ります" echo "------------------------" - read -p "選択してください:" choice + read -e -p "選択してください:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -7904,7 +7907,7 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -7940,7 +7943,7 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "データベース名:$dbname" @@ -7979,7 +7982,7 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "データベースポート:3306" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" @@ -8017,7 +8020,7 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "データベースポート:3306" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" @@ -8081,7 +8084,7 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -8120,7 +8123,7 @@ linux_ldnmp() { clear ldnmp_web_on echo "データベースプレフィックス:typecho_" - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "データベース名:$dbname" @@ -8158,7 +8161,7 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "データベースポート:3306" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" @@ -8284,7 +8287,7 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "データベースアドレス:MySQL" + echo "データベースアドレス:mysql" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -11789,9 +11792,9 @@ while true; do docker_rum() { - read -p "ネットワークを形成するためにクライアントの数を入力してください(デフォルト5):" COUNT + read -e -p "ネットワークを形成するためにクライアントの数を入力してください(デフォルト5):" COUNT COUNT=${COUNT:-5} - read -p "WireGuardセグメントを入力してください(デフォルト10.13.13.0):" NETWORK + read -e -p "WireGuardセグメントを入力してください(デフォルト10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11868,7 +11871,7 @@ while true; do echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}すべての出力は各クライアントによって提供されます。使用方法は次のとおりです。${gl_bai}" + echo -e "${gl_lv}${COUNT}すべての出力はすべて各クライアントによって構成されており、使用方法は次のとおりです。${gl_bai}" echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}" echo -e "${gl_lv}2。Windowsクライアントをダウンロードし、構成コードをコピーしてネットワークに接続します。${gl_bai}" echo -e "${gl_lv}3。Linuxはスクリプトを使用してWGクライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}" @@ -11927,6 +11930,8 @@ while true; do echo "クライアントの構成が保存されています$CONFIG_FILE" + ip link delete wg0 &>/dev/null + docker run -d \ --name wireguardc \ --network host \ @@ -12903,7 +12908,7 @@ EOF break # 跳出 ;; esac - send_stats "タイムされたタスクを追加します" + send_stats "時限タスクを追加します" ;; 2) read -e -p "削除する必要があるキーワードを入力してください。" kquest @@ -13148,7 +13153,7 @@ EOF echo "TG-BOTモニタリングと早期警告機能" echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" echo "しきい値に達した後、ユーザーはユーザーに送信されます" echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" read -e -p "必ず続行しますか? (y/n):" choice @@ -13508,7 +13513,7 @@ linux_file() { ;; 3) # 修改目录权限 read -e -p "ディレクトリ名を入力してください:" dirname - read -e -p "許可(755など)を入力してください。" perm + read -e -p "許可を入力してください(755など):" perm chmod "$perm" "$dirname" && echo "許可が変更されました" || echo "変更に失敗しました" send_stats "ディレクトリ権限を変更します" ;; @@ -13540,7 +13545,7 @@ linux_file() { ;; 13) # 修改文件权限 read -e -p "ファイル名を入力してください:" filename - read -e -p "許可(755など)を入力してください。" perm + read -e -p "許可を入力してください(755など):" perm chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました" send_stats "ファイル権限を変更します" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index f5581ad44..ce2dac590 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1558,7 +1558,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -4591,8 +4591,8 @@ dd_xitong() { echo "35. OpenSuse Tumbleweed 36. FNOS FEINIU 공개 베타 버전" 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 "43. Windows 7 44. Windows Server 2025" + echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" @@ -4788,7 +4788,6 @@ dd_xitong() { exit ;; - 41) send_stats "Windows 11을 다시 설치하십시오" dd_xitong_2 @@ -4796,6 +4795,7 @@ dd_xitong() { reboot exit ;; + 42) dd_xitong_2 send_stats "Windows 10을 다시 설치하십시오" @@ -4803,6 +4803,7 @@ dd_xitong() { reboot exit ;; + 43) send_stats "Windows 7을 다시 설치하십시오" dd_xitong_4 @@ -4812,23 +4813,25 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 22를 다시 설치하십시오" + send_stats "Windows Server 25를 다시 설치하십시오" dd_xitong_2 - bash InstallNET.sh -windows 2022 -lang "cn" + bash InstallNET.sh -windows 2025 -lang "cn" reboot exit ;; + 45) - send_stats "Windows Server 19를 다시 설치하십시오" + send_stats "Windows Server 22를 다시 설치하십시오" dd_xitong_2 - bash InstallNET.sh -windows 2019 -lang "cn" + bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; + 46) - send_stats "Windows Server 16을 다시 설치하십시오" + send_stats "Windows Server 19를 다시 설치하십시오" dd_xitong_2 - bash InstallNET.sh -windows 2016 -lang "cn" + bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; @@ -5818,7 +5821,7 @@ list_connections() { # 새 연결을 추가하십시오 add_connection() { send_stats "새 연결을 추가하십시오" - echo "새 연결을 만드는 예 :" + echo "새 연결 예제 :" echo "- 연결 이름 : my_server" echo "-IP 주소 : 192.168.1.100" echo "- 사용자 이름 : 루트" @@ -6882,7 +6885,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" docker ps --format '{{.Names}}' - read -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers + read -e -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers install tar jq gzip install_docker @@ -6917,7 +6920,7 @@ docker_ssh_migration() { local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir + read -e -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir fi # Compose 프로젝트가 포장 된 경우 건너 뛰십시오 @@ -6990,7 +6993,7 @@ docker_ssh_migration() { restore_docker() { send_stats "도커 복원" - read -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + read -e -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } echo -e "${BLUE}복원 작업 시작 ...${NC}" @@ -7005,7 +7008,7 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path + [[ -z "$original_path" ]] && read -e -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path # Compose 프로젝트 용 컨테이너가 이미 실행 중인지 확인하십시오. running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) @@ -7014,8 +7017,8 @@ docker_ssh_migration() { continue fi - read -p "Compose 프로젝트 복원 확인 [$project_name] 경로로 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "새로운 복원 경로를 입력하십시오 :" original_path + read -e -p "Compose 프로젝트 복원 확인 [$project_name] 경로로 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "새로운 복원 경로를 입력하십시오 :" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7109,11 +7112,11 @@ docker_ssh_migration() { migrate_docker() { send_stats "도커 마이그레이션" install jq - read -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + read -e -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } - read -p "대상 서버 IP :" TARGET_IP - read -p "대상 서버 SSH 사용자 이름 :" TARGET_USER + read -e -p "대상 서버 IP :" TARGET_IP + read -e -p "대상 서버 SSH 사용자 이름 :" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 @@ -7130,7 +7133,7 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Docker 백업 파일 삭제" - read -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + read -e -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}삭제 된 백업 :${BACKUP_DIR}${NC}" @@ -7156,7 +7159,7 @@ docker_ssh_migration() { echo "------------------------" echo -e "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -p "선택하십시오 :" choice + read -e -p "선택하십시오 :" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -11789,9 +11792,9 @@ while true; do docker_rum() { - read -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT + read -e -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT COUNT=${COUNT:-5} - read -p "Wireguard 세그먼트를 입력하십시오 (기본값 10.13.13.0) :" NETWORK + read -e -p "Wireguard 세그먼트를 입력하십시오 (기본값 10.13.13.0) :" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11868,7 +11871,7 @@ while true; do echo -e "${gl_huang}모든 클라이언트 구성 코드 :${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}모든 출력은 각 클라이언트가 제공합니다. 사용법은 다음과 같습니다.${gl_bai}" + echo -e "${gl_lv}${COUNT}모든 출력은 모두 각 클라이언트에 의해 구성되며 사용 방법은 다음과 같습니다.${gl_bai}" echo -e "${gl_lv}1. 휴대 전화에서 WG의 앱을 다운로드하고 위의 QR 코드를 스캔하여 네트워크에 빠르게 연결하십시오.${gl_bai}" echo -e "${gl_lv}2. Windows 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결하십시오.${gl_bai}" echo -e "${gl_lv}3. Linux는 스크립트를 사용하여 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" @@ -11927,6 +11930,8 @@ while true; do echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE" + ip link delete wg0 &>/dev/null + docker run -d \ --name wireguardc \ --network host \ diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 982ef2ad2..3856c7de1 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -4591,8 +4591,8 @@ dd_xitong() { echo "35. openSUSE Tumbleweed 36. fnos飛牛公測版" 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 "43. Windows 7 44. Windows Server 2025" + echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" echo "0. 返回上一級選單" @@ -4788,7 +4788,6 @@ dd_xitong() { exit ;; - 41) send_stats "重裝windows11" dd_xitong_2 @@ -4796,6 +4795,7 @@ dd_xitong() { reboot exit ;; + 42) dd_xitong_2 send_stats "重裝windows10" @@ -4803,6 +4803,7 @@ dd_xitong() { reboot exit ;; + 43) send_stats "重裝windows7" dd_xitong_4 @@ -4812,23 +4813,25 @@ dd_xitong() { ;; 44) - send_stats "重裝windows server 22" + send_stats "重裝windows server 25" dd_xitong_2 - bash InstallNET.sh -windows 2022 -lang "cn" + bash InstallNET.sh -windows 2025 -lang "cn" reboot exit ;; + 45) - send_stats "重裝windows server 19" + send_stats "重裝windows server 22" dd_xitong_2 - bash InstallNET.sh -windows 2019 -lang "cn" + bash InstallNET.sh -windows 2022 -lang "cn" reboot exit ;; + 46) - send_stats "重裝windows server 16" + send_stats "重裝windows server 19" dd_xitong_2 - bash InstallNET.sh -windows 2016 -lang "cn" + bash InstallNET.sh -windows 2019 -lang "cn" reboot exit ;; @@ -6882,7 +6885,7 @@ docker_ssh_migration() { echo -e "${YELLOW}正在備份 Docker 容器...${NC}" docker ps --format '{{.Names}}' - read -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers + read -e -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers install tar jq gzip install_docker @@ -6917,7 +6920,7 @@ docker_ssh_migration() { local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -p "未檢測到 compose 目錄,請手動輸入路徑:" project_dir + read -e -p "未檢測到 compose 目錄,請手動輸入路徑:" project_dir fi # 如果該 Compose 項目已經打包過,跳過 @@ -6990,7 +6993,7 @@ docker_ssh_migration() { restore_docker() { send_stats "Docker還原" - read -p "請輸入要還原的備份目錄:" BACKUP_DIR + read -e -p "請輸入要還原的備份目錄:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } echo -e "${BLUE}開始執行還原操作...${NC}" @@ -7005,7 +7008,7 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -p "未找到原始路徑,請輸入還原目錄路徑:" original_path + [[ -z "$original_path" ]] && read -e -p "未找到原始路徑,請輸入還原目錄路徑:" original_path # 檢查該 compose 項目的容器是否已經在運行 running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) @@ -7014,8 +7017,8 @@ docker_ssh_migration() { continue fi - read -p "確認還原 Compose 項目 [$project_name] 到路徑 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -p "請輸入新的還原路徑:" original_path + read -e -p "確認還原 Compose 項目 [$project_name] 到路徑 [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "請輸入新的還原路徑:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7109,11 +7112,11 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker遷移" install jq - read -p "請輸入要遷移的備份目錄:" BACKUP_DIR + read -e -p "請輸入要遷移的備份目錄:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } - read -p "目標服務器IP:" TARGET_IP - read -p "目標服務器SSH用戶名:" TARGET_USER + read -e -p "目標服務器IP:" TARGET_IP + read -e -p "目標服務器SSH用戶名:" TARGET_USER LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 @@ -7130,7 +7133,7 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Docker備份文件刪除" - read -p "請輸入要刪除的備份目錄:" BACKUP_DIR + read -e -p "請輸入要刪除的備份目錄:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}已刪除備份:${BACKUP_DIR}${NC}" @@ -7156,7 +7159,7 @@ docker_ssh_migration() { echo "------------------------" echo -e "0. 返回上一級菜單" echo "------------------------" - read -p "請選擇:" choice + read -e -p "請選擇:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -11789,9 +11792,9 @@ while true; do docker_rum() { - read -p "請輸入組網的客戶端數量 (默認 5):" COUNT + read -e -p "請輸入組網的客戶端數量 (默認 5):" COUNT COUNT=${COUNT:-5} - read -p "請輸入 WireGuard 網段 (默認 10.13.13.0):" NETWORK + read -e -p "請輸入 WireGuard 網段 (默認 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11927,6 +11930,8 @@ while true; do echo "客戶端配置已保存到$CONFIG_FILE" + ip link delete wg0 &>/dev/null + docker run -d \ --name wireguardc \ --network host \ From 679fdeffbb1a63adfce93b748d4e782810059a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:07:57 +0800 Subject: [PATCH 155/553] Update kejilion.sh --- cn/kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 1525f00e2..335539908 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="CN" +canshu="default" permission_granted="false" ENABLE_STATS="true" @@ -2374,7 +2374,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2385,7 +2385,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2736,7 +2736,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2849,7 +2849,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -9082,7 +9082,7 @@ while true; do echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -9174,7 +9174,7 @@ while true; do fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9570,7 +9570,7 @@ while true; do echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" From 2d91ee371b7a18f580934c57b6da86abff4bba1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:08:16 +0800 Subject: [PATCH 156/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 335539908..0a7c0e94e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="default" +canshu="CN" permission_granted="false" ENABLE_STATS="true" From aa833d1d7992e8ac6aaf096c935f00569d9a1572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:08:41 +0800 Subject: [PATCH 157/553] Update docker name check to suppress error output --- kejilion.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index febdadf4e..335539908 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2374,7 +2374,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2385,7 +2385,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}已安装${gl_bai}" # else # check_docker="${gl_hui}未安装${gl_bai}" @@ -2736,7 +2736,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2849,7 +2849,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -9082,7 +9082,7 @@ while true; do echo -e "哪吒监控 $check_docker $update_status" echo "开源、轻量、易用的服务器监控与运维工具" echo "官网搭建文档: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -9174,7 +9174,7 @@ while true; do fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "访问地址: " echo "https://$yuming" @@ -9570,7 +9570,7 @@ while true; do echo -e "雷池服务 $check_docker" echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" From cbbee9b68645cc52998f11fd6e3a5f9d98ce163d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:17:44 +0800 Subject: [PATCH 158/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0a7c0e94e..16ceb9f60 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -154,7 +154,7 @@ public_ip=$(get_public_ip) isp_info=$(curl -s --max-time 3 http://ipinfo.io/org) -if echo "$isp_info" | grep -Eiq 'china|mobile|unicom|telecom'; then +if echo "$isp_info" | grep -Eiq 'mobile|unicom|telecom'; then ipv4_address=$(get_local_ip) else ipv4_address="$public_ip" From 622bcff1a34d1db044af6aa4435eb9b1ed21c336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:52:02 +0800 Subject: [PATCH 159/553] Update kejilion.sh --- cn/kejilion.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 16ceb9f60..abba095b2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2768,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name 已经安装完成" @@ -2783,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name 已经安装完成" @@ -2880,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 2) docker_app_update - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 3) docker_app_uninstall @@ -3557,13 +3557,13 @@ while true; do iptables_open panel_app_install - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}安装" ;; 2) panel_app_manage - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}控制" ;; @@ -3901,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP服务端已经安装完成" ;; 2) @@ -3911,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP服务端已经更新完成" ;; 3) @@ -3998,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP客户端已经安装完成" ;; 2) @@ -4008,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP客户端已经更新完成" ;; @@ -4091,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "安装完成。按任意键继续..." read ;; 2) @@ -4099,7 +4099,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "更新完成。按任意键继续..." read ;; 3) @@ -9221,7 +9221,7 @@ while true; do -d analogic/poste.io - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io已经安装完成" @@ -9246,7 +9246,7 @@ while true; do -d analogic/poste.i - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io已经安装完成" @@ -9588,7 +9588,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9601,7 +9601,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "雷池WAF面板已经更新完成" check_docker_app_ip From 91aac6c22b92aa37c79b686bf928cccfdd2ec123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:52:51 +0800 Subject: [PATCH 160/553] Refactor app ID addition in kejilion.sh --- kejilion.sh | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 335539908..049bc80ae 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -154,7 +154,7 @@ public_ip=$(get_public_ip) isp_info=$(curl -s --max-time 3 http://ipinfo.io/org) -if echo "$isp_info" | grep -Eiq 'china|mobile|unicom|telecom'; then +if echo "$isp_info" | grep -Eiq 'mobile|unicom|telecom'; then ipv4_address=$(get_local_ip) else ipv4_address="$public_ip" @@ -2768,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name 已经安装完成" @@ -2783,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name 已经安装完成" @@ -2880,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 2) docker_app_update - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 3) docker_app_uninstall @@ -3557,13 +3557,13 @@ while true; do iptables_open panel_app_install - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}安装" ;; 2) panel_app_manage - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}控制" ;; @@ -3901,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP服务端已经安装完成" ;; 2) @@ -3911,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP服务端已经更新完成" ;; 3) @@ -3998,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP客户端已经安装完成" ;; 2) @@ -4008,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP客户端已经更新完成" ;; @@ -4091,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "安装完成。按任意键继续..." read ;; 2) @@ -4099,7 +4099,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "更新完成。按任意键继续..." read ;; 3) @@ -9221,7 +9221,7 @@ while true; do -d analogic/poste.io - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io已经安装完成" @@ -9246,7 +9246,7 @@ while true; do -d analogic/poste.i - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io已经安装完成" @@ -9588,7 +9588,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "雷池WAF面板已经安装完成" check_docker_app_ip @@ -9601,7 +9601,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "雷池WAF面板已经更新完成" check_docker_app_ip From 6ef2c8d48df9c473f71e4da3dd72f26dd16e97cc Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 1 Sep 2025 02:15:44 +0000 Subject: [PATCH 161/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-01=2002:15:44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 48 ++++++++++++++++++++++++------------------------ jp/kejilion.sh | 48 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 48 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 48 ++++++++++++++++++++++++------------------------ 4 files changed, 96 insertions(+), 96 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index d8334ddda..40fdcb29f 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -154,7 +154,7 @@ public_ip=$(get_public_ip) isp_info=$(curl -s --max-time 3 http://ipinfo.io/org) -if echo "$isp_info" | grep -Eiq 'china|mobile|unicom|telecom'; then +if echo "$isp_info" | grep -Eiq 'mobile|unicom|telecom'; then ipv4_address=$(get_local_ip) else ipv4_address="$public_ip" @@ -2374,7 +2374,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2385,7 +2385,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}${gl_bai} installed" # else # check_docker="${gl_hui}${gl_bai} is not installed" @@ -2736,7 +2736,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2768,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_nameInstalled" @@ -2783,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_nameInstalled" @@ -2849,7 +2849,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2880,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 2) docker_app_update - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 3) docker_app_uninstall @@ -3557,13 +3557,13 @@ while true; do iptables_open panel_app_install - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}Install" ;; 2) panel_app_manage - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}control" ;; @@ -3901,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "The FRP server has been installed" ;; 2) @@ -3911,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "The FRP server has been updated" ;; 3) @@ -3998,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "The FRP client has been installed" ;; 2) @@ -4008,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "The FRP client has been updated" ;; @@ -4091,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "The installation is complete. Press any key to continue..." read ;; 2) @@ -4099,7 +4099,7 @@ yt_menu_pro() { echo "Update yt-dlp..." yt-dlp -U - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "Update completed. Press any key to continue..." read ;; 3) @@ -9082,7 +9082,7 @@ while true; do echo -e "Nezha Monitoring$check_docker $update_status" echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -9174,7 +9174,7 @@ while true; do fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "Access address:" echo "https://$yuming" @@ -9221,7 +9221,7 @@ while true; do -d analogic/poste.io - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io has been installed" @@ -9246,7 +9246,7 @@ while true; do -d analogic/poste.i - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io has been installed" @@ -9570,7 +9570,7 @@ while true; do echo -e "Thunder Pool Service$check_docker" echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9588,7 +9588,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "The Thunder Pool WAF panel has been installed" check_docker_app_ip @@ -9601,7 +9601,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Thunder Pool WAF panel has been updated" check_docker_app_ip diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 98244489e..80e1e4a16 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -154,7 +154,7 @@ public_ip=$(get_public_ip) isp_info=$(curl -s --max-time 3 http://ipinfo.io/org) -if echo "$isp_info" | grep -Eiq 'china|mobile|unicom|telecom'; then +if echo "$isp_info" | grep -Eiq 'mobile|unicom|telecom'; then ipv4_address=$(get_local_ip) else ipv4_address="$public_ip" @@ -2374,7 +2374,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2385,7 +2385,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker = "$ {gl_lv} $ {gl_bai}インストール" # else # check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" @@ -2736,7 +2736,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2768,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_nameインストール" @@ -2783,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_nameインストール" @@ -2849,7 +2849,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2880,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 2) docker_app_update - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 3) docker_app_uninstall @@ -3557,13 +3557,13 @@ while true; do iptables_open panel_app_install - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}インストール" ;; 2) panel_app_manage - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}コントロール" ;; @@ -3901,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRPサーバーがインストールされています" ;; 2) @@ -3911,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRPサーバーが更新されました" ;; 3) @@ -3998,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRPクライアントがインストールされています" ;; 2) @@ -4008,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRPクライアントが更新されました" ;; @@ -4091,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "インストールが完了しました。任意のキーを押して続行します..." read ;; 2) @@ -4099,7 +4099,7 @@ yt_menu_pro() { echo "yt-dlpを更新..." yt-dlp -U - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) @@ -9082,7 +9082,7 @@ while true; do echo -e "Nezhaの監視$check_docker $update_status" echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -9174,7 +9174,7 @@ while true; do fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "アクセスアドレス:" echo "https://$yuming" @@ -9221,7 +9221,7 @@ while true; do -d analogic/poste.io - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Poste.ioがインストールされています" @@ -9246,7 +9246,7 @@ while true; do -d analogic/poste.i - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Poste.ioがインストールされています" @@ -9570,7 +9570,7 @@ while true; do echo -e "サンダープールサービス$check_docker" echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9588,7 +9588,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "サンダープールWAFパネルがインストールされています" check_docker_app_ip @@ -9601,7 +9601,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "サンダープールWAFパネルが更新されました" check_docker_app_ip diff --git a/kr/kejilion.sh b/kr/kejilion.sh index ce2dac590..23df14ba3 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -154,7 +154,7 @@ public_ip=$(get_public_ip) isp_info=$(curl -s --max-time 3 http://ipinfo.io/org) -if echo "$isp_info" | grep -Eiq 'china|mobile|unicom|telecom'; then +if echo "$isp_info" | grep -Eiq 'mobile|unicom|telecom'; then ipv4_address=$(get_local_ip) else ipv4_address="$public_ip" @@ -2374,7 +2374,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2385,7 +2385,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker = "$ {gl_lv} $ {gl_bai} 설치" # else # check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" @@ -2736,7 +2736,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2768,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name설치" @@ -2783,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name설치" @@ -2849,7 +2849,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2880,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 2) docker_app_update - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 3) docker_app_uninstall @@ -3557,13 +3557,13 @@ while true; do iptables_open panel_app_install - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}설치하다" ;; 2) panel_app_manage - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}제어" ;; @@ -3901,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP 서버가 설치되었습니다" ;; 2) @@ -3911,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP 서버가 업데이트되었습니다" ;; 3) @@ -3998,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP 클라이언트가 설치되었습니다" ;; 2) @@ -4008,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP 클라이언트가 업데이트되었습니다" ;; @@ -4091,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 2) @@ -4099,7 +4099,7 @@ yt_menu_pro() { echo "yt-dlp 업데이트 ..." yt-dlp -U - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." read ;; 3) @@ -9082,7 +9082,7 @@ while true; do echo -e "Nezha 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -9174,7 +9174,7 @@ while true; do fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "액세스 주소 :" echo "https://$yuming" @@ -9221,7 +9221,7 @@ while true; do -d analogic/poste.io - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Poste.io가 설치되었습니다" @@ -9246,7 +9246,7 @@ while true; do -d analogic/poste.i - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Poste.io가 설치되었습니다" @@ -9570,7 +9570,7 @@ while true; do echo -e "썬더 풀 서비스$check_docker" echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9588,7 +9588,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Thunder Pool WAF 패널이 설치되었습니다" check_docker_app_ip @@ -9601,7 +9601,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "Thunder Pool WAF 패널이 업데이트되었습니다" check_docker_app_ip diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 3856c7de1..b772af125 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -154,7 +154,7 @@ public_ip=$(get_public_ip) isp_info=$(curl -s --max-time 3 http://ipinfo.io/org) -if echo "$isp_info" | grep -Eiq 'china|mobile|unicom|telecom'; then +if echo "$isp_info" | grep -Eiq 'mobile|unicom|telecom'; then ipv4_address=$(get_local_ip) else ipv4_address="$public_ip" @@ -2374,7 +2374,7 @@ web_optimization() { check_docker_app() { - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1 ; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then check_docker="${gl_lv}已安装${gl_bai}" else check_docker="${gl_hui}未安装${gl_bai}" @@ -2385,7 +2385,7 @@ check_docker_app() { # check_docker_app() { -# if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then +# if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}已安裝${gl_bai}" # else # check_docker="${gl_hui}未安裝${gl_bai}" @@ -2736,7 +2736,7 @@ while true; do echo -e "$docker_name $check_docker $update_status" echo "$docker_describe" echo "$docker_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2768,7 +2768,7 @@ while true; do setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name已經安裝完成" @@ -2783,7 +2783,7 @@ while true; do docker rmi -f "$docker_img" docker_rum - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "$docker_name已經安裝完成" @@ -2849,7 +2849,7 @@ docker_app_plus() { echo -e "$app_name $check_docker $update_status" echo "$app_text" echo "$app_url" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then if [ ! -f "/home/docker/${docker_name}_port.conf" ]; then local docker_port=$(docker port "$docker_name" | head -n1 | awk -F'[:]' '/->/ {print $NF; exit}') docker_port=${docker_port:-0000} @@ -2880,12 +2880,12 @@ docker_app_plus() { setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 2) docker_app_update - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id ;; 3) docker_app_uninstall @@ -3557,13 +3557,13 @@ while true; do iptables_open panel_app_install - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}安裝" ;; 2) panel_app_manage - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id send_stats "${panelname}控制" ;; @@ -3901,7 +3901,7 @@ frps_panel() { install_docker generate_frps_config - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP服務端已經安裝完成" ;; 2) @@ -3911,7 +3911,7 @@ frps_panel() { [ -f /home/frp/frps.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frps.toml /home/frp/frps.toml donlond_frp frps - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP服務端已經更新完成" ;; 3) @@ -3998,7 +3998,7 @@ frpc_panel() { install_docker configure_frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP客戶端已經安裝完成" ;; 2) @@ -4008,7 +4008,7 @@ frpc_panel() { [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml donlond_frp frpc - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "FRP客戶端已經更新完成" ;; @@ -4091,7 +4091,7 @@ yt_menu_pro() { curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "安裝完成。按任意鍵繼續..." read ;; 2) @@ -4099,7 +4099,7 @@ yt_menu_pro() { echo "正在更新 yt-dlp..." yt-dlp -U - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id echo "更新完成。按任意鍵繼續..." read ;; 3) @@ -9082,7 +9082,7 @@ while true; do echo -e "哪吒監控$check_docker $update_status" echo "開源、輕量、易用的服務器監控與運維工具" echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi @@ -9174,7 +9174,7 @@ while true; do fi echo "" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) echo "訪問地址:" echo "https://$yuming" @@ -9221,7 +9221,7 @@ while true; do -d analogic/poste.io - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io已經安裝完成" @@ -9246,7 +9246,7 @@ while true; do -d analogic/poste.i - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "poste.io已經安裝完成" @@ -9570,7 +9570,7 @@ while true; do echo -e "雷池服務$check_docker" echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" - if docker ps -a --format '{{.Names}}' | grep -q "$docker_name" >/dev/null 2>&1; then + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi echo "" @@ -9588,7 +9588,7 @@ while true; do check_disk_space 5 bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "雷池WAF面板已經安裝完成" check_docker_app_ip @@ -9601,7 +9601,7 @@ while true; do docker rmi $(docker images | grep "safeline" | grep "none" | awk '{print $3}') echo "" - mkdir -p /home/docker && touch /home/docker/appno.txt && (add_app_id) + add_app_id clear echo "雷池WAF面板已經更新完成" check_docker_app_ip From c4b4f80234d3928f179c4fd9fd0f302a916b8b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 2 Sep 2025 22:13:40 +0800 Subject: [PATCH 162/553] Update kejilion.sh --- cn/kejilion.sh | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index abba095b2..47765a4a9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.2" +sh_v="4.1.3" gl_hui='\e[37m' @@ -213,12 +213,13 @@ install() { check_disk_space() { + local required_gb=$1 + local path=${2:-/} - required_gb=$1 - required_space_mb=$((required_gb * 1024)) - available_space_mb=$(df -m / | awk 'NR==2 {print $4}') + local required_space_mb=$((required_gb * 1024)) + local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') - if [ $available_space_mb -lt $required_space_mb ]; then + if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" echo "当前可用空间: $((available_space_mb/1024))G" echo "最小需求空间: ${required_gb}G" @@ -230,6 +231,7 @@ check_disk_space() { } + install_dependency() { install wget unzip tar jq grep } @@ -2707,13 +2709,23 @@ clear_host_port_rules() { setup_docker_dir() { - mkdir -p /home/docker/ 2>/dev/null + mkdir -p /home /home/docker 2>/dev/null + if [ -d "/vol1/1000/" ] && [ ! -d "/vol1/1000/docker" ]; then cp -f /home/docker /home/docker1 2>/dev/null rm -rf /home/docker 2>/dev/null mkdir -p /vol1/1000/docker 2>/dev/null ln -s /vol1/1000/docker /home/docker 2>/dev/null fi + + if [ -d "/volume1/" ] && [ ! -d "/volume1/docker" ]; then + cp -f /home/docker /home/docker1 2>/dev/null + rm -rf /home/docker 2>/dev/null + mkdir -p /volume1/docker 2>/dev/null + ln -s /volume1/docker /home/docker 2>/dev/null + fi + + } @@ -2757,7 +2769,8 @@ while true; do read -e -p "请输入你的选择: " choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2765,7 +2778,6 @@ while true; do install jq install_docker docker_rum - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -2870,14 +2882,14 @@ docker_app_plus() { read -e -p "输入你的选择: " choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker 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 - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -3142,7 +3154,7 @@ send_stats "安装LDNMP环境" root_use clear echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" -check_disk_space 3 +check_disk_space 3 /home check_port install_dependency install_docker @@ -3159,7 +3171,7 @@ send_stats "安装nginx环境" root_use clear echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" -check_disk_space 1 +check_disk_space 1 /home check_port install_dependency install_docker @@ -9189,7 +9201,8 @@ while true; do case $choice in 1) - check_disk_space 2 + setup_docker_dir + check_disk_space 2 /home/docker read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt From c853578a918238b64c3f7b20838e924049274e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 2 Sep 2025 22:14:14 +0800 Subject: [PATCH 163/553] Update version and improve disk space checks --- kejilion.sh | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 049bc80ae..b943713b8 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.2" +sh_v="4.1.3" gl_hui='\e[37m' @@ -213,12 +213,13 @@ install() { check_disk_space() { + local required_gb=$1 + local path=${2:-/} - required_gb=$1 - required_space_mb=$((required_gb * 1024)) - available_space_mb=$(df -m / | awk 'NR==2 {print $4}') + local required_space_mb=$((required_gb * 1024)) + local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') - if [ $available_space_mb -lt $required_space_mb ]; then + if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}提示: ${gl_bai}磁盘空间不足!" echo "当前可用空间: $((available_space_mb/1024))G" echo "最小需求空间: ${required_gb}G" @@ -230,6 +231,7 @@ check_disk_space() { } + install_dependency() { install wget unzip tar jq grep } @@ -2707,13 +2709,23 @@ clear_host_port_rules() { setup_docker_dir() { - mkdir -p /home/docker/ 2>/dev/null + mkdir -p /home /home/docker 2>/dev/null + if [ -d "/vol1/1000/" ] && [ ! -d "/vol1/1000/docker" ]; then cp -f /home/docker /home/docker1 2>/dev/null rm -rf /home/docker 2>/dev/null mkdir -p /vol1/1000/docker 2>/dev/null ln -s /vol1/1000/docker /home/docker 2>/dev/null fi + + if [ -d "/volume1/" ] && [ ! -d "/volume1/docker" ]; then + cp -f /home/docker /home/docker1 2>/dev/null + rm -rf /home/docker 2>/dev/null + mkdir -p /volume1/docker 2>/dev/null + ln -s /volume1/docker /home/docker 2>/dev/null + fi + + } @@ -2757,7 +2769,8 @@ while true; do read -e -p "请输入你的选择: " choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "输入应用对外服务端口,回车默认使用${docker_port}端口: " app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2765,7 +2778,6 @@ while true; do install jq install_docker docker_rum - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -2870,14 +2882,14 @@ docker_app_plus() { read -e -p "输入你的选择: " choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker 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 - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -3142,7 +3154,7 @@ send_stats "安装LDNMP环境" root_use clear echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" -check_disk_space 3 +check_disk_space 3 /home check_port install_dependency install_docker @@ -3159,7 +3171,7 @@ send_stats "安装nginx环境" root_use clear echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" -check_disk_space 1 +check_disk_space 1 /home check_port install_dependency install_docker @@ -9189,7 +9201,8 @@ while true; do case $choice in 1) - check_disk_space 2 + setup_docker_dir + check_disk_space 2 /home/docker read -e -p "请设置邮箱域名 例如 mail.yuming.com : " yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt From 0eab38e1143ee57f4d30cedd5876197930b60f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 2 Sep 2025 22:16:44 +0800 Subject: [PATCH 164/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e94f0069e..ee90b209c 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1292,3 +1292,8 @@ docker管理增加全局备份还原迁移功能。 应用市场新增WireGuard异地隧道组网工具的安装及使用。 系统工具中一键重装系统新增Windows sreve 2025的安装。 ------------------------ +2025-09-03 v4.1.3 +应用市场尝试适配群晖系统文件结构。 +应用安装时的存储空间检测进行优化,可以更精准检测应用目录大小。 +------------------------ + From f4d68cd10a30885b550bb8172a29e8335c2b3b9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 6 Sep 2025 22:43:35 +0800 Subject: [PATCH 165/553] Update kejilion.sh --- cn/kejilion.sh | 57 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 47765a4a9..498b73bee 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8888,7 +8888,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" - echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" @@ -11796,6 +11796,61 @@ while true; do ;; + + 96|2fauth) + + local app_id="96" + + local app_name="2FAuth自托管二步验证器" + local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" + local app_url="官网: https://github.com/Bubka/2FAuth" + local docker_name="2fauth" + local docker_port="8096" + local app_size="1" + + docker_app_install() { + + add_yuming + + mkdir -p /home/docker/2fauth + mkdir -p /home/docker/2fauth/data + chmod -R 777 /home/docker/2fauth/ + cd /home/docker/2fauth + + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + cd /home/docker/2fauth + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/2fauth/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/2fauth/ && docker compose down --rmi all + rm -rf /home/docker/2fauth + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + 97|wgs) local app_id="97" From 72c6324975b6621d06b005f11d5b5a5b390d7593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 6 Sep 2025 22:44:02 +0800 Subject: [PATCH 166/553] Add 2FAuth application installation script --- kejilion.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index b943713b8..06f459a2b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8888,7 +8888,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" - echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台" + echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" @@ -11796,6 +11796,61 @@ while true; do ;; + + 96|2fauth) + + local app_id="96" + + local app_name="2FAuth自托管二步验证器" + local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" + local app_url="官网: https://github.com/Bubka/2FAuth" + local docker_name="2fauth" + local docker_port="8096" + local app_size="1" + + docker_app_install() { + + add_yuming + + mkdir -p /home/docker/2fauth + mkdir -p /home/docker/2fauth/data + chmod -R 777 /home/docker/2fauth/ + cd /home/docker/2fauth + + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + cd /home/docker/2fauth + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/2fauth/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/2fauth/ && docker compose down --rmi all + rm -rf /home/docker/2fauth + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + 97|wgs) local app_id="97" From 74dd85b15f4bc3d6968e3ed2d9e8e165665948b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 6 Sep 2025 22:45:10 +0800 Subject: [PATCH 167/553] Add 2FAuth installation and usage information --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ee90b209c..92d38ec91 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1295,5 +1295,6 @@ docker管理增加全局备份还原迁移功能。 2025-09-03 v4.1.3 应用市场尝试适配群晖系统文件结构。 应用安装时的存储空间检测进行优化,可以更精准检测应用目录大小。 +应用市场新增2FAuth自托管二步验证器的安装及使用。 ------------------------ From 49cb452ff3885de82c359db03c2c50a01dfaf3be Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 7 Sep 2025 04:42:46 +0000 Subject: [PATCH 168/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-07=2004:42:46?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 118 ++++++++++++++++++++++++++++++++++++++----------- jp/kejilion.sh | 110 ++++++++++++++++++++++++++++++++++++--------- kr/kejilion.sh | 118 ++++++++++++++++++++++++++++++++++++++----------- tw/kejilion.sh | 96 ++++++++++++++++++++++++++++++++++------ 4 files changed, 357 insertions(+), 85 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 40fdcb29f..26434a352 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.2" +sh_v="4.1.3" gl_hui='\e[37m' @@ -213,12 +213,13 @@ install() { check_disk_space() { + local required_gb=$1 + local path=${2:-/} - required_gb=$1 - required_space_mb=$((required_gb * 1024)) - available_space_mb=$(df -m / | awk 'NR==2 {print $4}') + local required_space_mb=$((required_gb * 1024)) + local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') - if [ $available_space_mb -lt $required_space_mb ]; then + if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}hint:${gl_bai}Insufficient disk space!" echo "Current available space: $((available_space_mb/1024))G" echo "Minimum demand space:${required_gb}G" @@ -230,6 +231,7 @@ check_disk_space() { } + install_dependency() { install wget unzip tar jq grep } @@ -1558,7 +1560,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -2121,7 +2123,7 @@ web_security() { 22) send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When it reaches the detection of a high load, the shield will be automatically turned on, and the low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" @@ -2707,13 +2709,23 @@ clear_host_port_rules() { setup_docker_dir() { - mkdir -p /home/docker/ 2>/dev/null + mkdir -p /home /home/docker 2>/dev/null + if [ -d "/vol1/1000/" ] && [ ! -d "/vol1/1000/docker" ]; then cp -f /home/docker /home/docker1 2>/dev/null rm -rf /home/docker 2>/dev/null mkdir -p /vol1/1000/docker 2>/dev/null ln -s /vol1/1000/docker /home/docker 2>/dev/null fi + + if [ -d "/volume1/" ] && [ ! -d "/volume1/docker" ]; then + cp -f /home/docker /home/docker1 2>/dev/null + rm -rf /home/docker 2>/dev/null + mkdir -p /volume1/docker 2>/dev/null + ln -s /volume1/docker /home/docker 2>/dev/null + fi + + } @@ -2757,7 +2769,8 @@ while true; do read -e -p "Please enter your selection:" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2765,7 +2778,6 @@ while true; do install jq install_docker docker_rum - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -2870,14 +2882,14 @@ docker_app_plus() { read -e -p "Enter your choice:" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq install_docker docker_app_install - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -3142,7 +3154,7 @@ send_stats "Install LDNMP environment" root_use clear echo -e "${gl_huang}The LDNMP environment is not installed, start installing the LDNMP environment...${gl_bai}" -check_disk_space 3 +check_disk_space 3 /home check_port install_dependency install_docker @@ -3159,7 +3171,7 @@ send_stats "Install nginx environment" root_use clear echo -e "${gl_huang}nginx is not installed, start installing nginx environment...${gl_bai}" -check_disk_space 1 +check_disk_space 1 /home check_port install_dependency install_docker @@ -4514,7 +4526,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login is set up!${gl_bai}" +echo -e "${gl_lv}ROOT login settings are complete!${gl_bai}" } @@ -4992,7 +5004,7 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Operating system detected:$os_name $os_version" + echo "Detected operating systems:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." @@ -5821,7 +5833,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Create a new connection example:" + echo "Example to create a new connection:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -8031,7 +8043,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Background login path: /admin" + echo "Backend login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -8854,7 +8866,7 @@ while true; do echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" + echo -e "${gl_kjlan}59. ${color59}NewAPI Big Model Asset Management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" @@ -8876,7 +8888,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser File Manager" echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" - echo -e "${gl_kjlan}95. ${color95}paperless document management platform" + echo -e "${gl_kjlan}95. ${color95}paperless document management platform${gl_kjlan}96. ${color96}2FAuth self-hosted two-step validator" echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" @@ -9189,7 +9201,8 @@ while true; do case $choice in 1) - check_disk_space 2 + setup_docker_dir + check_disk_space 2 /home/docker read -e -p "Please set the email domain name, for example, mail.yuming.com:" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt @@ -11783,6 +11796,61 @@ while true; do ;; + + 96|2fauth) + + local app_id="96" + + local app_name="2FAuth自托管二步验证器" + local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" + local app_url="官网: https://github.com/Bubka/2FAuth" + local docker_name="2fauth" + local docker_port="8096" + local app_size="1" + + docker_app_install() { + + add_yuming + + mkdir -p /home/docker/2fauth + mkdir -p /home/docker/2fauth/data + chmod -R 777 /home/docker/2fauth/ + cd /home/docker/2fauth + + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + cd /home/docker/2fauth + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + clear + echo "Installed" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/2fauth/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/2fauth/ && docker compose down --rmi all + rm -rf /home/docker/2fauth + echo "The app has been uninstalled" + } + + docker_app_plus + + ;; + + + 97|wgs) local app_id="97" @@ -11925,7 +11993,7 @@ while true; do fi done - # Write to the configuration file + # Write to configuration file echo "$input" > "$CONFIG_FILE" echo "Client configuration has been saved to$CONFIG_FILE" @@ -12251,7 +12319,7 @@ linux_Settings() { echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host analysis${gl_kjlan}22. ${gl_bai}SSH Defense Program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" @@ -12282,7 +12350,7 @@ 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 "Shortcut keys are set" + echo "Shortcut keys have been set" send_stats "Script shortcut keys have been set" break_end linux_Settings @@ -12952,7 +13020,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 80e1e4a16..ea8d514fc 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.2" +sh_v="4.1.3" gl_hui='\e[37m' @@ -213,12 +213,13 @@ install() { check_disk_space() { + local required_gb=$1 + local path=${2:-/} - required_gb=$1 - required_space_mb=$((required_gb * 1024)) - available_space_mb=$(df -m / | awk 'NR==2 {print $4}') + local required_space_mb=$((required_gb * 1024)) + local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') - if [ $available_space_mb -lt $required_space_mb ]; then + if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}ヒント:${gl_bai}ディスクスペースが不十分です!" echo "現在利用可能なスペース:$((available_space_mb/1024))g" echo "最小需要スペース:${required_gb}G" @@ -230,6 +231,7 @@ check_disk_space() { } + install_dependency() { install wget unzip tar jq grep } @@ -1558,7 +1560,7 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -2121,7 +2123,7 @@ web_security() { 22) send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷の検出に達すると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" echo "--------------" echo "CFパラメーターを取得します:" echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" @@ -2707,13 +2709,23 @@ clear_host_port_rules() { setup_docker_dir() { - mkdir -p /home/docker/ 2>/dev/null + mkdir -p /home /home/docker 2>/dev/null + if [ -d "/vol1/1000/" ] && [ ! -d "/vol1/1000/docker" ]; then cp -f /home/docker /home/docker1 2>/dev/null rm -rf /home/docker 2>/dev/null mkdir -p /vol1/1000/docker 2>/dev/null ln -s /vol1/1000/docker /home/docker 2>/dev/null fi + + if [ -d "/volume1/" ] && [ ! -d "/volume1/docker" ]; then + cp -f /home/docker /home/docker1 2>/dev/null + rm -rf /home/docker 2>/dev/null + mkdir -p /volume1/docker 2>/dev/null + ln -s /volume1/docker /home/docker 2>/dev/null + fi + + } @@ -2757,7 +2769,8 @@ while true; do read -e -p "選択を入力してください:" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2765,7 +2778,6 @@ while true; do install jq install_docker docker_rum - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -2870,14 +2882,14 @@ docker_app_plus() { read -e -p "あなたの選択を入力してください:" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker 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 - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -3142,7 +3154,7 @@ send_stats "LDNMP環境をインストールします" root_use clear echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" -check_disk_space 3 +check_disk_space 3 /home check_port install_dependency install_docker @@ -3159,7 +3171,7 @@ send_stats "Nginx環境をインストールします" root_use clear echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" -check_disk_space 1 +check_disk_space 1 /home check_port install_dependency install_docker @@ -4514,7 +4526,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}" +echo -e "${gl_lv}ルートログイン設定が完了しました!${gl_bai}" } @@ -5821,7 +5833,7 @@ list_connections() { # 新しい接続を追加します add_connection() { send_stats "新しい接続を追加します" - echo "新しい接続例を作成します:" + echo "新しい接続を作成する例:" echo "- 接続名:my_server" echo "- IPアドレス:192.168.1.100" echo "- ユーザー名:root" @@ -8031,7 +8043,7 @@ linux_ldnmp() { echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックグラウンドログインパス: /admin" + echo "バックエンドログインパス: /admin" echo "------------------------" echo "ユーザー名:admin" echo "パスワード:管理者" @@ -8876,7 +8888,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー" echo -e "${gl_kjlan}93. ${color93}DUFS Minimalist Static File Server${gl_kjlan}94. ${color94}ゴープ高速ダウンロードツール" - echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム" + echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム${gl_kjlan}96. ${color96}2Fauth自己ホストの2段階検証装置" echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" @@ -9189,7 +9201,8 @@ while true; do case $choice in 1) - check_disk_space 2 + setup_docker_dir + check_disk_space 2 /home/docker read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt @@ -11783,6 +11796,61 @@ while true; do ;; + + 96|2fauth) + + local app_id="96" + + local app_name="2FAuth自托管二步验证器" + local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" + local app_url="官网: https://github.com/Bubka/2FAuth" + local docker_name="2fauth" + local docker_port="8096" + local app_size="1" + + docker_app_install() { + + add_yuming + + mkdir -p /home/docker/2fauth + mkdir -p /home/docker/2fauth/data + chmod -R 777 /home/docker/2fauth/ + cd /home/docker/2fauth + + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + cd /home/docker/2fauth + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + clear + echo "インストール" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/2fauth/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/2fauth/ && docker compose down --rmi all + rm -rf /home/docker/2fauth + echo "アプリはアンインストールされています" + } + + docker_app_plus + + ;; + + + 97|wgs) local app_id="97" @@ -12251,7 +12319,7 @@ linux_Settings() { 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" @@ -12952,7 +13020,7 @@ EOF ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "削除する必要があるコンテンツを解析するために、キーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts send_stats "ローカルホストの解析と削除" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 23df14ba3..035283b71 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.2" +sh_v="4.1.3" gl_hui='\e[37m' @@ -213,12 +213,13 @@ install() { check_disk_space() { + local required_gb=$1 + local path=${2:-/} - required_gb=$1 - required_space_mb=$((required_gb * 1024)) - available_space_mb=$(df -m / | awk 'NR==2 {print $4}') + local required_space_mb=$((required_gb * 1024)) + local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') - if [ $available_space_mb -lt $required_space_mb ]; then + if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}힌트:${gl_bai}불충분 한 디스크 공간!" echo "현재 사용 가능한 공간 : $ ((uvery_space_mb/1024)) g" echo "최소 수요 공간 :${required_gb}G" @@ -230,6 +231,7 @@ check_disk_space() { } + install_dependency() { install wget unzip tar jq grep } @@ -1558,7 +1560,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -1664,7 +1666,7 @@ cf_purge_cache() { # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트합니다 + # 캐시 청소 여부를 사용자에게 프롬프트하십시오 read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer if [[ "$answer" == "y" ]]; then echo "CF 정보가 저장됩니다$CONFIG_FILE, 나중에 CF 정보를 수정할 수 있습니다" @@ -2121,7 +2123,7 @@ web_security() { 22) send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" echo "--------------" echo "CF 매개 변수 가져 오기 :" echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" @@ -2707,13 +2709,23 @@ clear_host_port_rules() { setup_docker_dir() { - mkdir -p /home/docker/ 2>/dev/null + mkdir -p /home /home/docker 2>/dev/null + if [ -d "/vol1/1000/" ] && [ ! -d "/vol1/1000/docker" ]; then cp -f /home/docker /home/docker1 2>/dev/null rm -rf /home/docker 2>/dev/null mkdir -p /vol1/1000/docker 2>/dev/null ln -s /vol1/1000/docker /home/docker 2>/dev/null fi + + if [ -d "/volume1/" ] && [ ! -d "/volume1/docker" ]; then + cp -f /home/docker /home/docker1 2>/dev/null + rm -rf /home/docker 2>/dev/null + mkdir -p /volume1/docker 2>/dev/null + ln -s /volume1/docker /home/docker 2>/dev/null + fi + + } @@ -2757,7 +2769,8 @@ while true; do read -e -p "선택을 입력하십시오 :" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2765,7 +2778,6 @@ while true; do install jq install_docker docker_rum - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -2870,14 +2882,14 @@ docker_app_plus() { read -e -p "선택을 입력하십시오 :" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker 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 - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -3142,7 +3154,7 @@ send_stats "LDNMP 환경을 설치하십시오" root_use clear echo -e "${gl_huang}LDNMP 환경이 설치되지 않았으며 LDNMP 환경 설치를 시작하십시오 ...${gl_bai}" -check_disk_space 3 +check_disk_space 3 /home check_port install_dependency install_docker @@ -3159,7 +3171,7 @@ send_stats "Nginx 환경을 설치하십시오" root_use clear echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" -check_disk_space 1 +check_disk_space 1 /home check_port install_dependency install_docker @@ -4514,7 +4526,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}" +echo -e "${gl_lv}루트 로그인 설정이 완료되었습니다!${gl_bai}" } @@ -4992,7 +5004,7 @@ elrepo_install() { linux_Settings fi # 감지 된 운영 체제 정보를 인쇄합니다 - echo "운영 체제 감지 :$os_name $os_version" + echo "감지 된 운영 체제 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." @@ -5821,7 +5833,7 @@ list_connections() { # 새 연결을 추가하십시오 add_connection() { send_stats "새 연결을 추가하십시오" - echo "새 연결 예제 :" + echo "새 연결을 만드는 예 :" echo "- 연결 이름 : my_server" echo "-IP 주소 : 192.168.1.100" echo "- 사용자 이름 : 루트" @@ -8031,7 +8043,7 @@ linux_ldnmp() { echo "Redis Port : 6379" echo "" echo "웹 사이트 URL : https : //$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "백엔드 로그인 경로 : /admin" echo "------------------------" echo "사용자 이름 : 관리자" echo "비밀번호 : 관리자" @@ -8876,7 +8888,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자" echo -e "${gl_kjlan}93. ${color93}DUFS 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" - echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼" + echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAUTH 자체 호스팅 2 단계 유효성 검사기" echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" @@ -9189,7 +9201,8 @@ while true; do case $choice in 1) - check_disk_space 2 + setup_docker_dir + check_disk_space 2 /home/docker read -e -p "이메일 도메인 이름 (예 : Mail.yuming.com)을 설정하십시오." yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt @@ -11783,6 +11796,61 @@ while true; do ;; + + 96|2fauth) + + local app_id="96" + + local app_name="2FAuth自托管二步验证器" + local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" + local app_url="官网: https://github.com/Bubka/2FAuth" + local docker_name="2fauth" + local docker_port="8096" + local app_size="1" + + docker_app_install() { + + add_yuming + + mkdir -p /home/docker/2fauth + mkdir -p /home/docker/2fauth/data + chmod -R 777 /home/docker/2fauth/ + cd /home/docker/2fauth + + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + cd /home/docker/2fauth + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + clear + echo "설치" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/2fauth/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/2fauth/ && docker compose down --rmi all + rm -rf /home/docker/2fauth + echo "앱이 제거되었습니다" + } + + docker_app_plus + + ;; + + + 97|wgs) local app_id="97" @@ -11925,7 +11993,7 @@ while true; do fi done - # 구성 파일에 쓰십시오 + # 구성 파일에 씁니다 echo "$input" > "$CONFIG_FILE" echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE" @@ -12251,7 +12319,7 @@ linux_Settings() { 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}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 고위험 취약점을 수정하십시오" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" @@ -12282,7 +12350,7 @@ 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 "바로 가기 키가 설정되어 있습니다" + echo "바로 가기 키가 설정되었습니다" send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings @@ -12952,7 +13020,7 @@ EOF ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "삭제 해야하는 콘텐츠를 구문 분석하기위한 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts send_stats "로컬 호스트 구문 분석 및 삭제" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index b772af125..c13db439e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.2" +sh_v="4.1.3" gl_hui='\e[37m' @@ -213,12 +213,13 @@ install() { check_disk_space() { + local required_gb=$1 + local path=${2:-/} - required_gb=$1 - required_space_mb=$((required_gb * 1024)) - available_space_mb=$(df -m / | awk 'NR==2 {print $4}') + local required_space_mb=$((required_gb * 1024)) + local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') - if [ $available_space_mb -lt $required_space_mb ]; then + if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}提示:${gl_bai}磁盤空間不足!" echo "當前可用空間: $((available_space_mb/1024))G" echo "最小需求空間:${required_gb}G" @@ -230,6 +231,7 @@ check_disk_space() { } + install_dependency() { install wget unzip tar jq grep } @@ -2707,13 +2709,23 @@ clear_host_port_rules() { setup_docker_dir() { - mkdir -p /home/docker/ 2>/dev/null + mkdir -p /home /home/docker 2>/dev/null + if [ -d "/vol1/1000/" ] && [ ! -d "/vol1/1000/docker" ]; then cp -f /home/docker /home/docker1 2>/dev/null rm -rf /home/docker 2>/dev/null mkdir -p /vol1/1000/docker 2>/dev/null ln -s /vol1/1000/docker /home/docker 2>/dev/null fi + + if [ -d "/volume1/" ] && [ ! -d "/volume1/docker" ]; then + cp -f /home/docker /home/docker1 2>/dev/null + rm -rf /home/docker 2>/dev/null + mkdir -p /volume1/docker 2>/dev/null + ln -s /volume1/docker /home/docker 2>/dev/null + fi + + } @@ -2757,7 +2769,8 @@ while true; do read -e -p "請輸入你的選擇:" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker read -e -p "輸入應用對外服務端口,回車默認使用${docker_port}端口:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2765,7 +2778,6 @@ while true; do install jq install_docker docker_rum - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -2870,14 +2882,14 @@ docker_app_plus() { read -e -p "輸入你的選擇:" choice case $choice in 1) - check_disk_space $app_size + setup_docker_dir + check_disk_space $app_size /home/docker 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 - setup_docker_dir echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id @@ -3142,7 +3154,7 @@ send_stats "安裝LDNMP環境" root_use clear echo -e "${gl_huang}LDNMP環境未安裝,開始安裝LDNMP環境...${gl_bai}" -check_disk_space 3 +check_disk_space 3 /home check_port install_dependency install_docker @@ -3159,7 +3171,7 @@ send_stats "安裝nginx環境" root_use clear echo -e "${gl_huang}nginx未安裝,開始安裝nginx環境...${gl_bai}" -check_disk_space 1 +check_disk_space 1 /home check_port install_dependency install_docker @@ -8876,7 +8888,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代碼倉庫${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs極簡靜態文件服務器${gl_kjlan}94. ${color94}Gopeed高速下載工具" - echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台" + echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台${gl_kjlan}96. ${color96}2FAuth自託管二步驗證器" echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" @@ -9189,7 +9201,8 @@ while true; do case $choice in 1) - check_disk_space 2 + setup_docker_dir + check_disk_space 2 /home/docker read -e -p "請設置郵箱域名 例如 mail.yuming.com :" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt @@ -11783,6 +11796,61 @@ while true; do ;; + + 96|2fauth) + + local app_id="96" + + local app_name="2FAuth自托管二步验证器" + local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" + local app_url="官网: https://github.com/Bubka/2FAuth" + local docker_name="2fauth" + local docker_port="8096" + local app_size="1" + + docker_app_install() { + + add_yuming + + mkdir -p /home/docker/2fauth + mkdir -p /home/docker/2fauth/data + chmod -R 777 /home/docker/2fauth/ + cd /home/docker/2fauth + + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml + + sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + cd /home/docker/2fauth + docker compose up -d + + ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} + block_container_port "$docker_name" "$ipv4_address" + + clear + echo "已經安裝完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/2fauth/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/2fauth/ && docker compose down --rmi all + rm -rf /home/docker/2fauth + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + 97|wgs) local app_id="97" From b2835c2f8ea52613fc3cb41fbfbe9c5d19774853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 8 Sep 2025 21:44:39 +0800 Subject: [PATCH 169/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 498b73bee..2e15d40d6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12559,12 +12559,12 @@ EOF case $choice in 1) - sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "已切换为 IPv4 优先" send_stats "已切换为 IPv4 优先" ;; 2) - sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 + rm -f /etc/gai.conf echo "已切换为 IPv6 优先" send_stats "已切换为 IPv6 优先" ;; From bfc15210d34c4677fbac5c5e8a53b8de0f8b496f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 8 Sep 2025 21:45:05 +0800 Subject: [PATCH 170/553] Modify network preference handling in kejilion.sh --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 06f459a2b..66e7c510e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12559,12 +12559,12 @@ EOF case $choice in 1) - sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "已切换为 IPv4 优先" send_stats "已切换为 IPv4 优先" ;; 2) - sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 + rm -f /etc/gai.conf echo "已切换为 IPv6 优先" send_stats "已切换为 IPv6 优先" ;; From 3701f6c5b5b31d9ecfca3d3acc37156ea7206d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 8 Sep 2025 21:46:28 +0800 Subject: [PATCH 171/553] Enhance IPV4 and IPV6 prioritization in system tools Optimized system tools for IPV4 and IPV6 prioritization. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 92d38ec91..38a3b4899 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1296,5 +1296,6 @@ docker管理增加全局备份还原迁移功能。 应用市场尝试适配群晖系统文件结构。 应用安装时的存储空间检测进行优化,可以更精准检测应用目录大小。 应用市场新增2FAuth自托管二步验证器的安装及使用。 +系统工具IPV4和IPV6优先进行优化,不再粗暴关闭V6来实现V4优先了。 ------------------------ From a554731d102bf439997e9c07b74bc07a394a8191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 8 Sep 2025 21:55:49 +0800 Subject: [PATCH 172/553] Update kejilion.sh --- cn/kejilion.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2e15d40d6..5aa950dc0 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12542,13 +12542,14 @@ EOF clear echo "设置v4/v6优先级" echo "------------------------" - local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) - if [ "$ipv6_disabled" -eq 1 ]; then + + if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; 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 修复工具" @@ -12559,7 +12560,8 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "已切换为 IPv4 优先" send_stats "已切换为 IPv4 优先" ;; From 8994c7d211a8c4ba81324729f67b3e0d521afb55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 8 Sep 2025 21:56:17 +0800 Subject: [PATCH 173/553] Update kejilion.sh --- kejilion.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 66e7c510e..16c5b41c7 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12542,13 +12542,14 @@ EOF clear echo "设置v4/v6优先级" echo "------------------------" - local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) - if [ "$ipv6_disabled" -eq 1 ]; then + + if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; 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 修复工具" @@ -12559,7 +12560,8 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "已切换为 IPv4 优先" send_stats "已切换为 IPv4 优先" ;; From e70f8fba38cbf2dc91aa4ef2c4be357028d70af9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:05:43 +0800 Subject: [PATCH 174/553] Update custom_mysql_config.cnf --- custom_mysql_config.cnf | 1 + 1 file changed, 1 insertion(+) diff --git a/custom_mysql_config.cnf b/custom_mysql_config.cnf index a4240a45c..00aedc27a 100644 --- a/custom_mysql_config.cnf +++ b/custom_mysql_config.cnf @@ -42,3 +42,4 @@ log_queries_not_using_indexes = 1 # ⭐记录无索引扫描 # 其他 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION performance_schema=ON # ⭐生产环境推荐打开,监控分析好用 +disable-log-bin From 8f2fa2fb25dd334da09686d90c5bf710939a5187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:50:27 +0800 Subject: [PATCH 175/553] Update kejilion.sh --- cn/kejilion.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 5aa950dc0..4f8285dbc 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.3" +sh_v="4.1.4" gl_hui='\e[37m' @@ -4334,9 +4334,11 @@ set_dns() { ip_address +chattr -i /etc/resolv.conf 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 @@ -4347,6 +4349,8 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +chattr +i /etc/resolv.conf + } @@ -4391,7 +4395,9 @@ while true; do ;; 3) install nano + chattr -i /etc/resolv.conf nano /etc/resolv.conf + chattr +i /etc/resolv.conf send_stats "手动编辑DNS配置" ;; *) @@ -11816,16 +11822,16 @@ while true; do mkdir -p /home/docker/2fauth/data chmod -R 777 /home/docker/2fauth/ cd /home/docker/2fauth - + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml - sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml cd /home/docker/2fauth docker compose up -d ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + block_container_port "$docker_name" "$ipv4_address" clear echo "已经安装完成" From 00e65465bda30743f16118c71875290063d13755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:51:08 +0800 Subject: [PATCH 176/553] Update version and modify DNS handling in kejilion.sh --- kejilion.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 16c5b41c7..2a389435a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.3" +sh_v="4.1.4" gl_hui='\e[37m' @@ -4334,9 +4334,11 @@ set_dns() { ip_address +chattr -i /etc/resolv.conf 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 @@ -4347,6 +4349,8 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +chattr +i /etc/resolv.conf + } @@ -4391,7 +4395,9 @@ while true; do ;; 3) install nano + chattr -i /etc/resolv.conf nano /etc/resolv.conf + chattr +i /etc/resolv.conf send_stats "手动编辑DNS配置" ;; *) @@ -11816,16 +11822,16 @@ while true; do mkdir -p /home/docker/2fauth/data chmod -R 777 /home/docker/2fauth/ cd /home/docker/2fauth - + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml - sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml cd /home/docker/2fauth docker compose up -d ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + block_container_port "$docker_name" "$ipv4_address" clear echo "已经安装完成" From 2f42e8cc6590a8e4795eea88e8f95de1dbf308bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:52:43 +0800 Subject: [PATCH 177/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 38a3b4899..31da133d4 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1298,4 +1298,7 @@ docker管理增加全局备份还原迁移功能。 应用市场新增2FAuth自托管二步验证器的安装及使用。 系统工具IPV4和IPV6优先进行优化,不再粗暴关闭V6来实现V4优先了。 ------------------------ +2025-09-10 v4.1.4 +系统工具中DNS优化支持文件锁定功能,解决重启后文件复原问题。 +------------------------ From 1bae6f9df9db406b7fddd8aaac8ebe4a33a48523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:26:55 +0800 Subject: [PATCH 178/553] Update kejilion.sh --- cn/kejilion.sh | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 4f8285dbc..b1c426bd9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8896,6 +8896,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12034,6 +12035,64 @@ while true; do ;; + 99|dsm) + + local app_id="99" + + local app_name="dsm群晖虚拟机" + local app_text="Docker容器中的虚拟DSM" + local app_url="官网: https://github.com/vdsm/virtual-dsm" + local docker_name="dsm" + local docker_port="8099" + local app_size="16" + + docker_app_install() { + + read -e -p "设置 CPU 核数 (默认 2): " CPU_CORES + local CPU_CORES=${CPU_CORES:-2} + + read -e -p "设置内存大小 (默认 4G): " RAM_SIZE + local RAM_SIZE=${RAM_SIZE:-4} + + mkdir -p /home/docker/dsm + mkdir -p /home/docker/dsm/dev + chmod -R 777 /home/docker/dsm/ + cd /home/docker/dsm + + curl -o /home/docker/dsm/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/dsm-docker-compose.yml + + sed -i "s/5000:5000/${docker_port}:5000/g" /home/docker/dsm/docker-compose.yml + sed -i "s|CPU_CORES: "2"|CPU_CORES: "${CPU_CORES}"|g" /home/docker/dsm/docker-compose.yml + sed -i "s|RAM_SIZE: "2G"|RAM_SIZE: "${RAM_SIZE}G"|g" /home/docker/dsm/docker-compose.yml + cd /home/docker/dsm + docker compose up -d + + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/dsm/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/dsm/ && docker compose down --rmi all + rm -rf /home/docker/dsm + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + b) clear From 6b36e735b18efeeb5f5981b0f282bec85fed041d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:27:28 +0800 Subject: [PATCH 179/553] Update kejilion.sh --- kejilion.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 2a389435a..b7f3759b8 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8896,6 +8896,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" + echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12034,6 +12035,64 @@ while true; do ;; + 99|dsm) + + local app_id="99" + + local app_name="dsm群晖虚拟机" + local app_text="Docker容器中的虚拟DSM" + local app_url="官网: https://github.com/vdsm/virtual-dsm" + local docker_name="dsm" + local docker_port="8099" + local app_size="16" + + docker_app_install() { + + read -e -p "设置 CPU 核数 (默认 2): " CPU_CORES + local CPU_CORES=${CPU_CORES:-2} + + read -e -p "设置内存大小 (默认 4G): " RAM_SIZE + local RAM_SIZE=${RAM_SIZE:-4} + + mkdir -p /home/docker/dsm + mkdir -p /home/docker/dsm/dev + chmod -R 777 /home/docker/dsm/ + cd /home/docker/dsm + + curl -o /home/docker/dsm/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/dsm-docker-compose.yml + + sed -i "s/5000:5000/${docker_port}:5000/g" /home/docker/dsm/docker-compose.yml + sed -i "s|CPU_CORES: "2"|CPU_CORES: "${CPU_CORES}"|g" /home/docker/dsm/docker-compose.yml + sed -i "s|RAM_SIZE: "2G"|RAM_SIZE: "${RAM_SIZE}G"|g" /home/docker/dsm/docker-compose.yml + cd /home/docker/dsm + docker compose up -d + + clear + echo "已经安装完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/dsm/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/dsm/ && docker compose down --rmi all + rm -rf /home/docker/dsm + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + b) clear From 3cb7d1cf7d0e62cdaf8be4aebb7a01c07a88ffa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:29:11 +0800 Subject: [PATCH 180/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 31da133d4..e734f8f46 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1300,5 +1300,6 @@ docker管理增加全局备份还原迁移功能。 ------------------------ 2025-09-10 v4.1.4 系统工具中DNS优化支持文件锁定功能,解决重启后文件复原问题。 +应用市场新增了DSM群晖虚拟机的安装及使用。 ------------------------ From ec5cc2f5e2a1ba2db63ec4f940ddc6324c3b9e65 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 11 Sep 2025 03:33:26 +0000 Subject: [PATCH 181/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-11=2003:33:26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 107 ++++++++++++++++++++++++++++++++++++++++--------- jp/kejilion.sh | 103 ++++++++++++++++++++++++++++++++++++++--------- kr/kejilion.sh | 103 ++++++++++++++++++++++++++++++++++++++--------- tw/kejilion.sh | 83 ++++++++++++++++++++++++++++++++++---- 4 files changed, 332 insertions(+), 64 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 26434a352..c0b324593 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.3" +sh_v="4.1.4" gl_hui='\e[37m' @@ -1560,7 +1560,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or the resolved domain name:" yuming } @@ -1742,7 +1742,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to mode parameters + # Decide to turn on or off WAF according to the mode parameter if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -2123,7 +2123,7 @@ web_security() { 22) send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When it reaches the detection of a high load, the shield will be automatically turned on, and the low load will be automatically turned off for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" @@ -4334,9 +4334,11 @@ set_dns() { ip_address +chattr -i /etc/resolv.conf 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 @@ -4347,6 +4349,8 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +chattr +i /etc/resolv.conf + } @@ -4391,7 +4395,9 @@ while true; do ;; 3) install nano + chattr -i /etc/resolv.conf nano /etc/resolv.conf + chattr +i /etc/resolv.conf send_stats "Manually edit DNS configuration" ;; *) @@ -4526,7 +4532,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login settings are complete!${gl_bai}" +echo -e "${gl_lv}ROOT login is set up!${gl_bai}" } @@ -5004,7 +5010,7 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Detected operating systems:$os_name $os_version" + echo "Operating system detected:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." @@ -8866,7 +8872,7 @@ while true; do echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI Big Model Asset Management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" + echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" @@ -8890,6 +8896,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" echo -e "${gl_kjlan}95. ${color95}paperless document management platform${gl_kjlan}96. ${color96}2FAuth self-hosted two-step validator" echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" @@ -11816,16 +11823,16 @@ while true; do mkdir -p /home/docker/2fauth/data chmod -R 777 /home/docker/2fauth/ cd /home/docker/2fauth - + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml - sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml cd /home/docker/2fauth docker compose up -d ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + block_container_port "$docker_name" "$ipv4_address" clear echo "Installed" @@ -11939,7 +11946,7 @@ while true; do echo -e "${gl_huang}All client configuration codes:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}All outputs are all configured by each client, and the usage method is as follows:${gl_bai}" + echo -e "${gl_lv}${COUNT}All outputs are provided by each client. The usage method is as follows:${gl_bai}" echo -e "${gl_lv}1. Download wg's APP on your mobile phone, scan the QR code above to quickly connect to the network${gl_bai}" echo -e "${gl_lv}2. Download the Windows client and copy the configuration code to connect to the network.${gl_bai}" echo -e "${gl_lv}3. Linux uses scripts to deploy WG clients and copy configuration code to connect to the network.${gl_bai}" @@ -11993,7 +12000,7 @@ while true; do fi done - # Write to configuration file + # Write to the configuration file echo "$input" > "$CONFIG_FILE" echo "Client configuration has been saved to$CONFIG_FILE" @@ -12028,6 +12035,64 @@ while true; do ;; + 99|dsm) + + local app_id="99" + + local app_name="dsm群晖虚拟机" + local app_text="Docker容器中的虚拟DSM" + local app_url="官网: https://github.com/vdsm/virtual-dsm" + local docker_name="dsm" + local docker_port="8099" + local app_size="16" + + docker_app_install() { + + read -e -p "Set the number of CPU cores (default 2):" CPU_CORES + local CPU_CORES=${CPU_CORES:-2} + + read -e -p "Set the memory size (default 4G):" RAM_SIZE + local RAM_SIZE=${RAM_SIZE:-4} + + mkdir -p /home/docker/dsm + mkdir -p /home/docker/dsm/dev + chmod -R 777 /home/docker/dsm/ + cd /home/docker/dsm + + curl -o /home/docker/dsm/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/dsm-docker-compose.yml + + sed -i "s/5000:5000/${docker_port}:5000/g" /home/docker/dsm/docker-compose.yml + sed -i "s|CPU_CORES: "2"|CPU_CORES: "${CPU_CORES}"|g" /home/docker/dsm/docker-compose.yml + sed -i "s|RAM_SIZE: "2G"|RAM_SIZE: "${RAM_SIZE}G"|g" /home/docker/dsm/docker-compose.yml + cd /home/docker/dsm + docker compose up -d + + clear + echo "Installed" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/dsm/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/dsm/ && docker compose down --rmi all + rm -rf /home/docker/dsm + echo "The app has been uninstalled" + } + + docker_app_plus + + ;; + + + + + b) clear @@ -12319,7 +12384,7 @@ linux_Settings() { echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host analysis${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" @@ -12350,7 +12415,7 @@ 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 "Shortcut keys have been set" + echo "Shortcut keys are set" send_stats "Script shortcut keys have been set" break_end linux_Settings @@ -12542,13 +12607,14 @@ EOF clear echo "Set v4/v6 priority" echo "------------------------" - local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) - if [ "$ipv6_disabled" -eq 1 ]; then + + if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; then echo -e "Current network priority settings:${gl_huang}IPv4${gl_bai}priority" else echo -e "Current network priority settings:${gl_huang}IPv6${gl_bai}priority" fi + echo "" echo "------------------------" echo "1. IPv4 priority 2. IPv6 priority 3. IPv6 repair tool" @@ -12559,12 +12625,13 @@ EOF case $choice in 1) - sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "Switched to IPv4 priority" send_stats "Switched to IPv4 priority" ;; 2) - sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 + rm -f /etc/gai.conf echo "Switched to IPv6 priority" send_stats "Switched to IPv6 priority" ;; @@ -12794,7 +12861,7 @@ EOF echo "3. Tokyo time in Japan 4. Seoul time in South Korea" echo "5. Singapore time 6. Kolkata time in India" echo "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Time in Bangkok, Thailand" + echo "9. Bangkok Time, Thailand" echo "------------------------" echo "Europe" echo "11. London time in the UK 12. Paris time in France" @@ -13020,7 +13087,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index ea8d514fc..dc5359911 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.3" +sh_v="4.1.4" gl_hui='\e[37m' @@ -1560,7 +1560,7 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1742,7 +1742,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることを決定します + # モードパラメーターに従って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 @@ -2123,7 +2123,7 @@ web_security() { 22) send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷の検出に達すると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" echo "--------------" echo "CFパラメーターを取得します:" echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" @@ -4334,9 +4334,11 @@ set_dns() { ip_address +chattr -i /etc/resolv.conf 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 @@ -4347,6 +4349,8 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +chattr +i /etc/resolv.conf + } @@ -4391,7 +4395,9 @@ while true; do ;; 3) install nano + chattr -i /etc/resolv.conf nano /etc/resolv.conf + chattr +i /etc/resolv.conf send_stats "DNS構成を手動で編集します" ;; *) @@ -4526,7 +4532,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}" +echo -e "${gl_lv}ルートログインがセットアップされます!${gl_bai}" } @@ -8227,7 +8233,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}3/6${gl_bai}] PHPバージョンを選択してください" echo "-------------" - read -e -p "1。PHPの最新バージョン| 2。Php7.4:" pho_v + read -e -p "1. The latest version of 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 @@ -8274,7 +8280,7 @@ linux_ldnmp() { ;; 2) echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8890,6 +8896,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}DUFS Minimalist Static File Server${gl_kjlan}94. ${color94}ゴープ高速ダウンロードツール" echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム${gl_kjlan}96. ${color96}2Fauth自己ホストの2段階検証装置" echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" echo -e "${gl_kjlan}------------------------" @@ -11816,16 +11823,16 @@ while true; do mkdir -p /home/docker/2fauth/data chmod -R 777 /home/docker/2fauth/ cd /home/docker/2fauth - + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml - sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml cd /home/docker/2fauth docker compose up -d ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + block_container_port "$docker_name" "$ipv4_address" clear echo "インストール" @@ -11939,7 +11946,7 @@ while true; do echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}すべての出力はすべて各クライアントによって構成されており、使用方法は次のとおりです。${gl_bai}" + echo -e "${gl_lv}${COUNT}すべての出力は各クライアントによって提供されます。使用方法は次のとおりです。${gl_bai}" echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}" echo -e "${gl_lv}2。Windowsクライアントをダウンロードし、構成コードをコピーしてネットワークに接続します。${gl_bai}" echo -e "${gl_lv}3。Linuxはスクリプトを使用してWGクライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}" @@ -12028,6 +12035,64 @@ while true; do ;; + 99|dsm) + + local app_id="99" + + local app_name="dsm群晖虚拟机" + local app_text="Docker容器中的虚拟DSM" + local app_url="官网: https://github.com/vdsm/virtual-dsm" + local docker_name="dsm" + local docker_port="8099" + local app_size="16" + + docker_app_install() { + + read -e -p "CPUコアの数を設定します(デフォルト2):" CPU_CORES + local CPU_CORES=${CPU_CORES:-2} + + read -e -p "メモリサイズを設定します(デフォルト4G):" RAM_SIZE + local RAM_SIZE=${RAM_SIZE:-4} + + mkdir -p /home/docker/dsm + mkdir -p /home/docker/dsm/dev + chmod -R 777 /home/docker/dsm/ + cd /home/docker/dsm + + curl -o /home/docker/dsm/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/dsm-docker-compose.yml + + sed -i "s/5000:5000/${docker_port}:5000/g" /home/docker/dsm/docker-compose.yml + sed -i "s|CPU_CORES: "2"|CPU_CORES: "${CPU_CORES}"|g" /home/docker/dsm/docker-compose.yml + sed -i "s|RAM_SIZE: "2G"|RAM_SIZE: "${RAM_SIZE}G"|g" /home/docker/dsm/docker-compose.yml + cd /home/docker/dsm + docker compose up -d + + clear + echo "インストール" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/dsm/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/dsm/ && docker compose down --rmi all + rm -rf /home/docker/dsm + echo "アプリはアンインストールされています" + } + + docker_app_plus + + ;; + + + + + b) clear @@ -12542,13 +12607,14 @@ EOF clear echo "V4/V6の優先度を設定します" echo "------------------------" - local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) - if [ "$ipv6_disabled" -eq 1 ]; then + + if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; 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修理ツール" @@ -12559,12 +12625,13 @@ EOF case $choice in 1) - sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "IPv4の優先度に切り替えました" send_stats "IPv4の優先度に切り替えました" ;; 2) - sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 + rm -f /etc/gai.conf echo "IPv6の優先度に切り替えました" send_stats "IPv6の優先度に切り替えました" ;; @@ -12794,7 +12861,7 @@ EOF echo "3。日本の東京時間4。韓国のソウル時間" echo "5。シンガポール時間6。インドのコルカタ時間" echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" - echo "9。タイのバンコクでの時間" + echo "9。バンコク・タイム、タイ" echo "------------------------" echo "ヨーロッパ" echo "11。英国のロンドン時間12。パリの時間フランスの時間" @@ -13020,7 +13087,7 @@ EOF ;; 2) - read -e -p "削除する必要があるコンテンツを解析するために、キーワードを入力してください。" delhost + read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts send_stats "ローカルホストの解析と削除" ;; @@ -13221,7 +13288,7 @@ EOF echo "TG-BOTモニタリングと早期警告機能" echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" echo "しきい値に達した後、ユーザーはユーザーに送信されます" echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" read -e -p "必ず続行しますか? (y/n):" choice diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 035283b71..1bd683889 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.3" +sh_v="4.1.4" gl_hui='\e[37m' @@ -1560,7 +1560,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming } @@ -2123,7 +2123,7 @@ web_security() { 22) send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" echo "--------------" echo "CF 매개 변수 가져 오기 :" echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" @@ -4334,9 +4334,11 @@ set_dns() { ip_address +chattr -i /etc/resolv.conf 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 @@ -4347,6 +4349,8 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +chattr +i /etc/resolv.conf + } @@ -4391,7 +4395,9 @@ while true; do ;; 3) install nano + chattr -i /etc/resolv.conf nano /etc/resolv.conf + chattr +i /etc/resolv.conf send_stats "DNS 구성을 수동으로 편집합니다" ;; *) @@ -4526,7 +4532,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}" +echo -e "${gl_lv}루트 로그인이 설정되었습니다!${gl_bai}" } @@ -5004,7 +5010,7 @@ elrepo_install() { linux_Settings fi # 감지 된 운영 체제 정보를 인쇄합니다 - echo "감지 된 운영 체제 :$os_name $os_version" + echo "운영 체제 감지 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." @@ -8890,6 +8896,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}DUFS 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAUTH 자체 호스팅 2 단계 유효성 검사기" echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" echo -e "${gl_kjlan}------------------------" @@ -11816,16 +11823,16 @@ while true; do mkdir -p /home/docker/2fauth/data chmod -R 777 /home/docker/2fauth/ cd /home/docker/2fauth - + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml - sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml cd /home/docker/2fauth docker compose up -d ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + block_container_port "$docker_name" "$ipv4_address" clear echo "설치" @@ -11939,7 +11946,7 @@ while true; do echo -e "${gl_huang}모든 클라이언트 구성 코드 :${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}모든 출력은 모두 각 클라이언트에 의해 구성되며 사용 방법은 다음과 같습니다.${gl_bai}" + echo -e "${gl_lv}${COUNT}모든 출력은 각 클라이언트가 제공합니다. 사용법은 다음과 같습니다.${gl_bai}" echo -e "${gl_lv}1. 휴대 전화에서 WG의 앱을 다운로드하고 위의 QR 코드를 스캔하여 네트워크에 빠르게 연결하십시오.${gl_bai}" echo -e "${gl_lv}2. Windows 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결하십시오.${gl_bai}" echo -e "${gl_lv}3. Linux는 스크립트를 사용하여 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" @@ -11993,7 +12000,7 @@ while true; do fi done - # 구성 파일에 씁니다 + # 구성 파일에 쓰십시오 echo "$input" > "$CONFIG_FILE" echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE" @@ -12028,6 +12035,64 @@ while true; do ;; + 99|dsm) + + local app_id="99" + + local app_name="dsm群晖虚拟机" + local app_text="Docker容器中的虚拟DSM" + local app_url="官网: https://github.com/vdsm/virtual-dsm" + local docker_name="dsm" + local docker_port="8099" + local app_size="16" + + docker_app_install() { + + read -e -p "CPU 코어 수를 설정 (기본값 2) :" CPU_CORES + local CPU_CORES=${CPU_CORES:-2} + + read -e -p "메모리 크기를 설정 (기본 4G) :" RAM_SIZE + local RAM_SIZE=${RAM_SIZE:-4} + + mkdir -p /home/docker/dsm + mkdir -p /home/docker/dsm/dev + chmod -R 777 /home/docker/dsm/ + cd /home/docker/dsm + + curl -o /home/docker/dsm/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/dsm-docker-compose.yml + + sed -i "s/5000:5000/${docker_port}:5000/g" /home/docker/dsm/docker-compose.yml + sed -i "s|CPU_CORES: "2"|CPU_CORES: "${CPU_CORES}"|g" /home/docker/dsm/docker-compose.yml + sed -i "s|RAM_SIZE: "2G"|RAM_SIZE: "${RAM_SIZE}G"|g" /home/docker/dsm/docker-compose.yml + cd /home/docker/dsm + docker compose up -d + + clear + echo "설치" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/dsm/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/dsm/ && docker compose down --rmi all + rm -rf /home/docker/dsm + echo "앱이 제거되었습니다" + } + + docker_app_plus + + ;; + + + + + b) clear @@ -12319,7 +12384,7 @@ linux_Settings() { 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}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 고위험 취약점을 수정하십시오" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" @@ -12350,7 +12415,7 @@ 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 "바로 가기 키가 설정되었습니다" + echo "바로 가기 키가 설정되어 있습니다" send_stats "스크립트 바로 가기 키가 설정되었습니다" break_end linux_Settings @@ -12542,13 +12607,14 @@ EOF clear echo "V4/V6 우선 순위를 설정하십시오" echo "------------------------" - local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) - if [ "$ipv6_disabled" -eq 1 ]; then + + if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; 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 수리 도구" @@ -12559,12 +12625,13 @@ EOF case $choice in 1) - sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "IPv4 우선 순위로 전환되었습니다" send_stats "IPv4 우선 순위로 전환되었습니다" ;; 2) - sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 + rm -f /etc/gai.conf echo "IPv6 우선 순위로 전환되었습니다" send_stats "IPv6 우선 순위로 전환되었습니다" ;; @@ -12794,7 +12861,7 @@ EOF echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" - echo "9. 태국 방콕에서의 시간" + echo "9. 방콕 시간, 태국" echo "------------------------" echo "유럽" echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" @@ -13020,7 +13087,7 @@ EOF ;; 2) - read -e -p "삭제 해야하는 콘텐츠를 구문 분석하기위한 키워드를 입력하십시오." delhost + read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts send_stats "로컬 호스트 구문 분석 및 삭제" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index c13db439e..27036859e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.3" +sh_v="4.1.4" gl_hui='\e[37m' @@ -4334,9 +4334,11 @@ set_dns() { ip_address +chattr -i /etc/resolv.conf 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 @@ -4347,6 +4349,8 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +chattr +i /etc/resolv.conf + } @@ -4391,7 +4395,9 @@ while true; do ;; 3) install nano + chattr -i /etc/resolv.conf nano /etc/resolv.conf + chattr +i /etc/resolv.conf send_stats "手動編輯DNS配置" ;; *) @@ -8890,6 +8896,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs極簡靜態文件服務器${gl_kjlan}94. ${color94}Gopeed高速下載工具" echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台${gl_kjlan}96. ${color96}2FAuth自託管二步驗證器" echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" + echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -11816,16 +11823,16 @@ while true; do mkdir -p /home/docker/2fauth/data chmod -R 777 /home/docker/2fauth/ cd /home/docker/2fauth - + curl -o /home/docker/2fauth/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/2fauth-docker-compose.yml sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/2fauth/docker-compose.yml - sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml + sed -i "s/yuming.com/${yuming}/g" /home/docker/2fauth/docker-compose.yml cd /home/docker/2fauth docker compose up -d ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} - block_container_port "$docker_name" "$ipv4_address" + block_container_port "$docker_name" "$ipv4_address" clear echo "已經安裝完成" @@ -12028,6 +12035,64 @@ while true; do ;; + 99|dsm) + + local app_id="99" + + local app_name="dsm群晖虚拟机" + local app_text="Docker容器中的虚拟DSM" + local app_url="官网: https://github.com/vdsm/virtual-dsm" + local docker_name="dsm" + local docker_port="8099" + local app_size="16" + + docker_app_install() { + + read -e -p "設置 CPU 核數 (默認 2):" CPU_CORES + local CPU_CORES=${CPU_CORES:-2} + + read -e -p "設置內存大小 (默認 4G):" RAM_SIZE + local RAM_SIZE=${RAM_SIZE:-4} + + mkdir -p /home/docker/dsm + mkdir -p /home/docker/dsm/dev + chmod -R 777 /home/docker/dsm/ + cd /home/docker/dsm + + curl -o /home/docker/dsm/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/dsm-docker-compose.yml + + sed -i "s/5000:5000/${docker_port}:5000/g" /home/docker/dsm/docker-compose.yml + sed -i "s|CPU_CORES: "2"|CPU_CORES: "${CPU_CORES}"|g" /home/docker/dsm/docker-compose.yml + sed -i "s|RAM_SIZE: "2G"|RAM_SIZE: "${RAM_SIZE}G"|g" /home/docker/dsm/docker-compose.yml + cd /home/docker/dsm + docker compose up -d + + clear + echo "已經安裝完成" + check_docker_app_ip + } + + + docker_app_update() { + cd /home/docker/dsm/ && docker compose down --rmi all + docker_app_install + } + + + docker_app_uninstall() { + cd /home/docker/dsm/ && docker compose down --rmi all + rm -rf /home/docker/dsm + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + + b) clear @@ -12542,13 +12607,14 @@ EOF clear echo "設置v4/v6優先級" echo "------------------------" - local ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6) - if [ "$ipv6_disabled" -eq 1 ]; then + + if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; 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 修復工具" @@ -12559,12 +12625,13 @@ EOF case $choice in 1) - sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1 + grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "已切換為 IPv4 優先" send_stats "已切換為 IPv4 優先" ;; 2) - sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1 + rm -f /etc/gai.conf echo "已切換為 IPv6 優先" send_stats "已切換為 IPv6 優先" ;; From e21dc962b3cc487ea87273e9b8ed602f0998bd59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 11 Sep 2025 20:48:56 +0800 Subject: [PATCH 182/553] Update kejilion.sh --- cn/kejilion.sh | 128 +++++++++++++++++++++++-------------------------- 1 file changed, 60 insertions(+), 68 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b1c426bd9..e8072f393 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1027,91 +1027,85 @@ disable_ddos_defense() { # 管理国家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" + shift # 去掉第一个参数,剩下的全是国家代码 install ipset - case "$action" in - block) - # 如果 ipset 不存在则创建 - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + for country_code in "$@"; do + local ipset_name="${country_code,,}_block" + local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" - # 下载 IP 区域文件 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" - exit 1 - fi + case "$action" in + block) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # 将 IP 添加到 ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "错误:下载 $country_code 的 IP 区域文件失败" + continue + fi - # 使用 iptables 阻止 IP - iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - echo "已成功阻止 $country_code 的 IP 地址" - rm "${country_code,,}.zone" - ;; + iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP + iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP - allow) - # 为允许的国家创建 ipset(如果不存在) - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + echo "已成功阻止 $country_code 的 IP 地址" + rm "${country_code,,}.zone" + ;; - # 下载 IP 区域文件 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" - exit 1 - fi + allow) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + 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" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "错误:下载 $country_code 的 IP 区域文件失败" + continue + fi - # 将 IP 添加到 ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + ipset flush "$ipset_name" + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + 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 + 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" - ;; + 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 + unblock) + 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 + if ipset list "$ipset_name" &> /dev/null; then + ipset destroy "$ipset_name" + fi - echo "已成功解除 $country_code 的 IP 地址限制" - ;; + echo "已成功解除 $country_code 的 IP 地址限制" + ;; - *) - ;; - esac + *) + echo "用法: manage_country_rules {block|allow|unblock} " + ;; + esac + done } + + + + + + iptables_panel() { root_use install iptables @@ -1225,18 +1219,18 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "请输入阻止的国家代码(多个国家代码可用空格隔开如 CN US JP): " country_code manage_country_rules block $country_code send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "请输入允许的国家代码(多个国家代码可用空格隔开如 CN US JP): " country_code manage_country_rules allow $country_code send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "请输入清除的国家代码(多个国家代码可用空格隔开如 CN US JP): " country_code manage_country_rules unblock $country_code send_stats "清除国家 $country_code 的IP" ;; @@ -1254,8 +1248,6 @@ iptables_panel() { - - add_swap() { local new_swap=$1 # 获取传入的参数 From ce4896e3c0cd04d9bef6ae721a41dd294fffaea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 11 Sep 2025 20:49:26 +0800 Subject: [PATCH 183/553] Update kejilion.sh --- kejilion.sh | 128 ++++++++++++++++++++++++---------------------------- 1 file changed, 60 insertions(+), 68 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index b7f3759b8..3c7f74956 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1027,91 +1027,85 @@ disable_ddos_defense() { # 管理国家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" + shift # 去掉第一个参数,剩下的全是国家代码 install ipset - case "$action" in - block) - # 如果 ipset 不存在则创建 - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + for country_code in "$@"; do + local ipset_name="${country_code,,}_block" + local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" - # 下载 IP 区域文件 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" - exit 1 - fi + case "$action" in + block) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # 将 IP 添加到 ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "错误:下载 $country_code 的 IP 区域文件失败" + continue + fi - # 使用 iptables 阻止 IP - iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - echo "已成功阻止 $country_code 的 IP 地址" - rm "${country_code,,}.zone" - ;; + iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP + iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP - allow) - # 为允许的国家创建 ipset(如果不存在) - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + echo "已成功阻止 $country_code 的 IP 地址" + rm "${country_code,,}.zone" + ;; - # 下载 IP 区域文件 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" - exit 1 - fi + allow) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + 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" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "错误:下载 $country_code 的 IP 区域文件失败" + continue + fi - # 将 IP 添加到 ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + ipset flush "$ipset_name" + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + 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 + 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" - ;; + 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 + unblock) + 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 + if ipset list "$ipset_name" &> /dev/null; then + ipset destroy "$ipset_name" + fi - echo "已成功解除 $country_code 的 IP 地址限制" - ;; + echo "已成功解除 $country_code 的 IP 地址限制" + ;; - *) - ;; - esac + *) + echo "用法: manage_country_rules {block|allow|unblock} " + ;; + esac + done } + + + + + + iptables_panel() { root_use install iptables @@ -1225,18 +1219,18 @@ iptables_panel() { ;; 15) - read -e -p "请输入阻止的国家代码(如 CN, US, JP): " country_code + read -e -p "请输入阻止的国家代码(多个国家代码可用空格隔开如 CN US JP): " country_code manage_country_rules block $country_code send_stats "允许国家 $country_code 的IP" ;; 16) - read -e -p "请输入允许的国家代码(如 CN, US, JP): " country_code + read -e -p "请输入允许的国家代码(多个国家代码可用空格隔开如 CN US JP): " country_code manage_country_rules allow $country_code send_stats "阻止国家 $country_code 的IP" ;; 17) - read -e -p "请输入清除的国家代码(如 CN, US, JP): " country_code + read -e -p "请输入清除的国家代码(多个国家代码可用空格隔开如 CN US JP): " country_code manage_country_rules unblock $country_code send_stats "清除国家 $country_code 的IP" ;; @@ -1254,8 +1248,6 @@ iptables_panel() { - - add_swap() { local new_swap=$1 # 获取传入的参数 From a184e532f737acadf34cbf0bf82d3835f5124cc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 11 Sep 2025 20:50:57 +0800 Subject: [PATCH 184/553] Add support for multiple country IP management in firewall --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e734f8f46..a6c2e3511 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1301,5 +1301,6 @@ docker管理增加全局备份还原迁移功能。 2025-09-10 v4.1.4 系统工具中DNS优化支持文件锁定功能,解决重启后文件复原问题。 应用市场新增了DSM群晖虚拟机的安装及使用。 +系统工具中高级防火墙支持同时对多个国家地区的IP进行放行或封禁。 ------------------------ From a43ae11e79988b815de168afc22dad80e143b67a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 11 Sep 2025 21:36:21 +0800 Subject: [PATCH 185/553] Update kejilion.sh --- cn/kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e8072f393..07acc8e47 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1051,7 +1051,6 @@ manage_country_rules() { done < "${country_code,,}.zone" 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" @@ -1072,8 +1071,9 @@ manage_country_rules() { ipset add "$ipset_name" "$ip" 2>/dev/null done < "${country_code,,}.zone" + + iptables -P INPUT 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" @@ -1081,7 +1081,6 @@ manage_country_rules() { unblock) 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 if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" From fd583f206500d6771549895293be355acec9bab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 11 Sep 2025 21:36:57 +0800 Subject: [PATCH 186/553] Modify iptables rules for IP blocking and allowing --- kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3c7f74956..d61fc3ed3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1051,7 +1051,6 @@ manage_country_rules() { done < "${country_code,,}.zone" 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" @@ -1072,8 +1071,9 @@ manage_country_rules() { ipset add "$ipset_name" "$ip" 2>/dev/null done < "${country_code,,}.zone" + + iptables -P INPUT 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" @@ -1081,7 +1081,6 @@ manage_country_rules() { unblock) 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 if ipset list "$ipset_name" &> /dev/null; then ipset destroy "$ipset_name" From 3a17199da8bc4bccfdf29aaf61b23da0951dcb35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:34:43 +0800 Subject: [PATCH 187/553] Update kejilion.sh --- cn/kejilion.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 07acc8e47..4c4844db3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1072,7 +1072,7 @@ manage_country_rules() { done < "${country_code,,}.zone" - iptables -P INPUT DROP + iptables -P INPUT DROP iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT echo "已成功允许 $country_code 的 IP 地址" @@ -13401,8 +13401,8 @@ EOF 41) clear send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" - echo "https://bbs.kejilion.pro/" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + echo "https://board.kejilion.pro" ;; 66) From c823c6f031c595b7880ff2b901c060e5247e95f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:35:32 +0800 Subject: [PATCH 188/553] Modify iptables policy and update echo messages Updated messages and adjusted iptables policy. --- kejilion.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index d61fc3ed3..1246e4fdd 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1072,7 +1072,7 @@ manage_country_rules() { done < "${country_code,,}.zone" - iptables -P INPUT DROP + iptables -P INPUT DROP iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT echo "已成功允许 $country_code 的 IP 地址" @@ -13401,8 +13401,8 @@ EOF 41) clear send_stats "留言板" - echo "科技lion留言板已迁移至官方社区!请在官方社区进行留言噢!" - echo "https://bbs.kejilion.pro/" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + echo "https://board.kejilion.pro" ;; 66) From 358cb98e8653ad5c46d93c0c835aad28c35942ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:39:47 +0800 Subject: [PATCH 189/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index a6c2e3511..151746895 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1302,5 +1302,6 @@ docker管理增加全局备份还原迁移功能。 系统工具中DNS优化支持文件锁定功能,解决重启后文件复原问题。 应用市场新增了DSM群晖虚拟机的安装及使用。 系统工具中高级防火墙支持同时对多个国家地区的IP进行放行或封禁。 +系统工具中留言板功能重新上线,您对脚本有任何想法欢迎留言交流! ------------------------ From 0e3a52071c65d8ba91788b54552ec04a900c5b45 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 14 Sep 2025 04:20:32 +0000 Subject: [PATCH 190/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-14=2004:20:32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 137 ++++++++++++++++++++++------------------------ jp/kejilion.sh | 143 +++++++++++++++++++++++-------------------------- kr/kejilion.sh | 135 ++++++++++++++++++++++------------------------ tw/kejilion.sh | 131 +++++++++++++++++++++----------------------- 4 files changed, 255 insertions(+), 291 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index c0b324593..aca8b6c25 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1027,91 +1027,84 @@ disable_ddos_defense() { # Functions that manage national IP rules 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" + shift # 去掉第一个参数,剩下的全是国家代码 install ipset - case "$action" in - block) - # Create if ipset does not exist - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + for country_code in "$@"; do + local ipset_name="${country_code,,}_block" + local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" - # Download IP area file - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "Error: Download$country_codeIP zone file failed" - exit 1 - fi + case "$action" in + block) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # Add IP to ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "Error: Download$country_codeIP zone file failed" + continue + fi - # Block IP with 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 + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - echo "Blocked successfully$country_codeIP address" - rm "${country_code,,}.zone" - ;; + iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - allow) - # Create an ipset for allowed countries (if not exist) - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + echo "Blocked successfully$country_codeIP address" + rm "${country_code,,}.zone" + ;; - # Download IP area file - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "Error: Download$country_codeIP zone file failed" - exit 1 - fi + allow) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # Delete existing national rules - 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" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "Error: Download$country_codeIP zone file failed" + continue + fi - # Add IP to ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + ipset flush "$ipset_name" + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - # Only IPs in designated countries are allowed - 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 "Successfully only allowed$country_codeIP address" - rm "${country_code,,}.zone" - ;; + iptables -P INPUT DROP + iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT - unblock) - # Delete the iptables rules for the country - 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 + echo "Successfully allowed$country_codeIP address" + rm "${country_code,,}.zone" + ;; - # Destroy ipset - if ipset list "$ipset_name" &> /dev/null; then - ipset destroy "$ipset_name" - fi + unblock) + iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null - echo "Successfully lifted$country_codeIP address restrictions" - ;; + if ipset list "$ipset_name" &> /dev/null; then + ipset destroy "$ipset_name" + fi - *) - ;; - esac + echo "Successfully lifted$country_codeIP address restrictions" + ;; + + *) + echo "Usage: manage_country_rules {block|allow|unblock} " + ;; + esac + done } + + + + + + iptables_panel() { root_use install iptables @@ -1225,18 +1218,18 @@ iptables_panel() { ;; 15) - read -e -p "Please enter the blocked country code (such as CN, US, JP):" country_code + read -e -p "Please enter the blocked country code (multiple country codes can be separated by spaces such as CN US JP):" country_code manage_country_rules block $country_code send_stats "Allowed countries$country_codeIP" ;; 16) - read -e -p "Please enter the allowed country code (such as CN, US, JP):" country_code + read -e -p "Please enter the allowed country code (multiple country codes can be separated by spaces such as CN US JP):" country_code manage_country_rules allow $country_code send_stats "Block the country$country_codeIP" ;; 17) - read -e -p "Please enter the cleared country code (such as CN, US, JP):" country_code + read -e -p "Please enter the cleared country code (multiple country codes can be separated by spaces such as CN US JP):" country_code manage_country_rules unblock $country_code send_stats "Clear the country$country_codeIP" ;; @@ -1254,8 +1247,6 @@ iptables_panel() { - - add_swap() { local new_swap=$1 # 获取传入的参数 @@ -5839,7 +5830,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Example to create a new connection:" + echo "Create a new connection example:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -8049,7 +8040,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Backend login path: /admin" + echo "Background login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -12861,7 +12852,7 @@ EOF echo "3. Tokyo time in Japan 4. Seoul time in South Korea" echo "5. Singapore time 6. Kolkata time in India" echo "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Bangkok Time, Thailand" + echo "9. Time in Bangkok, Thailand" echo "------------------------" echo "Europe" echo "11. London time in the UK 12. Paris time in France" @@ -13410,8 +13401,8 @@ EOF 41) clear send_stats "Message board" - echo "The technology lion message board has been moved to the official community! Please leave a message in the official community!" - echo "https://bbs.kejilion.pro/" + echo "Visit the official message board of Technology lion. If you have any ideas about scripts, please leave a message and communicate!" + echo "https://board.kejilion.pro" ;; 66) diff --git a/jp/kejilion.sh b/jp/kejilion.sh index dc5359911..a193a670a 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1027,91 +1027,84 @@ disable_ddos_defense() { # 国家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" + shift # 去掉第一个参数,剩下的全是国家代码 install ipset - case "$action" in - block) - # IPSETが存在しない場合は作成します - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + for country_code in "$@"; do + local ipset_name="${country_code,,}_block" + local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" - # IPエリアファイルをダウンロードします - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" - exit 1 - fi + case "$action" in + block) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # IPSETにIPを追加します - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + continue + fi - # iptablesでIPをブロックします - iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - echo "正常にブロックされました$country_codeIPアドレス" - rm "${country_code,,}.zone" - ;; + iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - allow) - # 許可された国のIPSETを作成する(存在しない場合) - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + echo "正常にブロックされました$country_codeIPアドレス" + rm "${country_code,,}.zone" + ;; - # IPエリアファイルをダウンロードします - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" - exit 1 - fi + allow) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + 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" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + continue + fi - # IPSETにIPを追加します - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + ipset flush "$ipset_name" + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + 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_codeIPアドレス" - rm "${country_code,,}.zone" - ;; + iptables -P INPUT DROP + iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT - 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 + echo "正常に許可されています$country_codeIPアドレス" + rm "${country_code,,}.zone" + ;; - # Ipsetを破壊します - if ipset list "$ipset_name" &> /dev/null; then - ipset destroy "$ipset_name" - fi + unblock) + iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null - echo "正常に持ち上げられました$country_codeIPアドレスの制限" - ;; + if ipset list "$ipset_name" &> /dev/null; then + ipset destroy "$ipset_name" + fi - *) - ;; - esac + echo "正常に持ち上げられました$country_codeIPアドレスの制限" + ;; + + *) + echo "使用法:manage_country_rules {block | lock | block} " + ;; + esac + done } + + + + + + iptables_panel() { root_use install iptables @@ -1225,18 +1218,18 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "ブロックされた国コードを入力してください(複数の国コードは、CN US JPなどのスペースで区切ることができます):" country_code manage_country_rules block $country_code send_stats "許可された国$country_codeIP" ;; 16) - read -e -p "許可された国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "許可された国コードを入力してください(複数の国コードは、CN US JPなどのスペースで区切ることができます):" country_code manage_country_rules allow $country_code send_stats "国をブロックします$country_codeIP" ;; 17) - read -e -p "クリアされた国コード(CN、米国、JPなど)を入力してください。" country_code + read -e -p "クリアされた国コードを入力してください(複数の国コードは、CN US JPなどのスペースで区切ることができます):" country_code manage_country_rules unblock $country_code send_stats "国をきれいにします$country_codeIP" ;; @@ -1254,8 +1247,6 @@ iptables_panel() { - - add_swap() { local new_swap=$1 # 获取传入的参数 @@ -8049,7 +8040,7 @@ linux_ldnmp() { echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックエンドログインパス: /admin" + echo "バックグラウンドログインパス: /admin" echo "------------------------" echo "ユーザー名:admin" echo "パスワード:管理者" @@ -8233,7 +8224,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}3/6${gl_bai}] PHPバージョンを選択してください" echo "-------------" - read -e -p "1. The latest version of php | 2。Php7.4:" pho_v + 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 @@ -8280,7 +8271,7 @@ linux_ldnmp() { ;; 2) echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download_db + read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -12384,7 +12375,7 @@ linux_Settings() { 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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" @@ -12861,7 +12852,7 @@ EOF echo "3。日本の東京時間4。韓国のソウル時間" echo "5。シンガポール時間6。インドのコルカタ時間" echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" - echo "9。バンコク・タイム、タイ" + echo "9。タイのバンコクでの時間" echo "------------------------" echo "ヨーロッパ" echo "11。英国のロンドン時間12。パリの時間フランスの時間" @@ -13288,7 +13279,7 @@ EOF echo "TG-BOTモニタリングと早期警告機能" echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" echo "しきい値に達した後、ユーザーはユーザーに送信されます" echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" read -e -p "必ず続行しますか? (y/n):" choice @@ -13410,8 +13401,8 @@ EOF 41) clear send_stats "メッセージボード" - echo "テクノロジーライオンメッセージボードは公式コミュニティに移動されました!公式コミュニティにメッセージを残してください!" - echo "https://bbs.kejilion.pro/" + echo "公式のメッセージ技術委員会ライオンをご覧ください。スクリプトについて何かアイデアがある場合は、メッセージを残してコミュニケーションをとってください!" + echo "https://board.kejilion.pro" ;; 66) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 1bd683889..18dfbf7e6 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1027,91 +1027,84 @@ disable_ddos_defense() { # 국가 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" + shift # 去掉第一个参数,剩下的全是国家代码 install ipset - case "$action" in - block) - # IPSET가 존재하지 않는 경우 작성하십시오 - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + for country_code in "$@"; do + local ipset_name="${country_code,,}_block" + local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" - # IP 영역 파일을 다운로드하십시오 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" - exit 1 - fi + case "$action" in + block) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # IPSET에 IP를 추가하십시오 - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + continue + fi - # iptables와 함께 IP를 차단하십시오 - iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - echo "성공적으로 차단되었습니다$country_codeIP 주소" - rm "${country_code,,}.zone" - ;; + iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - allow) - # 허용 국가에 대한 IPSET 만들기 (존재하지 않는 경우) - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + echo "성공적으로 차단되었습니다$country_codeIP 주소" + rm "${country_code,,}.zone" + ;; - # IP 영역 파일을 다운로드하십시오 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" - exit 1 - fi + allow) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + 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" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + continue + fi - # IPSET에 IP를 추가하십시오 - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + ipset flush "$ipset_name" + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + 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_codeIP 주소" - rm "${country_code,,}.zone" - ;; + iptables -P INPUT DROP + iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT - 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 + echo "성공적으로 허용됩니다$country_codeIP 주소" + rm "${country_code,,}.zone" + ;; - # ipset을 파괴하십시오 - if ipset list "$ipset_name" &> /dev/null; then - ipset destroy "$ipset_name" - fi + unblock) + iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null - echo "성공적으로 해제했습니다$country_codeIP 주소 제한" - ;; + if ipset list "$ipset_name" &> /dev/null; then + ipset destroy "$ipset_name" + fi - *) - ;; - esac + echo "성공적으로 해제했습니다$country_codeIP 주소 제한" + ;; + + *) + echo "사용법 : manage_country_rules {블록 | 허용 | unblock} " + ;; + esac + done } + + + + + + iptables_panel() { root_use install iptables @@ -1225,18 +1218,18 @@ iptables_panel() { ;; 15) - read -e -p "차단 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "차단 된 국가 코드를 입력하십시오 (여러 국가 코드는 CN US JP와 같은 공간으로 분리 될 수 있습니다) :" country_code manage_country_rules block $country_code send_stats "허용 국가$country_codeIP" ;; 16) - read -e -p "허용 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "허용 된 국가 코드를 입력하십시오 (여러 국가 코드는 CN US JP와 같은 공간으로 분리 될 수 있습니다) :" country_code manage_country_rules allow $country_code send_stats "나라를 차단하십시오$country_codeIP" ;; 17) - read -e -p "청산 된 국가 코드 (예 : CN, US, JP)를 입력하십시오." country_code + read -e -p "청산 된 국가 코드를 입력하십시오 (여러 국가 코드는 CN US JP와 같은 공간으로 분리 될 수 있습니다) :" country_code manage_country_rules unblock $country_code send_stats "나라를 정리하십시오$country_codeIP" ;; @@ -1254,8 +1247,6 @@ iptables_panel() { - - add_swap() { local new_swap=$1 # 获取传入的参数 @@ -8049,7 +8040,7 @@ linux_ldnmp() { echo "Redis Port : 6379" echo "" echo "웹 사이트 URL : https : //$yuming" - echo "백엔드 로그인 경로 : /admin" + echo "백그라운드 로그인 경로 : /admin" echo "------------------------" echo "사용자 이름 : 관리자" echo "비밀번호 : 관리자" @@ -12861,7 +12852,7 @@ EOF echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" - echo "9. 방콕 시간, 태국" + echo "9. 태국 방콕에서의 시간" echo "------------------------" echo "유럽" echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" @@ -13410,8 +13401,8 @@ EOF 41) clear send_stats "게시판" - echo "Technology Lion 게시판은 공식 커뮤니티로 옮겨졌습니다! 공식 커뮤니티에 메시지를 남겨주세요!" - echo "https://bbs.kejilion.pro/" + echo "공식 게시위원회의 기술 사자를 방문하십시오. 스크립트에 대한 아이디어가 있으시면 메시지를 남겨두고 의사 소통하십시오!" + echo "https://board.kejilion.pro" ;; 66) diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 27036859e..89fa24d13 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1027,91 +1027,84 @@ disable_ddos_defense() { # 管理國家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" + shift # 去掉第一个参数,剩下的全是国家代码 install ipset - case "$action" in - block) - # 如果 ipset 不存在則創建 - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + for country_code in "$@"; do + local ipset_name="${country_code,,}_block" + local download_url="http://www.ipdeny.com/ipblocks/data/countries/${country_code,,}.zone" - # 下載 IP 區域文件 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "錯誤:下載$country_code的 IP 區域文件失敗" - exit 1 - fi + case "$action" in + block) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + fi - # 將 IP 添加到 ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "錯誤:下載$country_code的 IP 區域文件失敗" + continue + fi - # 使用 iptables 阻止 IP - iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - iptables -I OUTPUT -m set --match-set "$ipset_name" dst -j DROP + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + done < "${country_code,,}.zone" - echo "已成功阻止$country_code的 IP 地址" - rm "${country_code,,}.zone" - ;; + iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - allow) - # 為允許的國家創建 ipset(如果不存在) - if ! ipset list "$ipset_name" &> /dev/null; then - ipset create "$ipset_name" hash:net - fi + echo "已成功阻止$country_code的 IP 地址" + rm "${country_code,,}.zone" + ;; - # 下載 IP 區域文件 - if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "錯誤:下載$country_code的 IP 區域文件失敗" - exit 1 - fi + allow) + if ! ipset list "$ipset_name" &> /dev/null; then + ipset create "$ipset_name" hash:net + 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" + if ! wget -q "$download_url" -O "${country_code,,}.zone"; then + echo "錯誤:下載$country_code的 IP 區域文件失敗" + continue + fi - # 將 IP 添加到 ipset - while IFS= read -r ip; do - ipset add "$ipset_name" "$ip" - done < "${country_code,,}.zone" + ipset flush "$ipset_name" + while IFS= read -r ip; do + ipset add "$ipset_name" "$ip" 2>/dev/null + 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" - ;; + iptables -P INPUT DROP + iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT - 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 + echo "已成功允許$country_code的 IP 地址" + rm "${country_code,,}.zone" + ;; - # 銷毀 ipset - if ipset list "$ipset_name" &> /dev/null; then - ipset destroy "$ipset_name" - fi + unblock) + iptables -D INPUT -m set --match-set "$ipset_name" src -j DROP 2>/dev/null - echo "已成功解除$country_code的 IP 地址限制" - ;; + if ipset list "$ipset_name" &> /dev/null; then + ipset destroy "$ipset_name" + fi - *) - ;; - esac + echo "已成功解除$country_code的 IP 地址限制" + ;; + + *) + echo "用法: manage_country_rules {block|allow|unblock} " + ;; + esac + done } + + + + + + iptables_panel() { root_use install iptables @@ -1225,18 +1218,18 @@ iptables_panel() { ;; 15) - read -e -p "請輸入阻止的國家代碼(如 CN, US, JP):" country_code + read -e -p "請輸入阻止的國家代碼(多個國家代碼可用空格隔開如 CN US JP):" country_code manage_country_rules block $country_code send_stats "允許國家$country_code的IP" ;; 16) - read -e -p "請輸入允許的國家代碼(如 CN, US, JP):" country_code + read -e -p "請輸入允許的國家代碼(多個國家代碼可用空格隔開如 CN US JP):" country_code manage_country_rules allow $country_code send_stats "阻止國家$country_code的IP" ;; 17) - read -e -p "請輸入清除的國家代碼(如 CN, US, JP):" country_code + read -e -p "請輸入清除的國家代碼(多個國家代碼可用空格隔開如 CN US JP):" country_code manage_country_rules unblock $country_code send_stats "清除國家$country_code的IP" ;; @@ -1254,8 +1247,6 @@ iptables_panel() { - - add_swap() { local new_swap=$1 # 获取传入的参数 @@ -13410,8 +13401,8 @@ EOF 41) clear send_stats "留言板" - echo "科技lion留言板已遷移至官方社區!請在官方社區進行留言噢!" - echo "https://bbs.kejilion.pro/" + echo "訪問科技lion官方留言板,您對腳本有任何想法歡迎留言交流!" + echo "https://board.kejilion.pro" ;; 66) From 13f0a062dbcfa4eaaed29b650dba859b177e17fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 13:59:20 +0800 Subject: [PATCH 191/553] Update kejilion.sh --- cn/kejilion.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 4c4844db3..7ad5b38c3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.4" +sh_v="4.1.5" gl_hui='\e[37m' @@ -14198,6 +14198,7 @@ echo "软件状态查看 k status sshd | k 状态 sshd " echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " echo "域名证书申请 k ssl" echo "域名证书到期查询 k ssl ps" +echo "docker管理平面 k docker" echo "docker环境安装 k docker install |k docker 安装" echo "docker容器管理 k docker ps |k docker 容器" echo "docker镜像管理 k docker img |k docker 镜像" @@ -14408,7 +14409,7 @@ else docker_image ;; *) - k_info + linux_docker ;; esac ;; From a9b98940f4fa836d69bc8c8a49e57e2fb64f6f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:00:08 +0800 Subject: [PATCH 192/553] Update kejilion.sh --- kejilion.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 1246e4fdd..886670107 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.4" +sh_v="4.1.5" gl_hui='\e[37m' @@ -14198,6 +14198,7 @@ echo "软件状态查看 k status sshd | k 状态 sshd " echo "软件开机启动 k enable docker | k autostart docke | k 开机启动 docker " echo "域名证书申请 k ssl" echo "域名证书到期查询 k ssl ps" +echo "docker管理平面 k docker" echo "docker环境安装 k docker install |k docker 安装" echo "docker容器管理 k docker ps |k docker 容器" echo "docker镜像管理 k docker img |k docker 镜像" @@ -14408,7 +14409,7 @@ else docker_image ;; *) - k_info + linux_docker ;; esac ;; From b72c75a4953c8ff6ba926dba319fc05bdbeb3933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:02:33 +0800 Subject: [PATCH 193/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 151746895..ced5e8b0d 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1304,4 +1304,7 @@ docker管理增加全局备份还原迁移功能。 系统工具中高级防火墙支持同时对多个国家地区的IP进行放行或封禁。 系统工具中留言板功能重新上线,您对脚本有任何想法欢迎留言交流! ------------------------ +2025-09-15 v4.1.5 +k快捷键增加 k docker 命令行输入后能够快速到达docker管理平面。 +------------------------ From 87f9560da9af7fa4bf6553e3e5b3f1027a74841e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:44:11 +0800 Subject: [PATCH 194/553] Update kejilion.sh --- cn/kejilion.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 7ad5b38c3..c92aaf35b 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -7126,13 +7126,15 @@ docker_ssh_migration() { read -e -p "目标服务器IP: " TARGET_IP read -e -p "目标服务器SSH用户名: " TARGET_USER + read -e -p "目标服务器SSH端口 [默认22]: " TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} - LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}传输备份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then # 使用密钥登录 - scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } @@ -8523,6 +8525,8 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "目标服务器SSH端口 [默认22]: " TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "错误: 请输入远端服务器IP。" continue @@ -8531,7 +8535,7 @@ linux_ldnmp() { 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/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "文件已传送至远程服务器home目录。" else echo "未找到要传送的文件。" @@ -12100,6 +12104,9 @@ while true; do case "$choice" in [Yy]) read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "目标服务器SSH端口 [默认22]: " TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} + if [ -z "$remote_ip" ]; then echo "错误: 请输入远端服务器IP。" continue @@ -12108,7 +12115,7 @@ while true; do 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:/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "文件已传送至远程服务器/根目录。" else echo "未找到要传送的文件。" From b2ea52ad39224955522b2eadb74bfed81c37406a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:44:42 +0800 Subject: [PATCH 195/553] Add SSH port option for SCP commands --- kejilion.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 886670107..a5a4fa177 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -7126,13 +7126,15 @@ docker_ssh_migration() { read -e -p "目标服务器IP: " TARGET_IP read -e -p "目标服务器SSH用户名: " TARGET_USER + read -e -p "目标服务器SSH端口 [默认22]: " TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} - LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}传输备份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then # 使用密钥登录 - scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } @@ -8523,6 +8525,8 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "目标服务器SSH端口 [默认22]: " TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "错误: 请输入远端服务器IP。" continue @@ -8531,7 +8535,7 @@ linux_ldnmp() { 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/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "文件已传送至远程服务器home目录。" else echo "未找到要传送的文件。" @@ -12100,6 +12104,9 @@ while true; do case "$choice" in [Yy]) read -e -p "请输入远端服务器IP: " remote_ip + read -e -p "目标服务器SSH端口 [默认22]: " TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} + if [ -z "$remote_ip" ]; then echo "错误: 请输入远端服务器IP。" continue @@ -12108,7 +12115,7 @@ while true; do 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:/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "文件已传送至远程服务器/根目录。" else echo "未找到要传送的文件。" From f680aba498a04b476cd958cee27d0f42321e3955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:46:43 +0800 Subject: [PATCH 196/553] Enhance docker command with custom SSH port support --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ced5e8b0d..f751167ba 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1306,5 +1306,6 @@ docker管理增加全局备份还原迁移功能。 ------------------------ 2025-09-15 v4.1.5 k快捷键增加 k docker 命令行输入后能够快速到达docker管理平面。 +docker,站点等数据迁移时支持用户自定义输入SSH端口号迁移数据。 ------------------------ From f117335e79eac7502eb7acb41ba8b508cb8b2fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:22:44 +0800 Subject: [PATCH 197/553] Update kejilion.sh --- cn/kejilion.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index c92aaf35b..74f529ada 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6870,16 +6870,13 @@ docker_ssh_migration() { BLUE='\033[0;36m' NC='\033[0m' - BACKUP_ROOT="/tmp" - DATE_STR=$(date +%Y%m%d_%H%M%S) - - is_compose_container() { local container=$1 docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 } list_backups() { + local BACKUP_ROOT="/tmp" echo -e "${BLUE}当前备份列表:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } @@ -6899,6 +6896,8 @@ docker_ssh_migration() { install tar jq gzip install_docker + local BACKUP_ROOT="/tmp" + local DATE_STR=$(date +%Y%m%d_%H%M%S) local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') From 6ac741ed00294054e99c97eab4434bf7dceea8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:23:39 +0800 Subject: [PATCH 198/553] Refactor backup variables in kejilion.sh --- kejilion.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index a5a4fa177..45066ea79 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6870,16 +6870,13 @@ docker_ssh_migration() { BLUE='\033[0;36m' NC='\033[0m' - BACKUP_ROOT="/tmp" - DATE_STR=$(date +%Y%m%d_%H%M%S) - - is_compose_container() { local container=$1 docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 } list_backups() { + local BACKUP_ROOT="/tmp" echo -e "${BLUE}当前备份列表:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "无备份" } @@ -6899,6 +6896,8 @@ docker_ssh_migration() { install tar jq gzip install_docker + local BACKUP_ROOT="/tmp" + local DATE_STR=$(date +%Y%m%d_%H%M%S) local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') From 5cb3dc433cfa848c72cfa36ea69a42c0e4bc97dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Sep 2025 15:47:38 +0800 Subject: [PATCH 199/553] Update kejilion.sh --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 74f529ada..e2b1d872c 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13409,6 +13409,7 @@ EOF send_stats "留言板" echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" + echo "公共密码: kejilion.sh" ;; 66) From 31c1577c60719c7a5476d3721ec643ec7322df98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Sep 2025 15:48:44 +0800 Subject: [PATCH 200/553] Include public password in kejilion.sh --- kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion.sh b/kejilion.sh index 45066ea79..399c1409a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13409,6 +13409,7 @@ EOF send_stats "留言板" echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" + echo "公共密码: kejilion.sh" ;; 66) From 22bafd569f989cf2d238508c18247066f7c0eefe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:18:04 +0800 Subject: [PATCH 201/553] Update kejilion.sh --- cn/kejilion.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e2b1d872c..e5f6902f5 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6457,7 +6457,7 @@ rsync_manager() { -linux_ps() { +linux_info() { clear send_stats "系统信息查询" @@ -14146,7 +14146,7 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " choice case $choice in - 1) linux_ps ;; + 1) linux_info ;; 2) clear ; send_stats "系统更新" ; linux_update ;; 3) clear ; send_stats "系统清理" ; linux_clean ;; 4) linux_tools ;; @@ -14222,6 +14222,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夹 k fav | k 命令收藏夹" echo "应用市场管理 k app" echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "显示系统信息 k info" } @@ -14444,6 +14445,10 @@ else ;; + info) + linux_info + ;; + *) k_info ;; From c1e11aecd550b13d21739fc8d208b083eb94a90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:18:40 +0800 Subject: [PATCH 202/553] Update kejilion.sh --- kejilion.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 399c1409a..3965f8432 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6457,7 +6457,7 @@ rsync_manager() { -linux_ps() { +linux_info() { clear send_stats "系统信息查询" @@ -14146,7 +14146,7 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "请输入你的选择: " choice case $choice in - 1) linux_ps ;; + 1) linux_info ;; 2) clear ; send_stats "系统更新" ; linux_update ;; 3) clear ; send_stats "系统清理" ; linux_clean ;; 4) linux_tools ;; @@ -14222,6 +14222,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夹 k fav | k 命令收藏夹" echo "应用市场管理 k app" echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "显示系统信息 k info" } @@ -14444,6 +14445,10 @@ else ;; + info) + linux_info + ;; + *) k_info ;; From 50f4a8a82c4c7ff4010f0602e3ecd26dcaa7273e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:22:38 +0800 Subject: [PATCH 203/553] Update kejilion_sh_log.txt with version 4.1.5 changes --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index f751167ba..18d77c7f2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1307,5 +1307,6 @@ docker管理增加全局备份还原迁移功能。 2025-09-15 v4.1.5 k快捷键增加 k docker 命令行输入后能够快速到达docker管理平面。 docker,站点等数据迁移时支持用户自定义输入SSH端口号迁移数据。 +k快捷命令增加了 k info 系统信息快速查询。 ------------------------ From 0b5e5c82a648fbcec45d3956f33b123d0a9a95e3 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 21 Sep 2025 04:23:28 +0000 Subject: [PATCH 204/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-21=2004:23:28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 43 ++++++++++++++++++++++++++++--------------- jp/kejilion.sh | 41 +++++++++++++++++++++++++++-------------- kr/kejilion.sh | 43 ++++++++++++++++++++++++++++--------------- tw/kejilion.sh | 37 +++++++++++++++++++++++++------------ 4 files changed, 108 insertions(+), 56 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index aca8b6c25..aa17a3682 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.4" +sh_v="4.1.5" gl_hui='\e[37m' @@ -5830,7 +5830,7 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Create a new connection example:" + echo "Example to create a new connection:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" @@ -6457,7 +6457,7 @@ rsync_manager() { -linux_ps() { +linux_info() { clear send_stats "System information query" @@ -6870,16 +6870,13 @@ docker_ssh_migration() { BLUE='\033[0;36m' NC='\033[0m' - BACKUP_ROOT="/tmp" - DATE_STR=$(date +%Y%m%d_%H%M%S) - - is_compose_container() { local container=$1 docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 } list_backups() { + local BACKUP_ROOT="/tmp" echo -e "${BLUE}Current backup list:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "No backup" } @@ -6899,6 +6896,8 @@ docker_ssh_migration() { install tar jq gzip install_docker + local BACKUP_ROOT="/tmp" + local DATE_STR=$(date +%Y%m%d_%H%M%S) local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -7126,13 +7125,15 @@ docker_ssh_migration() { read -e -p "Target server IP:" TARGET_IP read -e -p "Target server SSH username:" TARGET_USER + read -e -p "Target server SSH port [default 22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} - LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}Transfer backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then # Log in with a key - scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } @@ -8523,6 +8524,8 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "Please enter the remote server IP:" remote_ip + read -e -p "Target server SSH port [default 22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "Error: Please enter the remote server IP." continue @@ -8531,7 +8534,7 @@ linux_ldnmp() { 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/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "The file has been transferred to the remote server home directory." else echo "The file to be transferred was not found." @@ -12100,6 +12103,9 @@ while true; do case "$choice" in [Yy]) read -e -p "Please enter the remote server IP:" remote_ip + read -e -p "Target server SSH port [default 22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} + if [ -z "$remote_ip" ]; then echo "Error: Please enter the remote server IP." continue @@ -12108,7 +12114,7 @@ while true; do 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:/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "The file has been transferred to the remote server/root directory." else echo "The file to be transferred was not found." @@ -13023,7 +13029,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "Choose what time to perform tasks every day? (Hours, 0-23):" hour + read -e -p "Choose when to perform tasks every day? (Hours, 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13078,7 +13084,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -13403,6 +13409,7 @@ EOF send_stats "Message board" echo "Visit the official message board of Technology lion. If you have any ideas about scripts, please leave a message and communicate!" echo "https://board.kejilion.pro" + echo "Public password: kejilion.sh" ;; 66) @@ -14139,7 +14146,7 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "Please enter your selection:" choice case $choice in - 1) linux_ps ;; + 1) linux_info ;; 2) clear ; send_stats "System update" ; linux_update ;; 3) clear ; send_stats "System Cleanup" ; linux_clean ;; 4) linux_tools ;; @@ -14198,6 +14205,7 @@ echo "Software status view k status sshd | k status sshd" echo "Software boot k enable docker | k autostart docke | k startup docker" echo "Domain name certificate application k ssl" echo "Domain name certificate expiration query k ssl ps" +echo "docker management plane k docker" echo "docker environment installation k docker install |k docker installation" echo "docker container management k docker ps |k docker container" echo "docker image management k docker img |k docker image" @@ -14214,6 +14222,7 @@ echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" echo "Command favorites k fav | k command favorites" echo "App Market Management k app" echo "Application number quick management k app 26 | k app 1panel | k app npm" +echo "Display system information k info" } @@ -14408,7 +14417,7 @@ else docker_image ;; *) - k_info + linux_docker ;; esac ;; @@ -14436,6 +14445,10 @@ else ;; + info) + linux_info + ;; + *) k_info ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index a193a670a..0a84f0c12 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.4" +sh_v="4.1.5" gl_hui='\e[37m' @@ -6457,7 +6457,7 @@ rsync_manager() { -linux_ps() { +linux_info() { clear send_stats "システム情報クエリ" @@ -6870,16 +6870,13 @@ docker_ssh_migration() { BLUE='\033[0;36m' NC='\033[0m' - BACKUP_ROOT="/tmp" - DATE_STR=$(date +%Y%m%d_%H%M%S) - - is_compose_container() { local container=$1 docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 } list_backups() { + local BACKUP_ROOT="/tmp" echo -e "${BLUE}現在のバックアップリスト:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし" } @@ -6899,6 +6896,8 @@ docker_ssh_migration() { install tar jq gzip install_docker + local BACKUP_ROOT="/tmp" + local DATE_STR=$(date +%Y%m%d_%H%M%S) local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -7126,13 +7125,15 @@ docker_ssh_migration() { read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーSSHユーザー名:" TARGET_USER + read -e -p "ターゲットサーバーSSHポート[デフォルト22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} - LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}バックアップを転送...${NC}" if [[ -z "$TARGET_PASS" ]]; then # キーでログインします - scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } @@ -8523,6 +8524,8 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "ターゲットサーバーSSHポート[デフォルト22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "エラー:リモートサーバーIPを入力してください。" continue @@ -8531,7 +8534,7 @@ linux_ldnmp() { 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/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" else echo "転送されるファイルは見つかりませんでした。" @@ -12100,6 +12103,9 @@ while true; do case "$choice" in [Yy]) read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "ターゲットサーバーSSHポート[デフォルト22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} + if [ -z "$remote_ip" ]; then echo "エラー:リモートサーバーIPを入力してください。" continue @@ -12108,7 +12114,7 @@ while true; do 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:/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "ファイルは、リモートサーバー/ルートディレクトリに転送されました。" else echo "転送されるファイルは見つかりませんでした。" @@ -13023,7 +13029,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "毎日タスクを実行する時間を選択しますか? (時間、0-23):" hour + read -e -p "毎日タスクを実行する時期を選択しますか? (時間、0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13078,7 +13084,7 @@ EOF ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "削除する必要があるコンテンツを解析するために、キーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts send_stats "ローカルホストの解析と削除" ;; @@ -13403,6 +13409,7 @@ EOF send_stats "メッセージボード" echo "公式のメッセージ技術委員会ライオンをご覧ください。スクリプトについて何かアイデアがある場合は、メッセージを残してコミュニケーションをとってください!" echo "https://board.kejilion.pro" + echo "パスワード:kejilion.sh" ;; 66) @@ -14139,7 +14146,7 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択を入力してください:" choice case $choice in - 1) linux_ps ;; + 1) linux_info ;; 2) clear ; send_stats "システムの更新" ; linux_update ;; 3) clear ; send_stats "システムのクリーンアップ" ; linux_clean ;; 4) linux_tools ;; @@ -14198,6 +14205,7 @@ echo "ソフトウェアステータスビューKステータスSSHD | Kステ echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" echo "ドメイン名証明書アプリケーションK SSL" echo "ドメイン名証明書の有効期限クエリK SSL PS" +echo "Docker Management Plane K Docker" echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" echo "Docker Container Management K Docker PS | K Dockerコンテナ" echo "Docker Image Management K Docker IMG | K Docker画像" @@ -14214,6 +14222,7 @@ echo "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" echo "コマンドお気に入りk fav | Kコマンドのお気に入り" echo "アプリ市場管理Kアプリ" echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" +echo "システム情報を表示k情報" } @@ -14408,7 +14417,7 @@ else docker_image ;; *) - k_info + linux_docker ;; esac ;; @@ -14436,6 +14445,10 @@ else ;; + info) + linux_info + ;; + *) k_info ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 18dfbf7e6..7a7f37a8a 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.4" +sh_v="4.1.5" gl_hui='\e[37m' @@ -6457,7 +6457,7 @@ rsync_manager() { -linux_ps() { +linux_info() { clear send_stats "시스템 정보 쿼리" @@ -6870,16 +6870,13 @@ docker_ssh_migration() { BLUE='\033[0;36m' NC='\033[0m' - BACKUP_ROOT="/tmp" - DATE_STR=$(date +%Y%m%d_%H%M%S) - - is_compose_container() { local container=$1 docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 } list_backups() { + local BACKUP_ROOT="/tmp" echo -e "${BLUE}현재 백업 목록 :${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음" } @@ -6899,6 +6896,8 @@ docker_ssh_migration() { install tar jq gzip install_docker + local BACKUP_ROOT="/tmp" + local DATE_STR=$(date +%Y%m%d_%H%M%S) local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -7126,13 +7125,15 @@ docker_ssh_migration() { read -e -p "대상 서버 IP :" TARGET_IP read -e -p "대상 서버 SSH 사용자 이름 :" TARGET_USER + read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} - LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}백업 전송 ...${NC}" if [[ -z "$TARGET_PASS" ]]; then # 키로 로그인하십시오 - scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } @@ -8523,6 +8524,8 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "오류 : 원격 서버 IP를 입력하십시오." continue @@ -8531,7 +8534,7 @@ linux_ldnmp() { 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/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." else echo "전송할 파일은 찾을 수 없었습니다." @@ -12100,6 +12103,9 @@ while true; do case "$choice" in [Yy]) read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} + if [ -z "$remote_ip" ]; then echo "오류 : 원격 서버 IP를 입력하십시오." continue @@ -12108,7 +12114,7 @@ while true; do 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:/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "파일은 원격 서버/루트 디렉토리로 전송되었습니다." else echo "전송할 파일은 찾을 수 없었습니다." @@ -13023,7 +13029,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "매일 작업을 수행 할 시간을 선택하십시오. (시간, 0-23) :" hour + read -e -p "매일 작업을 수행 할시기를 선택 하시겠습니까? (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13078,7 +13084,7 @@ EOF ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "삭제 해야하는 콘텐츠를 구문 분석하기위한 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts send_stats "로컬 호스트 구문 분석 및 삭제" ;; @@ -13403,6 +13409,7 @@ EOF send_stats "게시판" echo "공식 게시위원회의 기술 사자를 방문하십시오. 스크립트에 대한 아이디어가 있으시면 메시지를 남겨두고 의사 소통하십시오!" echo "https://board.kejilion.pro" + echo "공개 비밀번호 : Kejilion.sh" ;; 66) @@ -13736,7 +13743,7 @@ linux_file() { # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사합니다" + send_stats "파일 또는 디렉토리를 복사하십시오" ;; @@ -14139,7 +14146,7 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "선택을 입력하십시오 :" choice case $choice in - 1) linux_ps ;; + 1) linux_info ;; 2) clear ; send_stats "시스템 업데이트" ; linux_update ;; 3) clear ; send_stats "시스템 정리" ; linux_clean ;; 4) linux_tools ;; @@ -14198,6 +14205,7 @@ echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" echo "도메인 이름 인증서 응용 프로그램 K SSL" echo "도메인 이름 인증서 만료 쿼리 K SSL PS" +echo "Docker Management Plane K Docker" echo "도커 환경 설치 K 도커 설치 | K 도커 설치" echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" echo "Docker Image Management K Docker img | K Docker Image" @@ -14214,6 +14222,7 @@ echo "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" echo "앱 시장 관리 K 앱" echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" +echo "디스플레이 시스템 정보 K 정보" } @@ -14408,7 +14417,7 @@ else docker_image ;; *) - k_info + linux_docker ;; esac ;; @@ -14436,6 +14445,10 @@ else ;; + info) + linux_info + ;; + *) k_info ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 89fa24d13..b64b35045 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.4" +sh_v="4.1.5" gl_hui='\e[37m' @@ -6457,7 +6457,7 @@ rsync_manager() { -linux_ps() { +linux_info() { clear send_stats "系統信息查詢" @@ -6870,16 +6870,13 @@ docker_ssh_migration() { BLUE='\033[0;36m' NC='\033[0m' - BACKUP_ROOT="/tmp" - DATE_STR=$(date +%Y%m%d_%H%M%S) - - is_compose_container() { local container=$1 docker inspect "$container" | jq -e '.[0].Config.Labels["com.docker.compose.project"]' >/dev/null 2>&1 } list_backups() { + local BACKUP_ROOT="/tmp" echo -e "${BLUE}當前備份列表:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "無備份" } @@ -6899,6 +6896,8 @@ docker_ssh_migration() { install tar jq gzip install_docker + local BACKUP_ROOT="/tmp" + local DATE_STR=$(date +%Y%m%d_%H%M%S) local TARGET_CONTAINERS=() if [ -z "$containers" ]; then mapfile -t TARGET_CONTAINERS < <(docker ps --format '{{.Names}}') @@ -7126,13 +7125,15 @@ docker_ssh_migration() { read -e -p "目標服務器IP:" TARGET_IP read -e -p "目標服務器SSH用戶名:" TARGET_USER + read -e -p "目標服務器SSH端口 [默認22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} - LATEST_TAR="$BACKUP_DIR" # 这里直接传整个目录 + local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}傳輸備份中...${NC}" if [[ -z "$TARGET_PASS" ]]; then # 使用密鑰登錄 - scp -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } @@ -8523,6 +8524,8 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "請輸入遠端服務器IP:" remote_ip + read -e -p "目標服務器SSH端口 [默認22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "錯誤: 請輸入遠端服務器IP。" continue @@ -8531,7 +8534,7 @@ linux_ldnmp() { 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/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "文件已傳送至遠程服務器home目錄。" else echo "未找到要傳送的文件。" @@ -12100,6 +12103,9 @@ while true; do case "$choice" in [Yy]) read -e -p "請輸入遠端服務器IP:" remote_ip + read -e -p "目標服務器SSH端口 [默認22]:" TARGET_PORT + local TARGET_PORT=${TARGET_PORT:-22} + if [ -z "$remote_ip" ]; then echo "錯誤: 請輸入遠端服務器IP。" continue @@ -12108,7 +12114,7 @@ while true; do 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:/" + scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "文件已傳送至遠程服務器/根目錄。" else echo "未找到要傳送的文件。" @@ -13403,6 +13409,7 @@ EOF send_stats "留言板" echo "訪問科技lion官方留言板,您對腳本有任何想法歡迎留言交流!" echo "https://board.kejilion.pro" + echo "公共密碼: kejilion.sh" ;; 66) @@ -14139,7 +14146,7 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "請輸入你的選擇:" choice case $choice in - 1) linux_ps ;; + 1) linux_info ;; 2) clear ; send_stats "系統更新" ; linux_update ;; 3) clear ; send_stats "系統清理" ; linux_clean ;; 4) linux_tools ;; @@ -14198,6 +14205,7 @@ echo "軟件狀態查看 k status sshd | k 狀態 sshd" echo "軟件開機啟動 k enable docker | k autostart docke | k 開機啟動 docker" echo "域名證書申請 k ssl" echo "域名證書到期查詢 k ssl ps" +echo "docker管理平面 k docker" echo "docker環境安裝 k docker install |k docker 安裝" echo "docker容器管理 k docker ps |k docker 容器" echo "docker鏡像管理 k docker img |k docker 鏡像" @@ -14214,6 +14222,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夾 k fav | k 命令收藏夾" echo "應用市場管理 k app" echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" +echo "顯示系統信息 k info" } @@ -14408,7 +14417,7 @@ else docker_image ;; *) - k_info + linux_docker ;; esac ;; @@ -14436,6 +14445,10 @@ else ;; + info) + linux_info + ;; + *) k_info ;; From 1d7771cbc83ced24b0591ced186ba3ca7da2cc66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:41:49 +0800 Subject: [PATCH 205/553] Update kejilion.sh --- cn/kejilion.sh | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e5f6902f5..f85164f4a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.5" +sh_v="4.1.6" gl_hui='\e[37m' @@ -8890,7 +8890,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" - echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机" + echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12085,8 +12085,37 @@ while true; do + 100|syncthing) + local app_id="100" + local docker_name="syncthing" + local docker_img="syncthing/syncthing:latest" + local docker_port=8100 + docker_rum() { + + docker run -d \ + --name syncthing \ + -p ${docker_port}:8384 \ # Web UI + -p 22000:22000/tcp \ # TCP 文件传输 + -p 22000:22000/udp \ # QUIC 文件传输 + -p 21027:21027/udp \ # 局域网发现 + -v /home/docker/${docker_name}/st-sync:/var/syncthing \ + --hostname=my-syncthing \ + -e PUID=1000 \ + -e PGID=1000 \ + syncthing/syncthing:latest + + } + + local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) clear @@ -14222,7 +14251,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夹 k fav | k 命令收藏夹" echo "应用市场管理 k app" echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" -echo "显示系统信息 k info" +echo "显示系统信息 k info" } From ec7947607b5b510202445efac8d4c6d4a3affb43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:43:37 +0800 Subject: [PATCH 206/553] Update kejilion.sh --- kejilion.sh | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3965f8432..cb879bc96 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.5" +sh_v="4.1.6" gl_hui='\e[37m' @@ -8890,7 +8890,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" - echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机" + echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12085,8 +12085,37 @@ while true; do + 100|syncthing) + local app_id="100" + local docker_name="syncthing" + local docker_img="syncthing/syncthing:latest" + local docker_port=8100 + docker_rum() { + + docker run -d \ + --name syncthing \ + -p ${docker_port}:8384 \ # Web UI + -p 22000:22000/tcp \ # TCP 文件传输 + -p 22000:22000/udp \ # QUIC 文件传输 + -p 21027:21027/udp \ # 局域网发现 + -v /home/docker/${docker_name}/st-sync:/var/syncthing \ + --hostname=my-syncthing \ + -e PUID=1000 \ + -e PGID=1000 \ + syncthing/syncthing:latest + + } + + local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) clear @@ -14222,7 +14251,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夹 k fav | k 命令收藏夹" echo "应用市场管理 k app" echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" -echo "显示系统信息 k info" +echo "显示系统信息 k info" } From a983135f3dfd9b8a2562764161a3fa2b23a7406b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:45:18 +0800 Subject: [PATCH 207/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 18d77c7f2..b4a198a0f 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1309,4 +1309,7 @@ k快捷键增加 k docker 命令行输入后能够快速到达docker管理平面 docker,站点等数据迁移时支持用户自定义输入SSH端口号迁移数据。 k快捷命令增加了 k info 系统信息快速查询。 ------------------------ +2025-09-25 v4.1.6 +应用市场新增了Syncthing开源的点对点文件同步工具的安装及使用。 +------------------------ From 81c38801bdf1e454876f20e37adccde02c08e409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:01:43 +0800 Subject: [PATCH 208/553] Update kejilion.sh --- cn/kejilion.sh | 57 ++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f85164f4a..81578f659 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8384,7 +8384,7 @@ linux_ldnmp() { docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server @@ -8405,7 +8405,7 @@ linux_ldnmp() { 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 + 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 @@ -9499,7 +9499,7 @@ while true; do docker_rum() { - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server + docker run -d --name looking-glass --restart=always -p ${docker_port}:80 wikihostinc/looking-glass-server } @@ -9527,7 +9527,7 @@ while true; do -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ - --restart always \ + --restart=always \ adguard/adguardhome @@ -9654,7 +9654,7 @@ while true; do -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ - --restart always \ + --restart=always \ portainer/portainer } @@ -9678,7 +9678,7 @@ while true; do 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 + 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 } @@ -9727,7 +9727,7 @@ while true; do 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always ghcr.io/usememos/memos:latest } @@ -9849,7 +9849,7 @@ while true; do docker_rum() { - docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest + docker run -d -p ${docker_port}:8080 --name speedtest --restart=always ghcr.io/librespeed/speedtest } @@ -9897,7 +9897,7 @@ while true; do docker run -d \ --name photoprism \ - --restart always \ + --restart=always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ @@ -10002,7 +10002,7 @@ while true; do docker run -d \ --name pingvin-share \ - --restart always \ + --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share @@ -10128,7 +10128,7 @@ while true; do 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 + docker run -d -p ${docker_port}:5032 --restart=always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" @@ -10246,7 +10246,7 @@ while true; do --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ - --restart always \ + --restart=always \ registry:2 } @@ -10267,7 +10267,7 @@ while true; do docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart=always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10383,7 +10383,7 @@ while true; do docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ + docker run -d --restart=always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest @@ -10438,7 +10438,7 @@ while true; do 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 + 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 } @@ -10490,7 +10490,7 @@ while true; do 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 + 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 } @@ -10706,7 +10706,7 @@ while true; do 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 + 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 } @@ -10750,7 +10750,7 @@ while true; do chmod -R 777 /home/docker/n8n docker run -d --name n8n \ - --restart always \ + --restart=always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ @@ -10924,7 +10924,7 @@ while true; do docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p ${docker_port}:80 \ -v /home/docker/bitwarden/data:/data \ vaultwarden/server @@ -12008,7 +12008,7 @@ while true; do --cap-add SYS_MODULE \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules:ro \ - --restart always \ + --restart=always \ kjlion/wireguard:alpine sleep 3 @@ -12093,19 +12093,16 @@ while true; do local docker_port=8100 docker_rum() { - docker run -d \ - --name syncthing \ - -p ${docker_port}:8384 \ # Web UI - -p 22000:22000/tcp \ # TCP 文件传输 - -p 22000:22000/udp \ # QUIC 文件传输 - -p 21027:21027/udp \ # 局域网发现 - -v /home/docker/${docker_name}/st-sync:/var/syncthing \ + --name=syncthing \ --hostname=my-syncthing \ - -e PUID=1000 \ - -e PGID=1000 \ + --restart=always \ + -p ${docker_port}:8384 \ + -p 22000:22000/tcp \ + -p 22000:22000/udp \ + -p 21027:21027/udp \ + -v /home/docker/syncthing:/var/syncthing \ syncthing/syncthing:latest - } local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" From 453e58ab196c6a0771093877903a6e56cf3cb18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:02:18 +0800 Subject: [PATCH 209/553] Standardize docker restart policy syntax --- kejilion.sh | 57 +++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index cb879bc96..b58640b6e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8384,7 +8384,7 @@ linux_ldnmp() { docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server @@ -8405,7 +8405,7 @@ linux_ldnmp() { 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 + 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 @@ -9499,7 +9499,7 @@ while true; do docker_rum() { - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server + docker run -d --name looking-glass --restart=always -p ${docker_port}:80 wikihostinc/looking-glass-server } @@ -9527,7 +9527,7 @@ while true; do -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ - --restart always \ + --restart=always \ adguard/adguardhome @@ -9654,7 +9654,7 @@ while true; do -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ - --restart always \ + --restart=always \ portainer/portainer } @@ -9678,7 +9678,7 @@ while true; do 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 + 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 } @@ -9727,7 +9727,7 @@ while true; do 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always ghcr.io/usememos/memos:latest } @@ -9849,7 +9849,7 @@ while true; do docker_rum() { - docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest + docker run -d -p ${docker_port}:8080 --name speedtest --restart=always ghcr.io/librespeed/speedtest } @@ -9897,7 +9897,7 @@ while true; do docker run -d \ --name photoprism \ - --restart always \ + --restart=always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ @@ -10002,7 +10002,7 @@ while true; do docker run -d \ --name pingvin-share \ - --restart always \ + --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share @@ -10128,7 +10128,7 @@ while true; do 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 + docker run -d -p ${docker_port}:5032 --restart=always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" @@ -10246,7 +10246,7 @@ while true; do --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ - --restart always \ + --restart=always \ registry:2 } @@ -10267,7 +10267,7 @@ while true; do docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart=always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10383,7 +10383,7 @@ while true; do docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ + docker run -d --restart=always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest @@ -10438,7 +10438,7 @@ while true; do 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 + 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 } @@ -10490,7 +10490,7 @@ while true; do 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 + 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 } @@ -10706,7 +10706,7 @@ while true; do 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 + 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 } @@ -10750,7 +10750,7 @@ while true; do chmod -R 777 /home/docker/n8n docker run -d --name n8n \ - --restart always \ + --restart=always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ @@ -10924,7 +10924,7 @@ while true; do docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p ${docker_port}:80 \ -v /home/docker/bitwarden/data:/data \ vaultwarden/server @@ -12008,7 +12008,7 @@ while true; do --cap-add SYS_MODULE \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules:ro \ - --restart always \ + --restart=always \ kjlion/wireguard:alpine sleep 3 @@ -12093,19 +12093,16 @@ while true; do local docker_port=8100 docker_rum() { - docker run -d \ - --name syncthing \ - -p ${docker_port}:8384 \ # Web UI - -p 22000:22000/tcp \ # TCP 文件传输 - -p 22000:22000/udp \ # QUIC 文件传输 - -p 21027:21027/udp \ # 局域网发现 - -v /home/docker/${docker_name}/st-sync:/var/syncthing \ + --name=syncthing \ --hostname=my-syncthing \ - -e PUID=1000 \ - -e PGID=1000 \ + --restart=always \ + -p ${docker_port}:8384 \ + -p 22000:22000/tcp \ + -p 22000:22000/udp \ + -p 21027:21027/udp \ + -v /home/docker/syncthing:/var/syncthing \ syncthing/syncthing:latest - } local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" From 0c3d0dbf21d3187075d7ca5e04f965ef93110af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:26:50 +0800 Subject: [PATCH 210/553] Add stats sending and installation script execution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Send statistics and execute installation script for R探长开机脚本. --- cn/kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 81578f659..41739d2a4 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -7765,7 +7765,8 @@ linux_Oracle() { 4) clear - echo "该功能处于开发阶段,敬请期待!" + send_stats "R探长开机脚本" + bash <(wget -qO- https://github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear From 205bd0874bd89956b49515f75a860c95b63510d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:27:43 +0800 Subject: [PATCH 211/553] Update option 4 to send stats and execute script Replaced placeholder message with stats sending and script execution. --- kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index b58640b6e..64fb6ba02 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -7765,7 +7765,8 @@ linux_Oracle() { 4) clear - echo "该功能处于开发阶段,敬请期待!" + send_stats "R探长开机脚本" + bash <(wget -qO- https://github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear From 94933ca0655758c3cf2cc1d4002022056df50f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:30:28 +0800 Subject: [PATCH 212/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index b4a198a0f..e56245632 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1311,5 +1311,6 @@ k快捷命令增加了 k info 系统信息快速查询。 ------------------------ 2025-09-25 v4.1.6 应用市场新增了Syncthing开源的点对点文件同步工具的安装及使用。 +甲骨文云合集中增加大佬的R探长开机脚本,非常感谢大佬脚本。 ------------------------ From 1f1f51cb6e7842e222bbfc9e3b63e6a851045667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:07:08 +0800 Subject: [PATCH 213/553] Update kejilion.sh --- cn/kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 41739d2a4..379764420 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3063,6 +3063,8 @@ f2b_install_sshd() { fi rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf + sed -i 's/action = %(action_)s/action = iptables-multiport/g' /etc/fail2ban/jail.conf + } f2b_sshd() { @@ -7766,7 +7768,7 @@ linux_Oracle() { 4) clear send_stats "R探长开机脚本" - bash <(wget -qO- https://github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) + bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear From 5f475e9fefa9dbf718d5e8824f72b61998545d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:07:52 +0800 Subject: [PATCH 214/553] Fix fail2ban action and update oci-helper install URL Updated fail2ban action configuration and modified installation script URL. --- kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 64fb6ba02..4146d6d7a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3063,6 +3063,8 @@ f2b_install_sshd() { fi rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf + sed -i 's/action = %(action_)s/action = iptables-multiport/g' /etc/fail2ban/jail.conf + } f2b_sshd() { @@ -7766,7 +7768,7 @@ linux_Oracle() { 4) clear send_stats "R探长开机脚本" - bash <(wget -qO- https://github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) + bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear From f49992dc329a997af5fc838b3fe2f325d66a0231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:09:38 +0800 Subject: [PATCH 215/553] Fix fail2ban SSH rule loading error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复SSH防御fail2ban加载ssh规则报错的问题。 --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e56245632..79b60d8d2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1312,5 +1312,6 @@ k快捷命令增加了 k info 系统信息快速查询。 2025-09-25 v4.1.6 应用市场新增了Syncthing开源的点对点文件同步工具的安装及使用。 甲骨文云合集中增加大佬的R探长开机脚本,非常感谢大佬脚本。 +又来修复SSH防御fail2ban加载ssh规则报错的问题。 ------------------------ From 5d8ab0d1c3fd891f5909b6fdd43b73e426047c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:16:22 +0800 Subject: [PATCH 216/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 4146d6d7a..3bac38768 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3063,7 +3063,7 @@ f2b_install_sshd() { fi rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf - sed -i 's/action = %(action_)s/action = iptables-multiport/g' /etc/fail2ban/jail.conf + sed -i 's/action = %(action_)s/action = iptables-multiport/g' /path/to/fail2ban/config/fail2ban/jail.conf } From 377e3c090ede9ced9ed880f18e28f1da58facaa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:17:03 +0800 Subject: [PATCH 217/553] Update fail2ban config file path in kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 379764420..2eb221caf 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3063,7 +3063,7 @@ f2b_install_sshd() { fi rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf - sed -i 's/action = %(action_)s/action = iptables-multiport/g' /etc/fail2ban/jail.conf + sed -i 's/action = %(action_)s/action = iptables-multiport/g' /path/to/fail2ban/config/fail2ban/jail.conf } From 54e4a90d2bc3db4b9134601df8fbc3bd8899bef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:06:11 +0800 Subject: [PATCH 218/553] Update kejilion.sh --- cn/kejilion.sh | 114 +++++++++++++++---------------------------------- 1 file changed, 35 insertions(+), 79 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2eb221caf..9dbe8384f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1771,7 +1771,7 @@ check_waf_status() { check_cf_mode() { - if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then + if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" @@ -1985,19 +1985,11 @@ nginx_gzip() { web_security() { send_stats "LDNMP环境防御" while true; do + check_f2b_status check_waf_status check_cf_mode - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. 安装防御程序" echo "------------------------" @@ -2019,11 +2011,11 @@ web_security() { case $sub_choice in 1) f2b_install_sshd - cd /path/to/fail2ban/config/fail2ban/filter.d + cd /etc/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/ + cd /etc/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 + sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) @@ -2065,28 +2057,28 @@ web_security() { ;; 7) - docker exec -it fail2ban fail2ban-client status + fail2ban-client status ;; 8) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/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 + nano /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) - docker exec -it fail2ban fail2ban-client unban --all + fail2ban-client unban --all ;; 21) @@ -2099,14 +2091,14 @@ web_security() { 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/ + cd /etc/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 + cd /etc/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 + sed -i "s/kejilion@outlook.com/$cfuser/g" /etc/fail2ban/action.d/cloudflare-docker.conf + sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" @@ -2171,7 +2163,6 @@ web_security() { break ;; esac - fi break_end done } @@ -3017,53 +3008,28 @@ tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" f2b_status() { - docker exec -it fail2ban fail2ban-client reload + fail2ban-client reload sleep 3 - docker exec -it fail2ban fail2ban-client status + fail2ban-client status } f2b_status_xxx() { - docker exec -it fail2ban fail2ban-client status $xxx + 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=always \ - 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 +check_f2b_status() { + if command -v fail2ban-client >/dev/null 2>&1; then + check_f2b_status="已安装" 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 + check_f2b_status="未安装" fi +} + +f2b_install_sshd() { - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf - sed -i 's/action = %(action_)s/action = iptables-multiport/g' /path/to/fail2ban/config/fail2ban/jail.conf + install fail2ban + start fail2ban + enable fail2ban } @@ -13128,17 +13094,9 @@ EOF root_use send_stats "ssh防御" while true; do - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else - clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "SSH防御程序 $check_docker" + + check_f2b_status + echo -e "SSH防御程序 $check_f2b_status" echo "fail2ban是一个SSH防止暴力破解工具" echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13154,7 +13112,6 @@ EOF read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - install_docker f2b_install_sshd cd ~ @@ -13168,19 +13125,18 @@ EOF break_end ;; 3) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log break ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban echo "Fail2Ban防御程序已卸载" ;; *) break ;; esac - fi done ;; From 2079722370e8be6e3c822dfaa4ea42becd91288c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:07:02 +0800 Subject: [PATCH 219/553] Update kejilion.sh --- kejilion.sh | 114 ++++++++++++++++------------------------------------ 1 file changed, 35 insertions(+), 79 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3bac38768..0052102f4 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1771,7 +1771,7 @@ check_waf_status() { check_cf_mode() { - if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then + if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" @@ -1985,19 +1985,11 @@ nginx_gzip() { web_security() { send_stats "LDNMP环境防御" while true; do + check_f2b_status check_waf_status check_cf_mode - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "服务器网站防御程序 ${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服务器网站防御程序 ${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. 安装防御程序" echo "------------------------" @@ -2019,11 +2011,11 @@ web_security() { case $sub_choice in 1) f2b_install_sshd - cd /path/to/fail2ban/config/fail2ban/filter.d + cd /etc/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/ + cd /etc/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 + sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) @@ -2065,28 +2057,28 @@ web_security() { ;; 7) - docker exec -it fail2ban fail2ban-client status + fail2ban-client status ;; 8) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/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 + nano /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) - docker exec -it fail2ban fail2ban-client unban --all + fail2ban-client unban --all ;; 21) @@ -2099,14 +2091,14 @@ web_security() { 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/ + cd /etc/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 + cd /etc/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 + sed -i "s/kejilion@outlook.com/$cfuser/g" /etc/fail2ban/action.d/cloudflare-docker.conf + sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "已配置cloudflare模式,可在cf后台,站点-安全性-事件中查看拦截记录" @@ -2171,7 +2163,6 @@ web_security() { break ;; esac - fi break_end done } @@ -3017,53 +3008,28 @@ tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" f2b_status() { - docker exec -it fail2ban fail2ban-client reload + fail2ban-client reload sleep 3 - docker exec -it fail2ban fail2ban-client status + fail2ban-client status } f2b_status_xxx() { - docker exec -it fail2ban fail2ban-client status $xxx + 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=always \ - 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 +check_f2b_status() { + if command -v fail2ban-client >/dev/null 2>&1; then + check_f2b_status="已安装" 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 + check_f2b_status="未安装" fi +} + +f2b_install_sshd() { - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf - sed -i 's/action = %(action_)s/action = iptables-multiport/g' /path/to/fail2ban/config/fail2ban/jail.conf + install fail2ban + start fail2ban + enable fail2ban } @@ -13128,17 +13094,9 @@ EOF root_use send_stats "ssh防御" while true; do - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else - clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "SSH防御程序 $check_docker" + + check_f2b_status + echo -e "SSH防御程序 $check_f2b_status" echo "fail2ban是一个SSH防止暴力破解工具" echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13154,7 +13112,6 @@ EOF read -e -p "请输入你的选择: " sub_choice case $sub_choice in 1) - install_docker f2b_install_sshd cd ~ @@ -13168,19 +13125,18 @@ EOF break_end ;; 3) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log break ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban echo "Fail2Ban防御程序已卸载" ;; *) break ;; esac - fi done ;; From c75027fafcd266063028681f7b9ab75f10e745d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:14:45 +0800 Subject: [PATCH 220/553] Update kejilion.sh --- kejilion.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 0052102f4..a53f913d3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2068,6 +2068,7 @@ web_security() { rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "Fail2Ban防御程序已卸载" + break ;; 11) @@ -3027,6 +3028,7 @@ check_f2b_status() { f2b_install_sshd() { + docker rm -f fail2ban >/dev/null 2>&1 install fail2ban start fail2ban enable fail2ban @@ -13132,6 +13134,7 @@ EOF remove fail2ban rm -rf /etc/fail2ban echo "Fail2Ban防御程序已卸载" + break ;; *) break From 0bef33d8b6a1d5b67a8d8a6f56b98defaab957fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:15:17 +0800 Subject: [PATCH 221/553] Update kejilion.sh --- cn/kejilion.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9dbe8384f..a53f913d3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="CN" +canshu="default" permission_granted="false" ENABLE_STATS="true" @@ -2068,6 +2068,7 @@ web_security() { rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "Fail2Ban防御程序已卸载" + break ;; 11) @@ -3027,6 +3028,7 @@ check_f2b_status() { f2b_install_sshd() { + docker rm -f fail2ban >/dev/null 2>&1 install fail2ban start fail2ban enable fail2ban @@ -13132,6 +13134,7 @@ EOF remove fail2ban rm -rf /etc/fail2ban echo "Fail2Ban防御程序已卸载" + break ;; *) break From 055e21981f3a2a54e7bbd015bf8dd86557f5fe24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:15:37 +0800 Subject: [PATCH 222/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index a53f913d3..d4060cfc3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="default" +canshu="CN" permission_granted="false" ENABLE_STATS="true" From 286c1411eb3867e215675be86e02f22454c9e606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:17:59 +0800 Subject: [PATCH 223/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index d4060cfc3..b4061a2bf 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3020,9 +3020,9 @@ f2b_status_xxx() { check_f2b_status() { if command -v fail2ban-client >/dev/null 2>&1; then - check_f2b_status="已安装" + check_f2b_status="${gl_lv}已安装${gl_bai}" else - check_f2b_status="未安装" + check_f2b_status="${gl_hui}未安装${gl_bai}" fi } From c7b465dd626c50723e488c9a9eb0f1a88663e3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:18:29 +0800 Subject: [PATCH 224/553] Update kejilion.sh --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index a53f913d3..8e49521a1 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3020,9 +3020,9 @@ f2b_status_xxx() { check_f2b_status() { if command -v fail2ban-client >/dev/null 2>&1; then - check_f2b_status="已安装" + check_f2b_status="${gl_lv}已安装${gl_bai}" else - check_f2b_status="未安装" + check_f2b_status="${gl_hui}未安装${gl_bai}" fi } From 38014e60dc4f7fc96647794676ad6aff1ad1754a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:27:15 +0800 Subject: [PATCH 225/553] Update kejilion.sh --- cn/kejilion.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b4061a2bf..4e59e3fb6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2012,7 +2012,21 @@ web_security() { 1) f2b_install_sshd cd /etc/fail2ban/filter.d + + # 下载 fail2ban-nginx-cc.conf curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf + + # 下载 linuxserver 的 nginx 相关 filter + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf + + cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf From 3baf0acec11b8e508468a34acf0776362c48cc98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:27:56 +0800 Subject: [PATCH 226/553] Download fail2ban filter configurations Added commands to download various fail2ban filter configurations for nginx and apache. --- kejilion.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 8e49521a1..420d9ba4e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2012,7 +2012,21 @@ web_security() { 1) f2b_install_sshd cd /etc/fail2ban/filter.d + + # 下载 fail2ban-nginx-cc.conf curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf + + # 下载 linuxserver 的 nginx 相关 filter + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf + + cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf From 325c6fe00d2b12c8c337a7cc559f91d72f99fa40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:41:46 +0800 Subject: [PATCH 227/553] Update kejilion.sh --- kejilion.sh | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 420d9ba4e..9ad6354bf 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2012,20 +2012,15 @@ web_security() { 1) f2b_install_sshd cd /etc/fail2ban/filter.d - - # 下载 fail2ban-nginx-cc.conf curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf - - # 下载 linuxserver 的 nginx 相关 filter - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf - + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf From 64df0f89a5fab5ce9af76bf80053e0075ba809a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:42:38 +0800 Subject: [PATCH 228/553] Switch from curl to wget for fail2ban config downloads Replaced curl commands with wget for downloading fail2ban filter configurations. --- cn/kejilion.sh | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 4e59e3fb6..f3ad521f5 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2012,20 +2012,15 @@ web_security() { 1) f2b_install_sshd cd /etc/fail2ban/filter.d - - # 下载 fail2ban-nginx-cc.conf curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf - - # 下载 linuxserver 的 nginx 相关 filter - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf - curl -sS -O ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf - + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf From f1c1397823f6102e5e61fdfec975c7ef22aa0ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:48:15 +0800 Subject: [PATCH 229/553] Update kejilion.sh --- cn/kejilion.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f3ad521f5..3cfa6eae4 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2014,13 +2014,8 @@ web_security() { cd /etc/fail2ban/filter.d curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf From 459392a382bc9b3fba88b3d0b6dfd7df3170a753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:48:57 +0800 Subject: [PATCH 230/553] Clean up wget commands in kejilion.sh Removed unnecessary wget commands for fail2ban configurations. --- kejilion.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 9ad6354bf..5d218cba6 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2014,13 +2014,8 @@ web_security() { cd /etc/fail2ban/filter.d curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/fail2ban-nginx-cc.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/apache-badbots.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-botsearch.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-http-auth.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf - wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/php-url-fopen.conf cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf From 42bb99a3ae7a8f6be46876d00799bc5b461a485c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:54:32 +0800 Subject: [PATCH 231/553] Update kejilion.sh --- kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion.sh b/kejilion.sh index 5d218cba6..3af853806 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2016,6 +2016,7 @@ web_security() { wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}https://raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf From f929319e9cbc9490db1907ae2b39ce859e005ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 14:55:14 +0800 Subject: [PATCH 232/553] Update kejilion.sh --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 3cfa6eae4..0dedf1f18 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2016,6 +2016,7 @@ web_security() { wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}https://raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/nginx-docker-cc.conf From 3a7122f4f61a63c6ac8f328c348ea5ac37b05673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 15:04:48 +0800 Subject: [PATCH 233/553] Update kejilion.sh --- cn/kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0dedf1f18..18c85a20a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2034,28 +2034,28 @@ web_security() { local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-418" + local xxx="nginx-418" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-bad-request" + local xxx="nginx-bad-request" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-badbots" + local xxx="nginx-badbots" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-botsearch" + local xxx="nginx-botsearch" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-deny" + local xxx="nginx-deny" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-http-auth" + local xxx="nginx-http-auth" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-unauthorized" + local xxx="nginx-unauthorized" f2b_status_xxx echo "------------------------" - local xxx="docker-php-url-fopen" + local xxx="php-url-fopen" f2b_status_xxx echo "------------------------" From 0041d6d2f96e31c9ca02b9f862aff566fcda35a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 15:05:28 +0800 Subject: [PATCH 234/553] Update kejilion.sh --- kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3af853806..37b294ae3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2034,28 +2034,28 @@ web_security() { local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-418" + local xxx="nginx-418" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-bad-request" + local xxx="nginx-bad-request" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-badbots" + local xxx="nginx-badbots" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-botsearch" + local xxx="nginx-botsearch" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-deny" + local xxx="nginx-deny" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-http-auth" + local xxx="nginx-http-auth" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-unauthorized" + local xxx="nginx-unauthorized" f2b_status_xxx echo "------------------------" - local xxx="docker-php-url-fopen" + local xxx="php-url-fopen" f2b_status_xxx echo "------------------------" From ea18b87cfcfa950815df229e19270e3e9b05cbc2 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 28 Sep 2025 08:35:44 +0000 Subject: [PATCH 235/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-28=2008:35:44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 215 ++++++++++++++++++++++++------------------------ jp/kejilion.sh | 217 ++++++++++++++++++++++++------------------------- kr/kejilion.sh | 217 ++++++++++++++++++++++++------------------------- tw/kejilion.sh | 213 +++++++++++++++++++++++------------------------- 4 files changed, 417 insertions(+), 445 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index aa17a3682..e24ed301e 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.5" +sh_v="4.1.6" gl_hui='\e[37m' @@ -1771,7 +1771,7 @@ check_waf_status() { check_cf_mode() { - if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then + if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" @@ -1985,19 +1985,11 @@ nginx_gzip() { web_security() { send_stats "LDNMP environment defense" while true; do + check_f2b_status check_waf_status check_cf_mode - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "Server website defense program${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "Server website defense program${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. Install the defense program" echo "------------------------" @@ -2019,11 +2011,16 @@ web_security() { case $sub_choice in 1) f2b_install_sshd - cd /path/to/fail2ban/config/fail2ban/filter.d + cd /etc/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/ + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}https://raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + + cd /etc/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 + sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) @@ -2037,56 +2034,57 @@ web_security() { local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-418" + local xxx="nginx-418" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-bad-request" + local xxx="nginx-bad-request" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-badbots" + local xxx="nginx-badbots" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-botsearch" + local xxx="nginx-botsearch" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-deny" + local xxx="nginx-deny" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-http-auth" + local xxx="nginx-http-auth" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-unauthorized" + local xxx="nginx-unauthorized" f2b_status_xxx echo "------------------------" - local xxx="docker-php-url-fopen" + local xxx="php-url-fopen" f2b_status_xxx echo "------------------------" ;; 7) - docker exec -it fail2ban fail2ban-client status + fail2ban-client status ;; 8) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "Fail2Ban defense program has been uninstalled" + break ;; 11) install nano - nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf + nano /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) - docker exec -it fail2ban fail2ban-client unban --all + fail2ban-client unban --all ;; 21) @@ -2099,14 +2097,14 @@ web_security() { 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/ + cd /etc/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 + cd /etc/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 + sed -i "s/kejilion@outlook.com/$cfuser/g" /etc/fail2ban/action.d/cloudflare-docker.conf + sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "Cloudflare mode is configured to view intercept records in the cf background, site-security-events" @@ -2171,7 +2169,6 @@ web_security() { break ;; esac - fi break_end done } @@ -3017,52 +3014,30 @@ tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" f2b_status() { - docker exec -it fail2ban fail2ban-client reload + fail2ban-client reload sleep 3 - docker exec -it fail2ban fail2ban-client status + fail2ban-client status } f2b_status_xxx() { - docker exec -it fail2ban fail2ban-client status $xxx + 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=always \ - 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 +check_f2b_status() { + if command -v fail2ban-client >/dev/null 2>&1; then + check_f2b_status="${gl_lv}已安装${gl_bai}" 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 + check_f2b_status="${gl_hui}未安装${gl_bai}" fi +} + +f2b_install_sshd() { + + docker rm -f fail2ban >/dev/null 2>&1 + install fail2ban + start fail2ban + enable fail2ban - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf } f2b_sshd() { @@ -7765,7 +7740,8 @@ linux_Oracle() { 4) clear - echo "This feature is in the development stage, so stay tuned!" + send_stats "Detective R start script" + bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear @@ -8384,7 +8360,7 @@ linux_ldnmp() { docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server @@ -8405,7 +8381,7 @@ linux_ldnmp() { 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 + 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 @@ -8890,7 +8866,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" echo -e "${gl_kjlan}95. ${color95}paperless document management platform${gl_kjlan}96. ${color96}2FAuth self-hosted two-step validator" echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine" + echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing point-to-point file synchronization tool" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" @@ -9499,7 +9475,7 @@ while true; do docker_rum() { - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server + docker run -d --name looking-glass --restart=always -p ${docker_port}:80 wikihostinc/looking-glass-server } @@ -9527,7 +9503,7 @@ while true; do -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ - --restart always \ + --restart=always \ adguard/adguardhome @@ -9654,7 +9630,7 @@ while true; do -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ - --restart always \ + --restart=always \ portainer/portainer } @@ -9678,7 +9654,7 @@ while true; do 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 + 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 } @@ -9727,7 +9703,7 @@ while true; do 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always ghcr.io/usememos/memos:latest } @@ -9849,7 +9825,7 @@ while true; do docker_rum() { - docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest + docker run -d -p ${docker_port}:8080 --name speedtest --restart=always ghcr.io/librespeed/speedtest } @@ -9897,7 +9873,7 @@ while true; do docker run -d \ --name photoprism \ - --restart always \ + --restart=always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ @@ -10002,7 +9978,7 @@ while true; do docker run -d \ --name pingvin-share \ - --restart always \ + --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share @@ -10128,7 +10104,7 @@ while true; do 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 + docker run -d -p ${docker_port}:5032 --restart=always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" @@ -10246,7 +10222,7 @@ while true; do --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ - --restart always \ + --restart=always \ registry:2 } @@ -10267,7 +10243,7 @@ while true; do docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart=always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10383,7 +10359,7 @@ while true; do docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ + docker run -d --restart=always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest @@ -10438,7 +10414,7 @@ while true; do 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 + 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 } @@ -10490,7 +10466,7 @@ while true; do 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 + 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 } @@ -10706,7 +10682,7 @@ while true; do 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 + 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 } @@ -10750,7 +10726,7 @@ while true; do chmod -R 777 /home/docker/n8n docker run -d --name n8n \ - --restart always \ + --restart=always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ @@ -10924,7 +10900,7 @@ while true; do docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p ${docker_port}:80 \ -v /home/docker/bitwarden/data:/data \ vaultwarden/server @@ -12008,7 +11984,7 @@ while true; do --cap-add SYS_MODULE \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules:ro \ - --restart always \ + --restart=always \ kjlion/wireguard:alpine sleep 3 @@ -12085,8 +12061,34 @@ while true; do + 100|syncthing) + + local app_id="100" + local docker_name="syncthing" + local docker_img="syncthing/syncthing:latest" + local docker_port=8100 + + docker_rum() { + docker run -d \ + --name=syncthing \ + --hostname=my-syncthing \ + --restart=always \ + -p ${docker_port}:8384 \ + -p 22000:22000/tcp \ + -p 22000:22000/udp \ + -p 21027:21027/udp \ + -v /home/docker/syncthing:/var/syncthing \ + syncthing/syncthing:latest + } + local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; b) clear @@ -13029,7 +13031,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "Choose when to perform tasks every day? (Hours, 0-23):" hour + read -e -p "Choose what time to perform tasks every day? (Hours, 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13084,7 +13086,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords for parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -13099,17 +13101,9 @@ EOF root_use send_stats "ssh defense" while true; do - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else - clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "SSH Defense Program$check_docker" + + check_f2b_status + echo -e "SSH Defense Program$check_f2b_status" echo "fail2ban is an SSH tool to prevent brute force" echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13125,7 +13119,6 @@ EOF read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - install_docker f2b_install_sshd cd ~ @@ -13139,19 +13132,19 @@ EOF break_end ;; 3) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log break ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban echo "Fail2Ban defense program has been uninstalled" + break ;; *) break ;; esac - fi done ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 0a84f0c12..11e2710d0 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.5" +sh_v="4.1.6" gl_hui='\e[37m' @@ -1771,7 +1771,7 @@ check_waf_status() { check_cf_mode() { - if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then + if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" @@ -1985,19 +1985,11 @@ nginx_gzip() { web_security() { send_stats "LDNMP環境防御" while true; do + check_f2b_status check_waf_status check_cf_mode - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "サーバーWebサイト防衛プログラム${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "サーバーWebサイト防衛プログラム${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1.防衛プログラムをインストールします" echo "------------------------" @@ -2019,11 +2011,16 @@ web_security() { case $sub_choice in 1) f2b_install_sshd - cd /path/to/fail2ban/config/fail2ban/filter.d + cd /etc/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/ + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}https://raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + + cd /etc/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 + sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) @@ -2037,56 +2034,57 @@ web_security() { local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-418" + local xxx="nginx-418" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-bad-request" + local xxx="nginx-bad-request" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-badbots" + local xxx="nginx-badbots" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-botsearch" + local xxx="nginx-botsearch" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-deny" + local xxx="nginx-deny" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-http-auth" + local xxx="nginx-http-auth" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-unauthorized" + local xxx="nginx-unauthorized" f2b_status_xxx echo "------------------------" - local xxx="docker-php-url-fopen" + local xxx="php-url-fopen" f2b_status_xxx echo "------------------------" ;; 7) - docker exec -it fail2ban fail2ban-client status + fail2ban-client status ;; 8) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "Fail2Ban防衛プログラムがアンインストールされています" + break ;; 11) install nano - nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf + nano /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) - docker exec -it fail2ban fail2ban-client unban --all + fail2ban-client unban --all ;; 21) @@ -2099,14 +2097,14 @@ web_security() { 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/ + cd /etc/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 + cd /etc/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 + sed -i "s/kejilion@outlook.com/$cfuser/g" /etc/fail2ban/action.d/cloudflare-docker.conf + sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" @@ -2171,7 +2169,6 @@ web_security() { break ;; esac - fi break_end done } @@ -3017,52 +3014,30 @@ tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" f2b_status() { - docker exec -it fail2ban fail2ban-client reload + fail2ban-client reload sleep 3 - docker exec -it fail2ban fail2ban-client status + fail2ban-client status } f2b_status_xxx() { - docker exec -it fail2ban fail2ban-client status $xxx + 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=always \ - 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 +check_f2b_status() { + if command -v fail2ban-client >/dev/null 2>&1; then + check_f2b_status="${gl_lv}已安装${gl_bai}" 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 + check_f2b_status="${gl_hui}未安装${gl_bai}" fi +} + +f2b_install_sshd() { + + docker rm -f fail2ban >/dev/null 2>&1 + install fail2ban + start fail2ban + enable fail2ban - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf } f2b_sshd() { @@ -7765,7 +7740,8 @@ linux_Oracle() { 4) clear - echo "この機能は開発段階にあるので、お楽しみに!" + send_stats "探偵r開始スクリプト" + bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear @@ -8384,7 +8360,7 @@ linux_ldnmp() { docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server @@ -8405,7 +8381,7 @@ linux_ldnmp() { 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 + 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 @@ -8890,7 +8866,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}DUFS Minimalist Static File Server${gl_kjlan}94. ${color94}ゴープ高速ダウンロードツール" echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム${gl_kjlan}96. ${color96}2Fauth自己ホストの2段階検証装置" echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン" + echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン${gl_kjlan}100. ${color100}同期ポイントツーポイントファイル同期ツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" echo -e "${gl_kjlan}------------------------" @@ -9499,7 +9475,7 @@ while true; do docker_rum() { - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server + docker run -d --name looking-glass --restart=always -p ${docker_port}:80 wikihostinc/looking-glass-server } @@ -9527,7 +9503,7 @@ while true; do -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ - --restart always \ + --restart=always \ adguard/adguardhome @@ -9654,7 +9630,7 @@ while true; do -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ - --restart always \ + --restart=always \ portainer/portainer } @@ -9678,7 +9654,7 @@ while true; do 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 + 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 } @@ -9727,7 +9703,7 @@ while true; do 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always ghcr.io/usememos/memos:latest } @@ -9849,7 +9825,7 @@ while true; do docker_rum() { - docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest + docker run -d -p ${docker_port}:8080 --name speedtest --restart=always ghcr.io/librespeed/speedtest } @@ -9897,7 +9873,7 @@ while true; do docker run -d \ --name photoprism \ - --restart always \ + --restart=always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ @@ -10002,7 +9978,7 @@ while true; do docker run -d \ --name pingvin-share \ - --restart always \ + --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share @@ -10128,7 +10104,7 @@ while true; do 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 + docker run -d -p ${docker_port}:5032 --restart=always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" @@ -10246,7 +10222,7 @@ while true; do --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ - --restart always \ + --restart=always \ registry:2 } @@ -10267,7 +10243,7 @@ while true; do docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart=always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10383,7 +10359,7 @@ while true; do docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ + docker run -d --restart=always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest @@ -10438,7 +10414,7 @@ while true; do 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 + 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 } @@ -10490,7 +10466,7 @@ while true; do 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 + 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 } @@ -10706,7 +10682,7 @@ while true; do 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 + 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 } @@ -10750,7 +10726,7 @@ while true; do chmod -R 777 /home/docker/n8n docker run -d --name n8n \ - --restart always \ + --restart=always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ @@ -10924,7 +10900,7 @@ while true; do docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p ${docker_port}:80 \ -v /home/docker/bitwarden/data:/data \ vaultwarden/server @@ -12008,7 +11984,7 @@ while true; do --cap-add SYS_MODULE \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules:ro \ - --restart always \ + --restart=always \ kjlion/wireguard:alpine sleep 3 @@ -12085,8 +12061,34 @@ while true; do + 100|syncthing) + + local app_id="100" + local docker_name="syncthing" + local docker_img="syncthing/syncthing:latest" + local docker_port=8100 + + docker_rum() { + docker run -d \ + --name=syncthing \ + --hostname=my-syncthing \ + --restart=always \ + -p ${docker_port}:8384 \ + -p 22000:22000/tcp \ + -p 22000:22000/udp \ + -p 21027:21027/udp \ + -v /home/docker/syncthing:/var/syncthing \ + syncthing/syncthing:latest + } + local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; b) clear @@ -12924,7 +12926,7 @@ EOF local current_hostname=$(uname -n) echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "新しいホスト名を入力してください(出口に0を入力してください):" new_hostname + read -e -p "新しいホスト名を入力してください(0を入力して終了してください):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine @@ -13029,7 +13031,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "毎日タスクを実行する時期を選択しますか? (時間、0-23):" hour + read -e -p "毎日タスクを実行する時間を選択しますか? (時間、0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13084,7 +13086,7 @@ EOF ;; 2) - read -e -p "削除する必要があるコンテンツを解析するために、キーワードを入力してください。" delhost + read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost sed -i "/$delhost/d" /etc/hosts send_stats "ローカルホストの解析と削除" ;; @@ -13099,17 +13101,9 @@ EOF root_use send_stats "SSH防御" while true; do - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else - clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "SSH防衛プログラム$check_docker" + + check_f2b_status + echo -e "SSH防衛プログラム$check_f2b_status" echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13125,7 +13119,6 @@ EOF read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - install_docker f2b_install_sshd cd ~ @@ -13139,19 +13132,19 @@ EOF break_end ;; 3) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log break ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban echo "Fail2Ban防衛プログラムがアンインストールされています" + break ;; *) break ;; esac - fi done ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 7a7f37a8a..7aaf3e288 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.5" +sh_v="4.1.6" gl_hui='\e[37m' @@ -1771,7 +1771,7 @@ check_waf_status() { check_cf_mode() { - if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then + if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" @@ -1985,19 +1985,11 @@ nginx_gzip() { web_security() { send_stats "LDNMP 환경 방어" while true; do + check_f2b_status check_waf_status check_cf_mode - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "서버 웹 사이트 방어 프로그램${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "서버 웹 사이트 방어 프로그램${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" @@ -2019,11 +2011,16 @@ web_security() { case $sub_choice in 1) f2b_install_sshd - cd /path/to/fail2ban/config/fail2ban/filter.d + cd /etc/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/ + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}https://raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + + cd /etc/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 + sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) @@ -2037,56 +2034,57 @@ web_security() { local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-418" + local xxx="nginx-418" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-bad-request" + local xxx="nginx-bad-request" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-badbots" + local xxx="nginx-badbots" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-botsearch" + local xxx="nginx-botsearch" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-deny" + local xxx="nginx-deny" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-http-auth" + local xxx="nginx-http-auth" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-unauthorized" + local xxx="nginx-unauthorized" f2b_status_xxx echo "------------------------" - local xxx="docker-php-url-fopen" + local xxx="php-url-fopen" f2b_status_xxx echo "------------------------" ;; 7) - docker exec -it fail2ban fail2ban-client status + fail2ban-client status ;; 8) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "Fail2ban 방어 프로그램은 제거되었습니다" + break ;; 11) install nano - nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf + nano /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) - docker exec -it fail2ban fail2ban-client unban --all + fail2ban-client unban --all ;; 21) @@ -2099,14 +2097,14 @@ web_security() { 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/ + cd /etc/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 + cd /etc/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 + sed -i "s/kejilion@outlook.com/$cfuser/g" /etc/fail2ban/action.d/cloudflare-docker.conf + sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "CloudFlare 모드는 CF 배경, Site-Security-Events에서 인터셉트 레코드를 보도록 구성됩니다." @@ -2171,7 +2169,6 @@ web_security() { break ;; esac - fi break_end done } @@ -3017,52 +3014,30 @@ tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" f2b_status() { - docker exec -it fail2ban fail2ban-client reload + fail2ban-client reload sleep 3 - docker exec -it fail2ban fail2ban-client status + fail2ban-client status } f2b_status_xxx() { - docker exec -it fail2ban fail2ban-client status $xxx + 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=always \ - 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 +check_f2b_status() { + if command -v fail2ban-client >/dev/null 2>&1; then + check_f2b_status="${gl_lv}已安装${gl_bai}" 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 + check_f2b_status="${gl_hui}未安装${gl_bai}" fi +} + +f2b_install_sshd() { + + docker rm -f fail2ban >/dev/null 2>&1 + install fail2ban + start fail2ban + enable fail2ban - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf } f2b_sshd() { @@ -7765,7 +7740,8 @@ linux_Oracle() { 4) clear - echo "이 기능은 개발 단계에 있으므로 계속 지켜봐 주시기 바랍니다!" + send_stats "형사 R 스크립트 시작" + bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear @@ -8384,7 +8360,7 @@ linux_ldnmp() { docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server @@ -8405,7 +8381,7 @@ linux_ldnmp() { 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 + 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 @@ -8890,7 +8866,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}DUFS 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAUTH 자체 호스팅 2 단계 유효성 검사기" echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine" + echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}동기화 지점 간 파일 동기화 도구" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" echo -e "${gl_kjlan}------------------------" @@ -9499,7 +9475,7 @@ while true; do docker_rum() { - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server + docker run -d --name looking-glass --restart=always -p ${docker_port}:80 wikihostinc/looking-glass-server } @@ -9527,7 +9503,7 @@ while true; do -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ - --restart always \ + --restart=always \ adguard/adguardhome @@ -9654,7 +9630,7 @@ while true; do -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ - --restart always \ + --restart=always \ portainer/portainer } @@ -9678,7 +9654,7 @@ while true; do 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 + 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 } @@ -9727,7 +9703,7 @@ while true; do 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always ghcr.io/usememos/memos:latest } @@ -9849,7 +9825,7 @@ while true; do docker_rum() { - docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest + docker run -d -p ${docker_port}:8080 --name speedtest --restart=always ghcr.io/librespeed/speedtest } @@ -9897,7 +9873,7 @@ while true; do docker run -d \ --name photoprism \ - --restart always \ + --restart=always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ @@ -10002,7 +9978,7 @@ while true; do docker run -d \ --name pingvin-share \ - --restart always \ + --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share @@ -10128,7 +10104,7 @@ while true; do 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 + docker run -d -p ${docker_port}:5032 --restart=always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" @@ -10246,7 +10222,7 @@ while true; do --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ - --restart always \ + --restart=always \ registry:2 } @@ -10267,7 +10243,7 @@ while true; do docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart=always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10383,7 +10359,7 @@ while true; do docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ + docker run -d --restart=always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest @@ -10438,7 +10414,7 @@ while true; do 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 + 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 } @@ -10490,7 +10466,7 @@ while true; do 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 + 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 } @@ -10706,7 +10682,7 @@ while true; do 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 + 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 } @@ -10750,7 +10726,7 @@ while true; do chmod -R 777 /home/docker/n8n docker run -d --name n8n \ - --restart always \ + --restart=always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ @@ -10924,7 +10900,7 @@ while true; do docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p ${docker_port}:80 \ -v /home/docker/bitwarden/data:/data \ vaultwarden/server @@ -12008,7 +11984,7 @@ while true; do --cap-add SYS_MODULE \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules:ro \ - --restart always \ + --restart=always \ kjlion/wireguard:alpine sleep 3 @@ -12085,8 +12061,34 @@ while true; do + 100|syncthing) + + local app_id="100" + local docker_name="syncthing" + local docker_img="syncthing/syncthing:latest" + local docker_port=8100 + + docker_rum() { + docker run -d \ + --name=syncthing \ + --hostname=my-syncthing \ + --restart=always \ + -p ${docker_port}:8384 \ + -p 22000:22000/tcp \ + -p 22000:22000/udp \ + -p 21027:21027/udp \ + -v /home/docker/syncthing:/var/syncthing \ + syncthing/syncthing:latest + } + local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; b) clear @@ -13029,7 +13031,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "매일 작업을 수행 할시기를 선택 하시겠습니까? (시간, 0-23) :" hour + read -e -p "매일 작업을 수행 할 시간을 선택하십시오. (시간, 0-23) :" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13084,7 +13086,7 @@ EOF ;; 2) - read -e -p "삭제 해야하는 콘텐츠를 구문 분석하기위한 키워드를 입력하십시오." delhost + read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost sed -i "/$delhost/d" /etc/hosts send_stats "로컬 호스트 구문 분석 및 삭제" ;; @@ -13099,17 +13101,9 @@ EOF root_use send_stats "SSH 방어" while true; do - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else - clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "SSH 방어 프로그램$check_docker" + + check_f2b_status + echo -e "SSH 방어 프로그램$check_f2b_status" echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13125,7 +13119,6 @@ EOF read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - install_docker f2b_install_sshd cd ~ @@ -13139,19 +13132,19 @@ EOF break_end ;; 3) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log break ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban echo "Fail2ban 방어 프로그램은 제거되었습니다" + break ;; *) break ;; esac - fi done ;; @@ -13743,7 +13736,7 @@ linux_file() { # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사하십시오" + send_stats "파일 또는 디렉토리를 복사합니다" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index b64b35045..0f24849db 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.5" +sh_v="4.1.6" gl_hui='\e[37m' @@ -1771,7 +1771,7 @@ check_waf_status() { check_cf_mode() { - if [ -f "/path/to/fail2ban/config/fail2ban/action.d/cloudflare-docker.conf" ]; then + if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then CFmessage=" cf模式已开启" else CFmessage="" @@ -1985,19 +1985,11 @@ nginx_gzip() { web_security() { send_stats "LDNMP環境防禦" while true; do + check_f2b_status check_waf_status check_cf_mode - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "服務器網站防禦程序${check_docker}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "服務器網站防禦程序${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. 安裝防禦程序" echo "------------------------" @@ -2019,11 +2011,16 @@ web_security() { case $sub_choice in 1) f2b_install_sshd - cd /path/to/fail2ban/config/fail2ban/filter.d + cd /etc/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/ + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-418.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-deny.conf + wget ${gh_proxy}raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-unauthorized.conf + wget ${gh_proxy}https://raw.githubusercontent.com/linuxserver/fail2ban-confs/master/filter.d/nginx-bad-request.conf + + cd /etc/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 + sed -i "/cloudflare/d" /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status ;; 5) @@ -2037,56 +2034,57 @@ web_security() { local xxx="fail2ban-nginx-cc" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-418" + local xxx="nginx-418" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-bad-request" + local xxx="nginx-bad-request" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-badbots" + local xxx="nginx-badbots" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-botsearch" + local xxx="nginx-botsearch" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-deny" + local xxx="nginx-deny" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-http-auth" + local xxx="nginx-http-auth" f2b_status_xxx echo "------------------------" - local xxx="docker-nginx-unauthorized" + local xxx="nginx-unauthorized" f2b_status_xxx echo "------------------------" - local xxx="docker-php-url-fopen" + local xxx="php-url-fopen" f2b_status_xxx echo "------------------------" ;; 7) - docker exec -it fail2ban fail2ban-client status + fail2ban-client status ;; 8) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null echo "Fail2Ban防禦程序已卸載" + break ;; 11) install nano - nano /path/to/fail2ban/config/fail2ban/jail.d/nginx-docker-cc.conf + nano /etc/fail2ban/jail.d/nginx-docker-cc.conf f2b_status break ;; 12) - docker exec -it fail2ban fail2ban-client unban --all + fail2ban-client unban --all ;; 21) @@ -2099,14 +2097,14 @@ web_security() { 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/ + cd /etc/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 + cd /etc/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 + sed -i "s/kejilion@outlook.com/$cfuser/g" /etc/fail2ban/action.d/cloudflare-docker.conf + sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status echo "已配置cloudflare模式,可在cf後台,站點-安全性-事件中查看攔截記錄" @@ -2171,7 +2169,6 @@ web_security() { break ;; esac - fi break_end done } @@ -3017,52 +3014,30 @@ tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" f2b_status() { - docker exec -it fail2ban fail2ban-client reload + fail2ban-client reload sleep 3 - docker exec -it fail2ban fail2ban-client status + fail2ban-client status } f2b_status_xxx() { - docker exec -it fail2ban fail2ban-client status $xxx + 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=always \ - 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 +check_f2b_status() { + if command -v fail2ban-client >/dev/null 2>&1; then + check_f2b_status="${gl_lv}已安装${gl_bai}" 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 + check_f2b_status="${gl_hui}未安装${gl_bai}" fi +} + +f2b_install_sshd() { + + docker rm -f fail2ban >/dev/null 2>&1 + install fail2ban + start fail2ban + enable fail2ban - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf } f2b_sshd() { @@ -7765,7 +7740,8 @@ linux_Oracle() { 4) clear - echo "該功能處於開發階段,敬請期待!" + send_stats "R探長開機腳本" + bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) clear @@ -8384,7 +8360,7 @@ linux_ldnmp() { docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server @@ -8405,7 +8381,7 @@ linux_ldnmp() { 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 + 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 @@ -8890,7 +8866,7 @@ while true; do echo -e "${gl_kjlan}93. ${color93}Dufs極簡靜態文件服務器${gl_kjlan}94. ${color94}Gopeed高速下載工具" echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台${gl_kjlan}96. ${color96}2FAuth自託管二步驗證器" echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" - echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機" + echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機${gl_kjlan}100. ${color100}Syncthing點對點文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -9499,7 +9475,7 @@ while true; do docker_rum() { - docker run -d --name looking-glass --restart always -p ${docker_port}:80 wikihostinc/looking-glass-server + docker run -d --name looking-glass --restart=always -p ${docker_port}:80 wikihostinc/looking-glass-server } @@ -9527,7 +9503,7 @@ while true; do -p 53:53/tcp \ -p 53:53/udp \ -p ${docker_port}:3000/tcp \ - --restart always \ + --restart=always \ adguard/adguardhome @@ -9654,7 +9630,7 @@ while true; do -p ${docker_port}:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer:/data \ - --restart always \ + --restart=always \ portainer/portainer } @@ -9678,7 +9654,7 @@ while true; do 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 + 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 } @@ -9727,7 +9703,7 @@ while true; do 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always ghcr.io/usememos/memos:latest } @@ -9849,7 +9825,7 @@ while true; do docker_rum() { - docker run -d -p ${docker_port}:8080 --name speedtest --restart always ghcr.io/librespeed/speedtest + docker run -d -p ${docker_port}:8080 --name speedtest --restart=always ghcr.io/librespeed/speedtest } @@ -9897,7 +9873,7 @@ while true; do docker run -d \ --name photoprism \ - --restart always \ + --restart=always \ --security-opt seccomp=unconfined \ --security-opt apparmor=unconfined \ -p ${docker_port}:2342 \ @@ -10002,7 +9978,7 @@ while true; do docker run -d \ --name pingvin-share \ - --restart always \ + --restart=always \ -p ${docker_port}:3000 \ -v /home/docker/pingvin-share/data:/opt/app/backend/data \ stonith404/pingvin-share @@ -10128,7 +10104,7 @@ while true; do 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 + docker run -d -p ${docker_port}:5032 --restart=always --name webssh -e TZ=Asia/Shanghai jrohy/webssh } local docker_describe="简易在线ssh连接工具和sftp工具" @@ -10246,7 +10222,7 @@ while true; do --name registry \ -v /home/docker/registry:/var/lib/registry \ -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ - --restart always \ + --restart=always \ registry:2 } @@ -10267,7 +10243,7 @@ while true; do docker_rum() { - docker run -d --name ghproxy --restart always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest + docker run -d --name ghproxy --restart=always -p ${docker_port}:8080 -v /home/docker/ghproxy/config:/data/ghproxy/config wjqserver/ghproxy:latest } @@ -10383,7 +10359,7 @@ while true; do docker_rum() { - docker run -d --restart always -p ${docker_port}:5000 \ + docker run -d --restart=always -p ${docker_port}:5000 \ -v /home/docker/datastore:/datastore \ --name changedetection dgtlmoon/changedetection.io:latest @@ -10438,7 +10414,7 @@ while true; do 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 + 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 } @@ -10490,7 +10466,7 @@ while true; do 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 + 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 } @@ -10706,7 +10682,7 @@ while true; do 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 + 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 } @@ -10750,7 +10726,7 @@ while true; do chmod -R 777 /home/docker/n8n docker run -d --name n8n \ - --restart always \ + --restart=always \ -p ${docker_port}:5678 \ -v /home/docker/n8n:/home/node/.n8n \ -e N8N_HOST=${yuming} \ @@ -10924,7 +10900,7 @@ while true; do docker run -d \ --name bitwarden \ - --restart always \ + --restart=always \ -p ${docker_port}:80 \ -v /home/docker/bitwarden/data:/data \ vaultwarden/server @@ -12008,7 +11984,7 @@ while true; do --cap-add SYS_MODULE \ -v /home/docker/wireguard/config:/config \ -v /lib/modules:/lib/modules:ro \ - --restart always \ + --restart=always \ kjlion/wireguard:alpine sleep 3 @@ -12085,8 +12061,34 @@ while true; do + 100|syncthing) + + local app_id="100" + local docker_name="syncthing" + local docker_img="syncthing/syncthing:latest" + local docker_port=8100 + + docker_rum() { + docker run -d \ + --name=syncthing \ + --hostname=my-syncthing \ + --restart=always \ + -p ${docker_port}:8384 \ + -p 22000:22000/tcp \ + -p 22000:22000/udp \ + -p 21027:21027/udp \ + -v /home/docker/syncthing:/var/syncthing \ + syncthing/syncthing:latest + } + local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; b) clear @@ -13099,17 +13101,9 @@ EOF root_use send_stats "ssh防禦" while true; do - if [ -x "$(command -v fail2ban-client)" ] ; then - clear - remove fail2ban - rm -rf /etc/fail2ban - else - clear - rm -f /path/to/fail2ban/config/fail2ban/jail.d/sshd.conf > /dev/null 2>&1 - docker exec -it fail2ban fail2ban-client reload > /dev/null 2>&1 - docker_name="fail2ban" - check_docker_app - echo -e "SSH防禦程序$check_docker" + + check_f2b_status + echo -e "SSH防禦程序$check_f2b_status" echo "fail2ban是一個SSH防止暴力破解工具" echo "官網介紹:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13125,7 +13119,6 @@ EOF read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in 1) - install_docker f2b_install_sshd cd ~ @@ -13139,19 +13132,19 @@ EOF break_end ;; 3) - tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log + tail -f /var/log/fail2ban.log break ;; 9) - docker rm -f fail2ban - rm -rf /path/to/fail2ban + remove fail2ban + rm -rf /etc/fail2ban echo "Fail2Ban防禦程序已卸載" + break ;; *) break ;; esac - fi done ;; @@ -14222,7 +14215,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夾 k fav | k 命令收藏夾" echo "應用市場管理 k app" echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" -echo "顯示系統信息 k info" +echo "顯示系統信息 k info" } From dba36b8f1e7036c806e3d4ff2dda556faf9ebdb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 17:50:03 +0800 Subject: [PATCH 236/553] Update kejilion.sh --- cn/kejilion.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 18c85a20a..79d57ea43 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3038,6 +3038,11 @@ f2b_install_sshd() { start fail2ban enable fail2ban + if grep -q 'dnf' /etc/issue; then + cd /etc/fail2ban/jail.d/ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf + fi + } f2b_sshd() { From 5a189e54f2f948c93618644d414e1c810f67ff10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 17:50:33 +0800 Subject: [PATCH 237/553] Download fail2ban config for DNF systems Add support for downloading fail2ban config on DNF-based systems. --- kejilion.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 37b294ae3..896fa5c24 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3038,6 +3038,11 @@ f2b_install_sshd() { start fail2ban enable fail2ban + if grep -q 'dnf' /etc/issue; then + cd /etc/fail2ban/jail.d/ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf + fi + } f2b_sshd() { From 5dc799c636608d04eacf4ea35109431c7977c160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 18:19:15 +0800 Subject: [PATCH 238/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 79d57ea43..79a62619a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3038,7 +3038,7 @@ f2b_install_sshd() { start fail2ban enable fail2ban - if grep -q 'dnf' /etc/issue; then + if command -v dnf &>/dev/null; then cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi From f0e428842d0fed6b33996cd2806ce6e73d1f0611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Sep 2025 18:20:02 +0800 Subject: [PATCH 239/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 896fa5c24..6701921b6 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3038,7 +3038,7 @@ f2b_install_sshd() { start fail2ban enable fail2ban - if grep -q 'dnf' /etc/issue; then + if command -v dnf &>/dev/null; then cd /etc/fail2ban/jail.d/ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi From d3e26cd1eb7e9665b268a42ae78d356dfaa42ca6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 28 Sep 2025 10:53:38 +0000 Subject: [PATCH 240/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-09-28=2010:53:38?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 11 ++++++++--- jp/kejilion.sh | 11 ++++++++--- kr/kejilion.sh | 9 +++++++-- tw/kejilion.sh | 5 +++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index e24ed301e..322c45f41 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1733,7 +1733,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to the mode parameter + # Decide to turn on or off WAF according to mode parameters if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -3038,6 +3038,11 @@ f2b_install_sshd() { start fail2ban enable fail2ban + if command -v dnf &>/dev/null; then + cd /etc/fail2ban/jail.d/ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf + fi + } f2b_sshd() { @@ -5946,7 +5951,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can be connected to other Linux systems via SSH" + echo "Can connect to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -8017,7 +8022,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Background login path: /admin" + echo "Backend login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 11e2710d0..c93e5aea8 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1733,7 +1733,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることにしました + # モードパラメーターに従って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 @@ -3038,6 +3038,11 @@ f2b_install_sshd() { start fail2ban enable fail2ban + if command -v dnf &>/dev/null; then + cd /etc/fail2ban/jail.d/ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf + fi + } f2b_sshd() { @@ -8017,7 +8022,7 @@ linux_ldnmp() { echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックグラウンドログインパス: /admin" + echo "バックエンドログインパス: /admin" echo "------------------------" echo "ユーザー名:admin" echo "パスワード:管理者" @@ -12926,7 +12931,7 @@ EOF local current_hostname=$(uname -n) echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "新しいホスト名を入力してください(0を入力して終了してください):" new_hostname + read -e -p "新しいホスト名を入力してください(出口に0を入力してください):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 7aaf3e288..b7d69c906 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -3038,6 +3038,11 @@ f2b_install_sshd() { start fail2ban enable fail2ban + if command -v dnf &>/dev/null; then + cd /etc/fail2ban/jail.d/ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf + fi + } f2b_sshd() { @@ -8017,7 +8022,7 @@ linux_ldnmp() { echo "Redis Port : 6379" echo "" echo "웹 사이트 URL : https : //$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "백엔드 로그인 경로 : /admin" echo "------------------------" echo "사용자 이름 : 관리자" echo "비밀번호 : 관리자" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 0f24849db..05b2db1f1 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -3038,6 +3038,11 @@ f2b_install_sshd() { start fail2ban enable fail2ban + if command -v dnf &>/dev/null; then + cd /etc/fail2ban/jail.d/ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf + fi + } f2b_sshd() { From 7efb2cfe29b8cc7080326eca4bd2f44736d08900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:05:17 +0800 Subject: [PATCH 241/553] Update kejilion.sh --- cn/kejilion.sh | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 79a62619a..148e46055 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.6" +sh_v="4.1.7" gl_hui='\e[37m' @@ -8873,6 +8873,8 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -12095,6 +12097,50 @@ while true; do ;; + + 101|moneyprinterturbo) + local app_id="101" + local app_name="AI视频生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" + local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local docker_name="moneyprinterturbo" + local docker_port="8101" + local app_size="3" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/MoneyPrinterTurbo/docker/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + rm -rf /home/docker/MoneyPrinterTurbo + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + + b) clear send_stats "全部应用备份" From f1e594cd504fe243a96dfb922ec39f22f6560308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:05:57 +0800 Subject: [PATCH 242/553] Add MoneyPrinterTurbo app management to kejilion.sh Added AI video generation tool 'MoneyPrinterTurbo' installation and management functions. --- kejilion.sh | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 6701921b6..3fa89fa06 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.6" +sh_v="4.1.7" gl_hui='\e[37m' @@ -8873,6 +8873,8 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -12095,6 +12097,50 @@ while true; do ;; + + 101|moneyprinterturbo) + local app_id="101" + local app_name="AI视频生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" + local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local docker_name="moneyprinterturbo" + local docker_port="8101" + local app_size="3" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/MoneyPrinterTurbo/docker/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + rm -rf /home/docker/MoneyPrinterTurbo + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + + b) clear send_stats "全部应用备份" From d301b258a59d8d1f4463f87d8285c1ffc2dc1fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:08:29 +0800 Subject: [PATCH 243/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 79b60d8d2..4d4cd9af9 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1314,4 +1314,7 @@ k快捷命令增加了 k info 系统信息快速查询。 甲骨文云合集中增加大佬的R探长开机脚本,非常感谢大佬脚本。 又来修复SSH防御fail2ban加载ssh规则报错的问题。 ------------------------ +2025-09-30 v4.1.7 +应用市场新增了MoneyPrinterTurbo视频生成器的安装及使用。 +------------------------ From c85d75247fe079b9b761d2cd01cc17c3f918e96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:03:35 +0800 Subject: [PATCH 244/553] Update kejilion.sh --- cn/kejilion.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 148e46055..9716db4db 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}AZ/AWS/OCI管理面板" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12119,7 +12119,7 @@ while true; do } docker_app_update() { - cd /home/docker/MoneyPrinterTurbo/docker/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ git pull origin main sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml @@ -12138,6 +12138,59 @@ while true; do + 102|cloud-manager) + local app_id="102" + local app_name="AZ/AWS/OCI管理面板" + local app_text="整合AZ微软云,AWS亚马逊云,OCI甲骨文云一体化管理工具" + local app_url="官方网站: https://github.com/SIJULY/cloud_manager" + local docker_name="caddy" + local docker_port="8102" + local app_size="1" + + docker_app_install() { + + + read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD + local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} + + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/SIJULY/cloud_manager.git && cd cloud_manager/ + sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml + sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml + cp .env.example .env + sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/cloud_manager/ && docker compose down --rmi all + cd /home/docker/cloud_manager/ + git pull origin main + + read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD + local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} + + sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml + sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml + cp .env.example .env + sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env + + cd /home/docker/cloud_manager/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/cloud_manager/ && docker compose down --rmi all + rm -rf /home/docker/cloud_manager + echo "应用已卸载" + } + + docker_app_plus + + ;; From fa213cc75a9c997bbcbb7515dbe67b214b400005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:04:08 +0800 Subject: [PATCH 245/553] Update kejilion.sh --- kejilion.sh | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3fa89fa06..21067e8b8 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}AZ/AWS/OCI管理面板" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12119,7 +12119,7 @@ while true; do } docker_app_update() { - cd /home/docker/MoneyPrinterTurbo/docker/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ git pull origin main sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml @@ -12138,6 +12138,59 @@ while true; do + 102|cloud-manager) + local app_id="102" + local app_name="AZ/AWS/OCI管理面板" + local app_text="整合AZ微软云,AWS亚马逊云,OCI甲骨文云一体化管理工具" + local app_url="官方网站: https://github.com/SIJULY/cloud_manager" + local docker_name="caddy" + local docker_port="8102" + local app_size="1" + + docker_app_install() { + + + read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD + local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} + + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/SIJULY/cloud_manager.git && cd cloud_manager/ + sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml + sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml + cp .env.example .env + sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/cloud_manager/ && docker compose down --rmi all + cd /home/docker/cloud_manager/ + git pull origin main + + read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD + local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} + + sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml + sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml + cp .env.example .env + sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env + + cd /home/docker/cloud_manager/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/cloud_manager/ && docker compose down --rmi all + rm -rf /home/docker/cloud_manager + echo "应用已卸载" + } + + docker_app_plus + + ;; From 35faef138bc9186c749a1f06dfa244fd3437c795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:05:38 +0800 Subject: [PATCH 246/553] Add installation instructions for AZ/AWS/OCI panel --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 4d4cd9af9..941d420d7 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1316,5 +1316,6 @@ k快捷命令增加了 k info 系统信息快速查询。 ------------------------ 2025-09-30 v4.1.7 应用市场新增了MoneyPrinterTurbo视频生成器的安装及使用。 +应用市场新增了AZ/AWS/OCI开机管理面板的安装及使用。 ------------------------ From 56a15891463d2e4479dd0681091c9ca76351bbba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:09:14 +0800 Subject: [PATCH 247/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 21067e8b8..d34b6cc95 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12143,7 +12143,7 @@ while true; do local app_name="AZ/AWS/OCI管理面板" local app_text="整合AZ微软云,AWS亚马逊云,OCI甲骨文云一体化管理工具" local app_url="官方网站: https://github.com/SIJULY/cloud_manager" - local docker_name="caddy" + local docker_name="cloud_manager-caddy-1" local docker_port="8102" local app_size="1" From 1fc84c37e18773b0a5ab5d2a9c727f00a15e1876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:09:49 +0800 Subject: [PATCH 248/553] Rename docker_name for cloud manager setup --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9716db4db..567786e8a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12143,7 +12143,7 @@ while true; do local app_name="AZ/AWS/OCI管理面板" local app_text="整合AZ微软云,AWS亚马逊云,OCI甲骨文云一体化管理工具" local app_url="官方网站: https://github.com/SIJULY/cloud_manager" - local docker_name="caddy" + local docker_name="cloud_manager-caddy-1" local docker_port="8102" local app_size="1" From 89c4745c587f1097b1b24e8d4433c724a0056895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:22:46 +0800 Subject: [PATCH 249/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 567786e8a..981211dfd 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8805,7 +8805,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") # 用循环设置颜色 - for i in {1..100}; do + for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" else @@ -12150,7 +12150,7 @@ while true; do docker_app_install() { - read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD + read -e -p "设置面板登录密码 (默认 123ADMIN123): " LOGIN_PASSWD local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} install git From 8bbf807ab68d47904d1a6b2cbda15bb23f310a57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:23:27 +0800 Subject: [PATCH 250/553] Update kejilion.sh --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index d34b6cc95..1ddb3d02b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8805,7 +8805,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") # 用循环设置颜色 - for i in {1..100}; do + for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" else @@ -12150,7 +12150,7 @@ while true; do docker_app_install() { - read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD + read -e -p "设置面板登录密码 (默认 123ADMIN123): " LOGIN_PASSWD local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} install git From 0b4047ca0e58dba6c573412ecf4d9fe8b285abc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:43:34 +0800 Subject: [PATCH 251/553] Update kejilion.sh --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 981211dfd..2c2de8207 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12159,6 +12159,7 @@ while true; do sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml cp .env.example .env sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env + sed -i "s|your.domain.com|${ipv4_address}|" .env docker compose up -d clear From 991e40980a10015541a44ad8593f2a8d8a06350a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:44:06 +0800 Subject: [PATCH 252/553] Update .env with actual IPv4 address Replace placeholder domain with actual IPv4 address in .env file. --- kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion.sh b/kejilion.sh index 1ddb3d02b..5e35e70d9 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12159,6 +12159,7 @@ while true; do sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml cp .env.example .env sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env + sed -i "s|your.domain.com|${ipv4_address}|" .env docker compose up -d clear From 241b5acc280f2d55d504427f995ee54e63f0db8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 21:02:20 +0800 Subject: [PATCH 253/553] Update kejilion.sh --- kejilion.sh | 55 ++--------------------------------------------------- 1 file changed, 2 insertions(+), 53 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 5e35e70d9..18146005d 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}AZ/AWS/OCI管理面板" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12138,58 +12138,7 @@ while true; do - 102|cloud-manager) - local app_id="102" - local app_name="AZ/AWS/OCI管理面板" - local app_text="整合AZ微软云,AWS亚马逊云,OCI甲骨文云一体化管理工具" - local app_url="官方网站: https://github.com/SIJULY/cloud_manager" - local docker_name="cloud_manager-caddy-1" - local docker_port="8102" - local app_size="1" - - docker_app_install() { - - - read -e -p "设置面板登录密码 (默认 123ADMIN123): " LOGIN_PASSWD - local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} - - install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/SIJULY/cloud_manager.git && cd cloud_manager/ - sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml - sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml - cp .env.example .env - sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env - sed -i "s|your.domain.com|${ipv4_address}|" .env - - docker compose up -d - clear - echo "已经安装完成" - check_docker_app_ip - } - - docker_app_update() { - cd /home/docker/cloud_manager/ && docker compose down --rmi all - cd /home/docker/cloud_manager/ - git pull origin main - - read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD - local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} - - sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml - sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml - cp .env.example .env - sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env - - cd /home/docker/cloud_manager/ && docker compose up -d - } - - docker_app_uninstall() { - cd /home/docker/cloud_manager/ && docker compose down --rmi all - rm -rf /home/docker/cloud_manager - echo "应用已卸载" - } - - docker_app_plus + 102) ;; From 5ca6f7508371c9e7c71ac76de0962efec3e7ca8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 21:04:01 +0800 Subject: [PATCH 254/553] Remove cloud manager app management functions Removed cloud manager application installation, update, and uninstall functions. --- cn/kejilion.sh | 55 ++------------------------------------------------ 1 file changed, 2 insertions(+), 53 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2c2de8207..62e36f213 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}AZ/AWS/OCI管理面板" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12138,58 +12138,7 @@ while true; do - 102|cloud-manager) - local app_id="102" - local app_name="AZ/AWS/OCI管理面板" - local app_text="整合AZ微软云,AWS亚马逊云,OCI甲骨文云一体化管理工具" - local app_url="官方网站: https://github.com/SIJULY/cloud_manager" - local docker_name="cloud_manager-caddy-1" - local docker_port="8102" - local app_size="1" - - docker_app_install() { - - - read -e -p "设置面板登录密码 (默认 123ADMIN123): " LOGIN_PASSWD - local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} - - install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/SIJULY/cloud_manager.git && cd cloud_manager/ - sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml - sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml - cp .env.example .env - sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env - sed -i "s|your.domain.com|${ipv4_address}|" .env - - docker compose up -d - clear - echo "已经安装完成" - check_docker_app_ip - } - - docker_app_update() { - cd /home/docker/cloud_manager/ && docker compose down --rmi all - cd /home/docker/cloud_manager/ - git pull origin main - - read -e -p "设置面板登录密码 (默认 123ADMIN123)" LOGIN_PASSWD - local LOGIN_PASSWD=${LOGIN_PASSWD:-123ADMIN123} - - sed -i "s/80:80/${docker_port}:80/g" /home/docker/cloud_manager/docker-compose.yml - sed -i "/443:443/d" /home/docker/cloud_manager/docker-compose.yml - cp .env.example .env - sed -i "s|PANEL_PASSWORD=YourSecurePassword123|PANEL_PASSWORD=$LOGIN_PASSWD|" .env - - cd /home/docker/cloud_manager/ && docker compose up -d - } - - docker_app_uninstall() { - cd /home/docker/cloud_manager/ && docker compose down --rmi all - rm -rf /home/docker/cloud_manager - echo "应用已卸载" - } - - docker_app_plus + 102) ;; From 1ef08e61a50b05a0c30d9ef95bfd50d08dd40cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 1 Oct 2025 21:05:09 +0800 Subject: [PATCH 255/553] Update kejilion_sh_log.txt by removing a line Removed mention of AZ/AWS/OCI management panel installation from the log. --- kejilion_sh_log.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 941d420d7..4d4cd9af9 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1316,6 +1316,5 @@ k快捷命令增加了 k info 系统信息快速查询。 ------------------------ 2025-09-30 v4.1.7 应用市场新增了MoneyPrinterTurbo视频生成器的安装及使用。 -应用市场新增了AZ/AWS/OCI开机管理面板的安装及使用。 ------------------------ From 4bd93f5786ee1a81bcfd24e8a91335086285d2c0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 5 Oct 2025 04:27:02 +0000 Subject: [PATCH 256/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-05=2004:27:02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++----- jp/kejilion.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++---- kr/kejilion.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++----- tw/kejilion.sh | 53 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 212 insertions(+), 16 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 322c45f41..126e184bd 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.6" +sh_v="4.1.7" gl_hui='\e[37m' @@ -1733,7 +1733,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to mode parameters + # Decide to turn on or off WAF according to the mode parameter if [ "$mode" == "on" ]; then # Turn on WAF: Remove comments 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 @@ -5951,7 +5951,7 @@ ssh_manager() { while true; do clear echo "SSH Remote Connection Tool" - echo "Can connect to other Linux systems via SSH" + echo "Can be connected to other Linux systems via SSH" echo "------------------------" list_connections echo "1. Create a new connection 2. Use a connection 3. Delete a connection" @@ -8022,7 +8022,7 @@ linux_ldnmp() { echo "Redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Backend login path: /admin" + echo "Background login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" @@ -8805,7 +8805,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") # Set the color with loop - for i in {1..100}; do + for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" else @@ -8873,6 +8873,8 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing point-to-point file synchronization tool" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}101. ${color101}AI video generation tool" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -12095,6 +12097,53 @@ while true; do ;; + + 101|moneyprinterturbo) + local app_id="101" + local app_name="AI视频生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" + local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local docker_name="moneyprinterturbo" + local docker_port="8101" + local app_size="3" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + + docker compose up -d + clear + echo "Installed" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + rm -rf /home/docker/MoneyPrinterTurbo + echo "The app has been uninstalled" + } + + docker_app_plus + + ;; + + + + 102) + + ;; + + + b) clear send_stats "All applications backup" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index c93e5aea8..f72c82993 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.6" +sh_v="4.1.7" gl_hui='\e[37m' @@ -1733,7 +1733,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることを決定します + # モードパラメーターに従って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 @@ -8022,7 +8022,7 @@ linux_ldnmp() { echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックエンドログインパス: /admin" + echo "バックグラウンドログインパス: /admin" echo "------------------------" echo "ユーザー名:admin" echo "パスワード:管理者" @@ -8805,7 +8805,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") # ループで色を設定します - for i in {1..100}; do + for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" else @@ -8873,6 +8873,8 @@ while true; do echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン${gl_kjlan}100. ${color100}同期ポイントツーポイントファイル同期ツール" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}101. ${color101}AIビデオ生成ツール" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" @@ -12095,6 +12097,53 @@ while true; do ;; + + 101|moneyprinterturbo) + local app_id="101" + local app_name="AI视频生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" + local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local docker_name="moneyprinterturbo" + local docker_port="8101" + local app_size="3" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + + docker compose up -d + clear + echo "インストール" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + rm -rf /home/docker/MoneyPrinterTurbo + echo "アプリはアンインストールされています" + } + + docker_app_plus + + ;; + + + + 102) + + ;; + + + b) clear send_stats "すべてのアプリケーションバックアップ" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index b7d69c906..a693df95d 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.6" +sh_v="4.1.7" gl_hui='\e[37m' @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! # 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -1657,7 +1657,7 @@ cf_purge_cache() { # Zone_ids를 배열로 변환합니다 ZONE_IDS=($ZONE_IDS) else - # 캐시 청소 여부를 사용자에게 프롬프트하십시오 + # 캐시 청소 여부를 사용자에게 프롬프트합니다 read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer if [[ "$answer" == "y" ]]; then echo "CF 정보가 저장됩니다$CONFIG_FILE, 나중에 CF 정보를 수정할 수 있습니다" @@ -8022,7 +8022,7 @@ linux_ldnmp() { echo "Redis Port : 6379" echo "" echo "웹 사이트 URL : https : //$yuming" - echo "백엔드 로그인 경로 : /admin" + echo "백그라운드 로그인 경로 : /admin" echo "------------------------" echo "사용자 이름 : 관리자" echo "비밀번호 : 관리자" @@ -8805,7 +8805,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") # 루프로 색상을 설정하십시오 - for i in {1..100}; do + for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" else @@ -8873,6 +8873,8 @@ while true; do echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}동기화 지점 간 파일 동기화 도구" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}101. ${color101}AI 비디오 생성 도구" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" @@ -12095,6 +12097,53 @@ while true; do ;; + + 101|moneyprinterturbo) + local app_id="101" + local app_name="AI视频生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" + local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local docker_name="moneyprinterturbo" + local docker_port="8101" + local app_size="3" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + + docker compose up -d + clear + echo "설치" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + rm -rf /home/docker/MoneyPrinterTurbo + echo "앱이 제거되었습니다" + } + + docker_app_plus + + ;; + + + + 102) + + ;; + + + b) clear send_stats "모든 응용 프로그램 백업" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 05b2db1f1..5ee2d1c24 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.6" +sh_v="4.1.7" gl_hui='\e[37m' @@ -8805,7 +8805,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") # 用循環設置顏色 - for i in {1..100}; do + for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" else @@ -8873,6 +8873,8 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機${gl_kjlan}100. ${color100}Syncthing點對點文件同步工具" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" @@ -12095,6 +12097,53 @@ while true; do ;; + + 101|moneyprinterturbo) + local app_id="101" + local app_name="AI视频生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" + local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local docker_name="moneyprinterturbo" + local docker_port="8101" + local app_size="3" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + cd /home/docker/MoneyPrinterTurbo/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml + cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all + rm -rf /home/docker/MoneyPrinterTurbo + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + 102) + + ;; + + + b) clear send_stats "全部應用備份" From ac7da25ef7012b7d8a5c2cfdcdabb0df68fdf994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 6 Oct 2025 10:06:34 +0800 Subject: [PATCH 257/553] Update kejilion.sh --- cn/kejilion.sh | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 62e36f213..0fb6077be 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.7" +sh_v="4.1.8" gl_hui='\e[37m' @@ -7890,7 +7890,7 @@ linux_ldnmp() { 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 + wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20250901.zip unzip latest.zip rm latest.zip @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11531,8 +11531,8 @@ while true; do local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" + local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" local app_size="1" docker_app @@ -12140,6 +12140,28 @@ while true; do 102) + local app_id="102" + local docker_name="vocechat-server" + local docker_img="privoce/vocechat-server:latest" + local docker_port=8102 + + docker_rum() { + + docker run -d --restart=always \ + -p ${docker_port}:3000 \ + --name vocechat-server \ + -v /home/docker/vocechat/data:/home/vocechat-server/data \ + privoce/vocechat-server:latest + + } + + local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" + local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; From c65d48898199075486fa78bf4c28c8469c09c517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 6 Oct 2025 10:06:59 +0800 Subject: [PATCH 258/553] Update version and add VoceChat server setup --- kejilion.sh | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 18146005d..e1b27b425 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.7" +sh_v="4.1.8" gl_hui='\e[37m' @@ -7890,7 +7890,7 @@ linux_ldnmp() { 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 + wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20250901.zip unzip latest.zip rm latest.zip @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11531,8 +11531,8 @@ while true; do local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" + local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" local app_size="1" docker_app @@ -12140,6 +12140,28 @@ while true; do 102) + local app_id="102" + local docker_name="vocechat-server" + local docker_img="privoce/vocechat-server:latest" + local docker_port=8102 + + docker_rum() { + + docker run -d --restart=always \ + -p ${docker_port}:3000 \ + --name vocechat-server \ + -v /home/docker/vocechat/data:/home/vocechat-server/data \ + privoce/vocechat-server:latest + + } + + local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" + local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; From 251be4795528ea92698fdb0703cbec3e9c545ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 6 Oct 2025 10:33:38 +0800 Subject: [PATCH 259/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 4d4cd9af9..a1a777973 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1317,4 +1317,8 @@ k快捷命令增加了 k info 系统信息快速查询。 2025-09-30 v4.1.7 应用市场新增了MoneyPrinterTurbo视频生成器的安装及使用。 ------------------------ +2025-10-06 v4.1.8 +应用市场FileCodeBox文件快递增加管理员入口的提示路径与密码。 +应用市场新增了VoceChat多人聊天系统的安装及使用。 +------------------------ From 45f451190f3d5e68a68a30b4b8d3ae1ae24ca15f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 7 Oct 2025 00:00:43 +0000 Subject: [PATCH 260/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-07=2000:00:43?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 258 +++++++++++++----------- jp/kejilion.sh | 534 +++++++++++++++++++++++++------------------------ kr/kejilion.sh | 460 ++++++++++++++++++++++-------------------- tw/kejilion.sh | 32 ++- 4 files changed, 686 insertions(+), 598 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 126e184bd..d29734073 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.7" +sh_v="4.1.8" gl_hui='\e[37m' @@ -315,7 +315,7 @@ stop() { status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1The service status is displayed." + echo "$1Service status is shown." else echo "Error: Unable to display$1Service status." fi @@ -667,7 +667,7 @@ while true; do send_stats "Update the image" read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames for name in $imagenames; do - echo -e "${gl_huang}Updated image:$name${gl_bai}" + echo -e "${gl_huang}Updating image:$name${gl_bai}" docker pull $name done ;; @@ -950,7 +950,7 @@ allow_ip() { # Delete existing blocking rules iptables -D INPUT -s $ip -j DROP 2>/dev/null - # Add allow rules + # Add allow rule if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT echo "Released IP$ip" @@ -1017,14 +1017,14 @@ disable_ddos_defense() { 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 "Turn off DDoS Defense" + send_stats "Turn off DDoS defense" } -# Functions that manage national IP rules +# Functions to manage national IP rules manage_country_rules() { local action="$1" shift # 去掉第一个参数,剩下的全是国家代码 @@ -1112,7 +1112,7 @@ iptables_panel() { while true; do clear echo "Advanced Firewall Management" - send_stats "Advanced Firewall Management" + send_stats "Advanced firewall management" echo "------------------------" iptables -L INPUT echo "" @@ -1138,12 +1138,12 @@ iptables_panel() { 1) read -e -p "Please enter the open port number:" o_port open_port $o_port - send_stats "Open a specified port" + send_stats "Open specified port" ;; 2) read -e -p "Please enter the closed port number:" c_port close_port $c_port - send_stats "Close the specified port" + send_stats "Close specified port" ;; 3) # Open all ports @@ -1231,7 +1231,7 @@ iptables_panel() { 17) read -e -p "Please enter the cleared country code (multiple country codes can be separated by spaces such as CN US JP):" country_code manage_country_rules unblock $country_code - send_stats "Clear the country$country_codeIP" + send_stats "clear country$country_codeIP" ;; *) @@ -1312,7 +1312,7 @@ ldnmp_v() { 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}" - # Get the mysql version + # Get mysql version 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}" @@ -1699,7 +1699,7 @@ web_del() { send_stats "Delete site data" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "To delete site data, please enter your domain name (multiple domain names are separated by spaces):" yuming_list + read -e -p "To delete site data, please enter your domain name (separate multiple domain names with spaces):" yuming_list if [[ -z "$yuming_list" ]]; then return fi @@ -1716,7 +1716,7 @@ web_del() { 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:]') - # Check whether the database exists before deleting it to avoid errors + # Check whether the database exists before deleting it to avoid errors. echo "Deleting the database:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1938,7 +1938,7 @@ nginx_zstd() { else - echo "Invalid parameter: Use 'on' or 'off'" + echo "Invalid argument: use 'on' or 'off'" return 1 fi @@ -2007,7 +2007,7 @@ web_security() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2092,7 +2092,7 @@ web_security() { echo "Go to the upper right corner of the cf background, select the API token on the left, and obtain the Global API Key" echo "https://dash.cloudflare.com/login" read -e -p "Enter CF account number:" cfuser - read -e -p "Enter the Global API Key for CF:" cftoken + read -e -p "Enter CF’s Global API Key:" 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 @@ -2540,7 +2540,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules for releasing the specified IP + # Clear the rules that allow the specified 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 @@ -2559,7 +2559,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules for releasing the specified IP + # Clear the rules that allow the specified 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 @@ -2616,7 +2616,7 @@ block_host_port() { - # Denied all other IP access + # Deny access from all other IPs if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi @@ -2649,7 +2649,7 @@ clear_host_port_rules() { if [[ -z "$port" || -z "$allowed_ip" ]]; then echo "Error: Please provide the port number and the IP that is allowed to access." - echo "Usage: clear_host_port_rules " + echo "Usage: clear_host_port_rules " return 1 fi @@ -2677,7 +2677,7 @@ clear_host_port_rules() { iptables -D INPUT -p udp --dport "$port" -j DROP fi - # Clear rules that allow native access + # Clear rules that allow local access 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 @@ -2895,7 +2895,7 @@ docker_app_plus() { ;; 5) - echo "${docker_name}Domain access settings" + echo "${docker_name}Domain name access settings" send_stats "${docker_name}Domain access settings" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} @@ -3000,7 +3000,7 @@ session_exists() { tmux has-session -t $1 2>/dev/null } -# Loop until a non-existent session name is found +# Loop until a non-existing session name is found while session_exists "$base_name-$tmuxd_ID"; do local tmuxd_ID=$((tmuxd_ID + 1)) done @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { fi if [ -z "$reverseproxy_port" ]; then - read -e -p "Please enter your multiple anti-generation IP+ ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port + read -e -p "Please enter your multiple anti-generation IP+ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3795,7 +3795,7 @@ generate_access_urls() { # Get all ports first get_frp_ports - # Check if there are ports other than 8055/8056 + # Check if there is a port other than 8055/8056 local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3824,7 +3824,7 @@ generate_access_urls() { done fi - # Handling HTTPS configuration + # Handle HTTPS configuration for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3929,8 +3929,8 @@ frps_panel() { 8) send_stats "Block IP access" - echo "If you have accessed the anti-generation domain name, you can use this function to block IP+ port access, which is more secure." - read -e -p "Please enter the port you need to block:" frps_port + echo "If you have reversed domain name access, you can use this function to block IP+port access, which is safer." + read -e -p "Please enter the port to be blocked:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -3958,7 +3958,7 @@ frpc_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRP Client$check_frp $update_status" - echo "Docking with the server, after docking, you can create intranet penetration service to the Internet access" + echo "Connect with the server. After the connection, you can create an intranet penetration service to access the Internet." echo "Official website introduction: https://github.com/fatedier/frp/" echo "Video teaching: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" @@ -4128,7 +4128,7 @@ yt_menu_pro() { --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "After the execution is completed, press any key to continue..." ;; + read -e -p "Execution completed, press any key to continue..." ;; 8) send_stats "MP3 download" read -e -p "Please enter the video link:" url @@ -4267,7 +4267,7 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "Delete the system log..." + echo "Delete system log..." rm -rf /var/log/* echo "Delete temporary files..." rm -rf /tmp/* @@ -4560,7 +4560,7 @@ dd_xitong() { root_use echo "Reinstall the system" echo "--------------------------------" - echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." + echo -e "${gl_hong}Notice:${gl_bai}Reinstallation may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." echo -e "${gl_hui}Thanks to the script support of leitbogioro and bin456789!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" @@ -4971,7 +4971,7 @@ elrepo_install() { # Import ELRepo GPG public key echo "Import the ELRepo GPG public key..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - # Detect system version + # Check system version 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) # Make sure we run on a supported operating system @@ -5135,7 +5135,7 @@ clamav_scan() { clamav() { root_use - send_stats "Virus Scan Management" + send_stats "Virus scan management" while true; do clear echo "clamav virus scanning tool" @@ -5260,7 +5260,7 @@ optimize_balanced() { sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null echo -e "${gl_lv}Other optimizations...${gl_bai}" - # Restore transparent page + # Restore transparent huge pages echo always > /sys/kernel/mm/transparent_hugepage/enabled # Restore NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null @@ -5268,7 +5268,7 @@ optimize_balanced() { } -# Restore the default settings function +# Restore default settings function restore_defaults() { echo -e "${gl_lv}Restore to default settings...${gl_bai}" @@ -5282,7 +5282,7 @@ restore_defaults() { sysctl -w vm.overcommit_memory=0 2>/dev/null sysctl -w vm.min_free_kbytes=16384 2>/dev/null - echo -e "${gl_lv}Restore network settings...${gl_bai}" + echo -e "${gl_lv}Reset network settings...${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 @@ -5301,7 +5301,7 @@ restore_defaults() { sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null echo -e "${gl_lv}Restore other optimizations...${gl_bai}" - # Restore transparent page + # Restore transparent huge pages echo always > /sys/kernel/mm/transparent_hugepage/enabled # Restore NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null @@ -5630,7 +5630,7 @@ linux_trash() { read -e -p "Enter the file name to restore:" file_to_restore if [ -e "$TRASH_DIR/$file_to_restore" ]; then mv "$TRASH_DIR/$file_to_restore" "$HOME/" - echo "$file_to_restoreRestored to the home directory." + echo "$file_to_restoreRestored to home directory." else echo "The file does not exist." fi @@ -5716,7 +5716,7 @@ create_backup() { restore_backup() { send_stats "Restore backup" # Select the backup you want to restore - read -e -p "Please enter the backup file name to restore:" BACKUP_NAME + read -e -p "Please enter the backup file name to be restored:" BACKUP_NAME # Check if the backup file exists if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then @@ -5837,7 +5837,7 @@ add_connection() { echo "Please paste the key content (press press Enter twice after pasting):" local password_or_key="" while IFS= read -r line; do - # If the input is empty and the key content already contains the beginning, the input ends + # If the input is a blank line and the key content already contains the beginning, end the input if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi @@ -5909,7 +5909,7 @@ use_connection() { if [[ $? -ne 0 ]]; then echo "Connection failed! Please check the following:" echo "1. Is the key file path correct?$password_or_key" - echo "2. Whether the key file permissions are correct (should be 600)." + echo "2. Are the key file permissions correct (should be 600)." echo "3. Whether the target server allows login using the key." fi else @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # Mount the partition + # Mount partition mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6050,7 +6050,7 @@ list_mounted_partitions() { # Format partition format_partition() { send_stats "Format partition" - read -e -p "Please enter the partition name to format (for example, sda1):" PARTITION + read -e -p "Please enter the name of the partition to be formatted (e.g. sda1):" PARTITION # Check if the partition exists if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then @@ -6335,7 +6335,7 @@ run_task() { # Create a timed task schedule_task() { - send_stats "Add synchronization timing tasks" + send_stats "Add synchronization scheduled tasks" read -e -p "Please enter the task number to be synchronized regularly:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6367,7 +6367,7 @@ schedule_task() { return fi - # Create a crontab to the user + # Create to user's crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - echo "The timing task has been created:$cron_job" } @@ -6380,7 +6380,7 @@ view_tasks() { echo "---------------------------------" } -# Delete timing tasks +# Delete scheduled tasks delete_task_schedule() { send_stats "Delete synchronization timing tasks" read -e -p "Please enter the task number to delete:" num @@ -6492,7 +6492,7 @@ linux_info() { echo "" echo -e "System information query" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Host Name:${gl_bai}$hostname" + echo -e "${gl_kjlan}Hostname:${gl_bai}$hostname" echo -e "${gl_kjlan}System version:${gl_bai}$os_info" echo -e "${gl_kjlan}Linux version:${gl_bai}$kernel_version" echo -e "${gl_kjlan}-------------" @@ -6507,7 +6507,7 @@ linux_info() { echo -e "${gl_kjlan}Virtual memory:${gl_bai}$swap_info" echo -e "${gl_kjlan}Hard disk occupation:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" + echo -e "${gl_kjlan}Total received:${gl_bai}$rx" echo -e "${gl_kjlan}Total send:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}Network algorithm:${gl_bai}$congestion_algorithm $queue_algorithm" @@ -6804,7 +6804,7 @@ linux_bbr() { echo "Current TCP blocking algorithm:$congestion_algorithm $queue_algorithm" echo "" - echo "BBR Management" + echo "BBR management" echo "------------------------" echo "1. Turn on BBRv3 2. Turn off BBRv3 (restarts)" echo "------------------------" @@ -6913,7 +6913,7 @@ docker_ssh_migration() { # If the Compose project has been packaged, skip it if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose project [$project_name] Backed up, skip duplicate packaging...${NC}" + echo -e "${YELLOW}Compose project [$project_name] Already backed up, skip repeated packaging...${NC}" continue fi @@ -6998,7 +6998,7 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "The original path was not found, please enter the restore directory path:" original_path - # Check if the container for the compose project is already running + # Check whether the container of the compose project is already running running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then echo -e "${YELLOW}Compose project [$project_name] There is already a container running, skip restore...${NC}" @@ -7051,7 +7051,7 @@ docker_ssh_migration() { ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # Volume Mapping + Volume Data Recovery + # Volume mapping + volume data recovery VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7112,7 +7112,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transfer backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in with a key + # Log in with key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7664,7 +7664,7 @@ linux_Oracle() { local DEFAULT_SPEEDTEST_INTERVAL=120 # Prompt the user to enter the number of CPU cores and occupancy percentage, and if entered, use the default value. - read -e -p "Please enter the number of CPU cores [default:$DEFAULT_CPU_CORE]: " cpu_core + read -e -p "Please enter the number of CPU cores [Default:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} read -e -p "Please enter the CPU usage percentage range (for example, 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util @@ -7844,13 +7844,13 @@ linux_ldnmp() { echo -e "${gl_huang}7. ${gl_bai}Install the flarum forum website${gl_huang}8. ${gl_bai}Install typecho lightweight blog website" echo -e "${gl_huang}9. ${gl_bai}Install LinkStack Shared Link Platform${gl_huang}20. ${gl_bai}Customize dynamic site" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}21. ${gl_bai}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" + echo -e "${gl_huang}21. ${gl_bai}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}site redirect" echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy - domain name" echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" echo -e "${gl_huang}30. ${gl_bai}Customize static site" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up the entire site data" + echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up site-wide data" echo -e "${gl_huang}33. ${gl_bai}Timed remote backup${gl_huang}34. ${gl_bai}Restore the entire site data" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}35. ${gl_bai}Protect LDNMP environment${gl_huang}36. ${gl_bai}Optimize LDNMP environment" @@ -7890,7 +7890,7 @@ linux_ldnmp() { 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 + wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20250901.zip unzip latest.zip rm latest.zip @@ -8027,7 +8027,7 @@ linux_ldnmp() { echo "Username: admin" echo "Password: admin" echo "------------------------" - echo "If red error0 appears in the upper right corner when logging in, please use the following command:" + echo "If a red error0 appears in the upper right corner when logging in, please use the following command:" echo "I am also very angry that the unicorn number card is so troublesome, and there will be such problems!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -8237,7 +8237,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}5/6${gl_bai}] Edit site configuration" echo "-------------" - echo "Press any key to continue, and you can set the site configuration in detail, such as pseudo-static contents, etc." + echo "Press any key to continue. You can set the site configuration in detail, such as pseudo-static content." read -n 1 -s -r -p "" install nano nano /home/web/conf.d/$yuming.conf @@ -8500,7 +8500,7 @@ linux_ldnmp() { while true; do clear - echo "The backup file has been created: /home/$backup_filename" + echo "Backup file created: /home/$backup_filename" read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice case "$choice" in [Yy]) @@ -8552,7 +8552,7 @@ linux_ldnmp() { case $dingshi in 1) check_crontab_installed - read -e -p "Select the day of the week for your weekly backup (0-6, 0 represents Sunday):" weekday + read -e -p "Select the day of the week for weekly backup (0-6, 0 represents Sunday):" weekday (crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; 2) @@ -8624,7 +8624,7 @@ linux_ldnmp() { echo "Update LDNMP environment" echo "------------------------" ldnmp_v - echo "Discover new version of components" + echo "New version of component found" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8813,9 +8813,9 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Official version of Baota Panel${gl_kjlan}2. ${color2}aaPanel International Edition" + echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel International Edition" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager Visual Panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB Offline BT Magnetic Download Panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multiplayer online chat system" echo -e "${gl_kjlan}------------------------" @@ -8826,7 +8826,7 @@ while true; do echo -e "${gl_kjlan}19. ${color19}Thunder Pool WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" - echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop Remote Desktop Web Edition${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop remote desktop web version${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed ​​Speed ​​Test Tool" echo -e "${gl_kjlan}29. ${color29}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" @@ -8841,12 +8841,12 @@ while true; do echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk Remote Desk (Relay)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub Acceleration Station${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}Prometheus Monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tool" + echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}51. ${color51}PVE Chicken Panel${gl_kjlan}52. ${color52}DPanel Container Management Panel" echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify large model knowledge base${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing point-to-point file synchronization tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI video generation tool" + echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" @@ -9187,7 +9187,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "Please set the email domain name, for example, mail.yuming.com:" yuming + read -e -p "Please set the email domain name, for example mail.yuming.com:" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -9577,7 +9577,7 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -10072,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya Family Bucket" + send_stats "Xiaoya family bucket" clear install_docker check_disk_space 1 @@ -11001,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11205,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # Keep the original variable + # Keep original variables source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11272,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11531,8 +11531,8 @@ while true; do local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" + local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" local app_size="1" docker_app @@ -11634,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11955,7 +11955,7 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # Create a directory (if it does not exist) + # Create directory if it does not exist mkdir -p "$(dirname "$CONFIG_FILE")" echo "Please paste your client configuration and press Enter twice in a row to save:" @@ -12129,7 +12129,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12140,6 +12140,28 @@ while true; do 102) + local app_id="102" + local docker_name="vocechat-server" + local docker_img="privoce/vocechat-server:latest" + local docker_port=8102 + + docker_rum() { + + docker run -d --restart=always \ + -p ${docker_port}:3000 \ + --name vocechat-server \ + -v /home/docker/vocechat/data:/home/vocechat-server/data \ + privoce/vocechat-server:latest + + } + + local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" + local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; @@ -12210,7 +12232,7 @@ while true; do cd / && tar -xzf "$filename" echo "The application data has been restored. Please manually enter the specified application menu and update the application to restore the application." else - echo "No compression package was found." + echo "No compressed package found." fi ;; @@ -12248,7 +12270,7 @@ linux_work() { echo -e "${gl_kjlan}3. ${gl_bai}Workspace No. 3" echo -e "${gl_kjlan}4. ${gl_bai}Workspace No. 4" echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" - echo -e "${gl_kjlan}6. ${gl_bai}Workspace No. 6" + echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Workspace No. 7" echo -e "${gl_kjlan}8. ${gl_bai}Workspace No. 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" @@ -12291,7 +12313,7 @@ linux_work() { clear install tmux local SESSION_NAME="work4" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 5) @@ -12347,7 +12369,7 @@ linux_work() { fi send_stats "SSH resident mode" echo -e "SSH resident mode${tmux_sshd_status}" - echo "After SSH connection is enabled, it will directly enter the resident mode and return to the previous working state." + echo "After opening the SSH connection, it will directly enter the resident mode and return directly to the previous working state." echo "------------------------" echo "1. Turn on 2. Turn off" echo "------------------------" @@ -12425,9 +12447,9 @@ linux_Settings() { # send_stats "System Tools" echo -e "System Tools" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut keys${gl_kjlan}2. ${gl_bai}Modify the login password" + echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut keys${gl_kjlan}2. ${gl_bai}Change login password" echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" - echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify the SSH connection port" + echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify SSH connection port" echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}One-click reinstallation system${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account to create a new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" echo -e "${gl_kjlan}------------------------" @@ -12444,12 +12466,12 @@ linux_Settings() { echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tool${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}File Manager" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${gl_bai}Switch system language${gl_kjlan}32. ${gl_bai}Command line beautification tool${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${gl_bai}Set up a system recycling bin${gl_kjlan}34. ${gl_bai}System backup and recovery" + echo -e "${gl_kjlan}33. ${gl_bai}Set up system recycle bin${gl_kjlan}34. ${gl_bai}System backup and recovery" echo -e "${gl_kjlan}35. ${gl_bai}ssh remote connection tool${gl_kjlan}36. ${gl_bai}Hard disk partition management tool" echo -e "${gl_kjlan}37. ${gl_bai}Command line history${gl_kjlan}38. ${gl_bai}rsync remote synchronization tool" echo -e "${gl_kjlan}39. ${gl_bai}Command Favorites${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system optimization${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system tuning${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and Security" echo -e "${gl_kjlan}101. ${gl_bai}Advanced usage of k command${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}Uninstall tech lion script" echo -e "${gl_kjlan}------------------------" @@ -12573,7 +12595,7 @@ EOF 5) root_use - send_stats "Open port" + send_stats "open port" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 echo "All ports are open" @@ -12772,7 +12794,7 @@ EOF echo "" - echo "Account operation" + echo "Account operations" echo "------------------------" echo "1. Create a normal account 2. Create a premium account" echo "------------------------" @@ -12809,7 +12831,7 @@ EOF install sudo - echo "The operation has been completed." + echo "The operation is complete." ;; 3) @@ -12849,7 +12871,7 @@ EOF done echo "" - echo "Random name" + echo "random name" 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") @@ -12924,7 +12946,7 @@ EOF echo "America" echo "21. Western Time 22. Eastern Time" echo "23. Canadian time 24. Mexican time" - echo "25. Brazil time 26. Argentina time" + echo "25. Brazil Time 26. Argentina Time" echo "------------------------" echo "31. UTC Global Standard Time" echo "------------------------" @@ -12973,7 +12995,7 @@ EOF 18) root_use - send_stats "Modify the host name" + send_stats "Modify hostname" while true; do clear @@ -13034,7 +13056,7 @@ EOF bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "Source of education in mainland China" + send_stats "Mainland China Education Source" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) @@ -13140,7 +13162,7 @@ EOF ;; 2) - read -e -p "Please enter the keywords of parsing content that need to be deleted:" delhost + read -e -p "Please enter the keywords of the parsed content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts send_stats "Local host parsing and deletion" ;; @@ -13221,7 +13243,7 @@ EOF # Get the value of threshold_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}The current set entry-station current limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" + echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The current outbound current limit threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else echo -e "${gl_hui}Current limit shutdown function is not enabled${gl_bai}" @@ -13245,7 +13267,7 @@ EOF rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "Please enter the outbound traffic threshold (unit is G, default is 100G):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "Please enter the traffic reset date (default reset on the 1st of each month):" cz_day + read -e -p "Please enter the traffic reset date (default resets on the 1st of every month):" cz_day cz_day=${cz_day:-1} cd ~ @@ -13285,7 +13307,7 @@ EOF echo "ROOT private key login mode" echo "Video introduction: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "A key pair will be generated, a more secure way to SSH login" + echo "A key pair will be generated, a more secure way to log in via SSH" echo "------------------------" echo "1. Generate a new key 2. Import an existing key 3. View the native key" echo "------------------------" @@ -13332,10 +13354,10 @@ EOF echo "TG-bot monitoring and early warning function" echo "Video introduction: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "You need to configure the tg robot API and the user ID to receive early warnings to realize real-time monitoring and early warning of native CPU, memory, hard disk, traffic, and SSH login" + echo "You need to configure the tg robot API and the user ID to receive alerts to achieve real-time monitoring and alerts of local CPU, memory, hard disk, traffic, and SSH login." echo "After reaching the threshold, the user will be sent to the user" echo -e "${gl_hui}- Regarding traffic, restarting the server will recalculate-${gl_bai}" - read -e -p "Are you sure to continue? (Y/N):" choice + read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) @@ -13386,7 +13408,7 @@ EOF 26) root_use - send_stats "Fix high-risk vulnerabilities in SSH" + send_stats "Fix high-risk SSH vulnerabilities" cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/upgrade_openssh9.8p1.sh chmod +x ~/upgrade_openssh9.8p1.sh @@ -13567,7 +13589,7 @@ EOF local status_message="无法确定的状态" fi - echo "Privacy and Security" + echo "Privacy and security" echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," echo "------------------------------------------------" @@ -13578,7 +13600,7 @@ EOF echo "--------------------" echo "0. Return to the previous menu" echo "--------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) cd ~ @@ -13683,7 +13705,7 @@ linux_file() { case "$Limiting" in 1) # 进入目录 read -e -p "Please enter the directory name:" dirname - cd "$dirname" 2>/dev/null || echo "Unable to enter the directory" + cd "$dirname" 2>/dev/null || echo "Unable to enter directory" send_stats "Go to the directory" ;; 2) # 创建目录 @@ -13705,7 +13727,7 @@ linux_file() { ;; 5) # 删除目录 read -e -p "Please enter the directory name to delete:" dirname - rm -rf "$dirname" && echo "Directory has been deleted" || echo "Deletion failed" + rm -rf "$dirname" && echo "Directory has been deleted" || echo "Delete failed" send_stats "Delete Directory" ;; 6) # 返回上一级选单目录 @@ -13732,7 +13754,7 @@ linux_file() { 14) # 重命名文件 read -e -p "Please enter the current file name:" current_name read -e -p "Please enter a new file name:" new_name - mv "$current_name" "$new_name" && echo "File renamed" || echo "Rename failed" + mv "$current_name" "$new_name" && echo "File has been renamed" || echo "Rename failed" send_stats "Rename the file" ;; 15) # 删除文件 @@ -13757,11 +13779,11 @@ linux_file() { read -e -p "Please enter the file or directory path to move:" src_path if [ ! -e "$src_path" ]; then echo "Error: The file or directory does not exist." - send_stats "Failed to move a file or directory: The file or directory does not exist" + send_stats "Failed to move file or directory: File or directory does not exist" continue fi - read -e -p "Please enter the target path (including the new file name or directory name):" dest_path + read -e -p "Please enter the destination path (including new file or directory name):" dest_path if [ -z "$dest_path" ]; then echo "Error: Please enter the target path." send_stats "Moving file or directory failed: The destination path is not specified" @@ -13846,7 +13868,7 @@ EOF 0) # 返回上一级选单 - send_stats "Return to the previous menu menu" + send_stats "Return to the previous menu" break ;; *) # 处理无效输入 @@ -13915,14 +13937,14 @@ while true; do cat ~/cluster/servers.py echo echo -e "${gl_kjlan}------------------------${gl_bai}" - echo -e "${gl_kjlan}Server List Management${gl_bai}" + echo -e "${gl_kjlan}Server list management${gl_bai}" echo -e "${gl_kjlan}1. ${gl_bai}Add a server${gl_kjlan}2. ${gl_bai}Delete the server${gl_kjlan}3. ${gl_bai}Edit the server" echo -e "${gl_kjlan}4. ${gl_bai}Backup cluster${gl_kjlan}5. ${gl_bai}Restore the cluster" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}Install the tech lion script${gl_kjlan}12. ${gl_bai}Update the system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set up 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set the time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom commands" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom commands" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14024,13 +14046,13 @@ echo "------------------------" echo -e "${gl_lan}Leica Cloud Hong Kong CN2 GIA South Korea Dual ISP US CN2 GIA Discounts${gl_bai}" echo -e "${gl_bai}Website: https://www.lcayun.com/aff/ZEXUQBIM${gl_bai}" echo "------------------------" -echo -e "${gl_lan}RackNerd $10.99 per year United States 1 core 1G memory 20G hard drive 1T traffic per month${gl_bai}" +echo -e "${gl_lan}RackNerd $10.99 per year, USA, 1 core, 1G memory, 20G hard drive, 1T traffic per month${gl_bai}" echo -e "${gl_bai}Website: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" echo "------------------------" echo -e "${gl_zi}Hostinger 52.7 dollars per year United States 1 core 4G memory 50G hard drive 4T traffic per month${gl_bai}" -echo -e "${gl_bai}Website: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${gl_bai}" +echo -e "${gl_bai}URL: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${gl_bai}" echo "------------------------" -echo -e "${gl_huang}Brickworker, $49 per quarter, US CN2GIA, Japan SoftBank, 2 cores, 1G memory, 20G hard drive, 1T traffic per month${gl_bai}" +echo -e "${gl_huang}Bricklayer 49 dollars per quarter US CN2GIA Japan SoftBank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}Website: https://bandwagonhost.com/aff.php?aff=69004&pid=87${gl_bai}" echo "------------------------" echo -e "${gl_lan}DMIT $28 per quarter US CN2GIA 1 core 2G memory 20G hard drive 800G traffic per month${gl_bai}" @@ -14092,7 +14114,7 @@ while true; do if [ -n "$existing_cron" ]; then echo "------------------------" - echo -e "${gl_lv}Automatic update is enabled, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" + echo -e "${gl_lv}Automatic updates are turned on, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" fi echo "------------------------" @@ -14248,7 +14270,7 @@ echo "Intranet penetration (client) k frpc" echo "Software start k start sshd | k start sshd" echo "Software stop k stop sshd | k stop sshd" echo "Software restart k restart sshd | k restart sshd" -echo "Software status view k status sshd | k status sshd" +echo "Check software status k status sshd | k status sshd" echo "Software boot k enable docker | k autostart docke | k startup docker" echo "Domain name certificate application k ssl" echo "Domain name certificate expiration query k ssl ps" @@ -14460,7 +14482,7 @@ else docker_ps ;; img|镜像) - send_stats "Quick mirror management" + send_stats "Quick image management" docker_image ;; *) diff --git a/jp/kejilion.sh b/jp/kejilion.sh index f72c82993..f3f6a02e1 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.7" +sh_v="4.1.8" gl_hui='\e[37m' @@ -116,7 +116,7 @@ UserLicenseAgreement() { clear echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" - echo "ユーザーライセンス契約:https://blog.kejilion.pro/user-license-agreement/" + echo "ユーザー使用許諾契約: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "上記の条件に同意しますか? (y/n):" user_input @@ -170,7 +170,7 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "パッケージパラメータが指定されていません!" return 1 fi @@ -268,7 +268,7 @@ remove() { } -# さまざまな分布に適したUniversal SystemCTL関数 +# さまざまなディストリビューションに適したユニバーサル systemctl 関数 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -287,7 +287,7 @@ restart() { if [ $? -eq 0 ]; then echo "$1サービスは再開されました。" else - echo "エラー:再起動$1サービスは失敗しました。" + echo "エラー:再起動$1サービスが失敗しました。" fi } @@ -337,7 +337,7 @@ enable() { break_end() { echo -e "${gl_lv}操作が完了しました${gl_bai}" - echo "任意のキーを押して続行します..." + echo "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" echo "" clear @@ -508,7 +508,7 @@ while true; do echo "" echo "コンテナ操作" echo "------------------------" - echo "1.新しいコンテナを作成します" + echo "1. 新しいコンテナを作成する" echo "------------------------" echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" echo "3.指定された容器を停止します7。すべての容器を停止します" @@ -520,9 +520,9 @@ while true; do echo "------------------------" echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) send_stats "新しいコンテナを作成します" @@ -540,7 +540,7 @@ while true; do docker stop $dockername ;; 4) - send_stats "指定されたコンテナを削除します" + send_stats "指定したコンテナを削除します" read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker rm -f $dockername ;; @@ -576,7 +576,7 @@ while true; do docker restart $(docker ps -q) ;; 11) - send_stats "コンテナを入力します" + send_stats "コンテナに入る" read -e -p "コンテナ名を入力してください:" dockername docker exec -it $dockername /bin/sh break_end @@ -672,14 +672,14 @@ while true; do done ;; 3) - send_stats "ミラーを削除します" + send_stats "画像の削除" read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "すべての画像を削除します" + send_stats "すべての画像を削除する" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -765,7 +765,7 @@ install_crontab() { return fi - echo -e "${gl_lv}Crontabがインストールされ、Cronサービスが実行されています。${gl_bai}" + echo -e "${gl_lv}crontab がインストールされており、cron サービスが実行されています。${gl_bai}" } @@ -785,7 +785,7 @@ docker_ipv6_on() { # JQを使用して、構成ファイルの更新を処理します local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 現在の構成には既にIPv6設定があるかどうかを確認してください + # 現在の構成にすでに ipv6 設定があるかどうかを確認します local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') # 構成を更新し、IPv6を有効にします @@ -795,7 +795,7 @@ docker_ipv6_on() { 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 @@ -814,11 +814,11 @@ docker_ipv6_off() { # 構成ファイルが存在するかどうかを確認します if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" + echo -e "${gl_hong}設定ファイルが存在しません${gl_bai}" return fi - # 現在の構成をお読みください + # 現在の構成を読み取る local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") # JQを使用して、構成ファイルの更新を処理します @@ -827,7 +827,7 @@ docker_ipv6_off() { # 現在のIPv6ステータスを確認してください local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 元の構成と新しい構成を比較します + # 元の構成と新しい構成を比較する if [[ "$CURRENT_IPV6" == "false" ]]; then echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" else @@ -920,7 +920,7 @@ close_port() { 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" + echo "ポートが閉じられています$port" fi done @@ -1075,7 +1075,7 @@ manage_country_rules() { iptables -P INPUT DROP iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT - echo "正常に許可されています$country_codeIPアドレス" + echo "正常に許可されました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1119,7 +1119,7 @@ iptables_panel() { echo "ファイアウォール管理" echo "------------------------" echo "1.指定されたポート2を開きます。指定されたポートを閉じます" - echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" + echo "3. すべてのポートを開く 4. すべてのポートを閉じる" echo "------------------------" echo "5。IPホワイトリスト6。IPブラックリスト" echo "7.指定されたIPをクリアします" @@ -1133,12 +1133,12 @@ iptables_panel() { echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) read -e -p "オープンポート番号を入力してください:" o_port open_port $o_port - send_stats "指定されたポートを開きます" + send_stats "指定したポートを開く" ;; 2) read -e -p "閉じたポート番号を入力してください:" c_port @@ -1218,12 +1218,12 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされた国コードを入力してください(複数の国コードは、CN US JPなどのスペースで区切ることができます):" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code manage_country_rules block $country_code send_stats "許可された国$country_codeIP" ;; 16) - read -e -p "許可された国コードを入力してください(複数の国コードは、CN US JPなどのスペースで区切ることができます):" country_code + read -e -p "許可されている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules allow $country_code send_stats "国をブロックします$country_codeIP" ;; @@ -1260,7 +1260,7 @@ add_swap() { mkswap -f "$partition" done - # /swapfileが使用されなくなったことを確認してください + # /swapfile が使用されていないことを確認してください swapoff /swapfile # 古い /swapfileを削除します @@ -1281,7 +1281,7 @@ add_swap() { rc-update add local fi - echo -e "仮想メモリサイズは変更されています${gl_huang}${new_swap}${gl_bai}M" + echo -e "仮想メモリのサイズは次のように調整されました。${gl_huang}${new_swap}${gl_bai}M" } @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 仮想メモリを作成する必要があるかどうかを判断します +# 仮想メモリを作成する必要があるかどうかを判断する [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1392,7 +1392,7 @@ install_ldnmp() { clear - echo "LDNMP環境がインストールされています" + echo "LDNMP環境がインストールされている" echo "------------------------" ldnmp_v @@ -1523,7 +1523,7 @@ certs_status() { else send_stats "ドメイン名証明書のアプリケーションは失敗しました" echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" - echo -e "1。ドメイン名スペリングエラーdomainドメイン名が正しく入力されているかどうかを確認してください" + echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" @@ -1551,7 +1551,7 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "まず、ドメイン名をローカル IP に解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1652,7 +1652,7 @@ cf_purge_cache() { # 構成ファイルが存在するかどうかを確認します if [ -f "$CONFIG_FILE" ]; then - # 構成ファイルからAPI_TOKENとZONE_IDを読み取ります + # 構成ファイルから API_TOKEN とzone_idを読み取ります read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" # ゾーン_idsを配列に変換します ZONE_IDS=($ZONE_IDS) @@ -1672,7 +1672,7 @@ cf_purge_cache() { # 各ZONE_IDをループして、Clear Cacheコマンドを実行します for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "ゾーン_idのキャッシュのクリア:$ZONE_ID" + 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" \ @@ -1706,7 +1706,7 @@ web_del() { fi for yuming in $yuming_list; do - echo "ドメイン名の削除:$yuming" + 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 @@ -1865,7 +1865,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる:コメントを追加します + # Brotliを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1885,7 +1885,7 @@ nginx_br() { return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # nginx イメージを確認し、それに応じて処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1998,7 +1998,7 @@ web_security() { echo "------------------------" echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" echo "------------------------" - echo "21。CloudFlareモード22。5秒シールドの高負荷" + echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" echo "31。WAF32をオンにしてください。WAFをオフにします" echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" @@ -2092,7 +2092,7 @@ web_security() { echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" echo "https://dash.cloudflare.com/login" read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CF のグローバル API キーを入力します。" 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 @@ -2116,7 +2116,7 @@ web_security() { echo "--------------" echo "CFパラメーターを取得します:" echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" - echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}リージョンID${gl_bai}" + echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" read -e -p "CFアカウント番号を入力します:" cfuser @@ -2179,7 +2179,7 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 現在のworker_processesの設定値を取得します +# 現在のworker_processes設定値を取得します current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') # 値に応じてモード情報を設定します @@ -2288,7 +2288,7 @@ web_optimization() { 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チューニング + # 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 @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "アクセスアドレス:" +echo "訪問先住所:" ip_address @@ -2487,7 +2487,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワークを確認してリリースします127.0.0.0/8 + # 检查并放行本地网络 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 @@ -2504,7 +2504,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワークを確認してリリースします127.0.0.0/8 + # ローカルネットワーク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 @@ -2540,12 +2540,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 指定されたIPをリリースするためのルールをクリアします + # 指定した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 + # ローカルネットワーク 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 @@ -2648,7 +2648,7 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "エラー: アクセスを許可するには、ポート番号と IP を入力してください。" echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" return 1 fi @@ -2677,7 +2677,7 @@ clear_host_port_rules() { 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 @@ -2862,8 +2862,8 @@ docker_app_plus() { echo "------------------------" echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. ドメイン名アクセスを追加します。 6. ドメイン名アクセスを削除します。" + echo "7. IP+ポートアクセスを許可します。 8. IP+ポートアクセスをブロックします。" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -2910,7 +2910,7 @@ docker_app_plus() { clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "IPアクセスをブロックする${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -3110,7 +3110,7 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP環境を再度インストールできません" + send_stats "LDNMP環境を再インストールできません" echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" break_end linux_ldnmp @@ -3164,7 +3164,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "LDNMP環境を最初にインストールしてください" + send_stats "最初に LDNMP 環境をインストールしてください" ldnmp_install_all fi @@ -3207,7 +3207,7 @@ ldnmp_wp() { webname="WordPress" yuming="${1:-}" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3253,7 +3253,7 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "抗ジェネレーションIPを入力してください:" reverseproxy + read -e -p "アンチジェネレーション IP を入力してください:" reverseproxy fi if [ -z "$port" ]; then @@ -3386,7 +3386,7 @@ ldnmp_web_status() { case $sub_choice in 1) send_stats "ドメイン名証明書を申請します" - read -e -p "ドメイン名を入力してください:" yuming + 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 @@ -3403,7 +3403,7 @@ ldnmp_web_status() { install_ssltls certs_status - # MySQLの交換 + # mysqlの置換 add_db local odd_dbname=$(echo "$oddyuming" | sed -e 's/[^A-Za-z0-9]/_/g') @@ -3421,7 +3421,7 @@ ldnmp_web_status() { done done - # ウェブサイトディレクトリの交換 + # Web サイトのディレクトリの置き換え mv /home/web/html/$oddyuming /home/web/html/$yuming find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} + @@ -3469,14 +3469,14 @@ ldnmp_web_status() { break_end ;; 7) - send_stats "グローバル構成を編集します" + send_stats "グローバル構成の編集" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload ;; 8) - send_stats "サイト構成を編集します" + send_stats "サイト構成を編集する" read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming install nano nano /home/web/conf.d/$yuming.conf @@ -3524,7 +3524,7 @@ while true; do check_panel_app echo -e "$panelname $check_panel" echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" - echo "公式ウェブサイトの紹介:$panelurl " + echo "公式サイト紹介:$panelurl " echo "" echo "------------------------" @@ -3598,7 +3598,7 @@ donlond_frp() { generate_frps_config() { - send_stats "FRPサーバーをインストールします" + send_stats "FRPサーバーをインストールする" # ランダムポートと資格情報を生成します local bind_port=8055 local dashboard_port=8056 @@ -3628,7 +3628,7 @@ EOF echo "token: $token" echo echo "FRPパネル情報" - echo "FRPパネルアドレス:http://$ipv4_address:$dashboard_port" + echo "FRPパネルアドレス:http://$ipv4_address:$dashboard_port" echo "FRPパネルのユーザー名:$dashboard_user" echo "FRPパネルパスワード:$dashboard_pwd" echo @@ -3642,7 +3642,7 @@ EOF configure_frpc() { send_stats "FRPクライアントをインストールします" read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr - read -e -p "外部ネットワークドッキングトークンを入力してください:" token + read -e -p "外部ネットワーク ドッキング トークンを入力してください:" token echo mkdir -p /home/frp @@ -3670,7 +3670,7 @@ add_forwarding_service() { read -e -p "イントラネットIPを入力してください[デフォルト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 + read -e -p "外部ネットワーク ポートを入力してください:" remote_port # ユーザー入力を構成ファイルに書き込みます cat <> /home/frp/frpc.toml @@ -3815,7 +3815,7 @@ generate_access_urls() { fi done - # IPv6アドレスを処理する(存在する場合) + # IPv6 アドレスが存在する場合は処理します if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3875,7 +3875,7 @@ frps_panel() { echo "------------------------" echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" - echo "00。サービスのステータスを更新します0。前のメニューに戻ります" + echo "00. サービスステータスを更新します。 0. 前のメニューに戻ります。" echo "------------------------" read -e -p "あなたの選択を入力してください:" choice case $choice in @@ -3912,7 +3912,7 @@ frps_panel() { echo "ドメイン名アクセスへの逆イントラネット侵入サービス" send_stats "FRP外部ドメイン名へのアクセス" add_yuming - read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port + read -e -p "イントラネット侵入サービス ポートを入力してください:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; @@ -3922,14 +3922,14 @@ frps_panel() { ;; 7) - send_stats "IPアクセスを許可します" + send_stats "IPアクセスを許可する" read -e -p "リリースするポートを入力してください:" frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; 8) send_stats "IPアクセスをブロックします" - echo "アンチジェネレーションドメイン名にアクセスした場合、この関数を使用して、より安全なIP+ポートアクセスをブロックできます。" + echo "アンチジェネレーションドメイン名にアクセスした場合は、この関数を使用して、より安全なIP+ポートアクセスをブロックします。" read -e -p "ブロックする必要があるポートを入力してください。" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4054,7 +4054,7 @@ yt_menu_pro() { echo -e "YT-DLPは、YouTube、Bilibili、Twitterなどを含む何千ものサイトをサポートする強力なビデオダウンロードツールです。" echo -e "公式ウェブサイトの住所:https://github.com/yt-dlp/yt-dlp" echo "-------------------------" - echo "ダウンロードされたビデオリスト:" + echo "ダウンロードしたビデオのリスト:" ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(まだありません)" echo "-------------------------" echo "1。インストール2。更新3。アンインストール" @@ -4062,9 +4062,9 @@ yt_menu_pro() { echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" echo "-------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "-------------------------" - read -e -p "オプション番号を入力してください:" choice + read -e -p "オプション番号を入力してください:" choice case $choice in 1) @@ -4091,7 +4091,7 @@ yt_menu_pro() { rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アンインストールが完了しました。任意のキーを押して続行します..." + echo "アンインストールが完了しました。続行するには任意のキーを押してください..." read ;; 5) send_stats "単一のビデオダウンロード" @@ -4131,7 +4131,7 @@ yt_menu_pro() { read -e -p "実行が完了したら、キーを押して続行します..." ;; 8) send_stats "MP3ダウンロード" - read -e -p "ビデオリンクを入力してください:" url + read -e -p "ビデオリンクを入力してください:" url yt-dlp -P "$VIDEO_DIR" -x --audio-format mp3 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4247,7 +4247,7 @@ linux_clean() { apk cache clean echo "システムログを削除してください..." rm -rf /var/log/* - echo "APKキャッシュを削除してください..." + echo "APKキャッシュを削除..." rm -rf /var/cache/apk/* echo "一時ファイルを削除します..." rm -rf /tmp/* @@ -4344,7 +4344,7 @@ while true; do echo " v6: 2400:3200::1 2400:da00::6666" echo "3。DNS構成を手動で編集します" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" Limiting case "$Limiting" in @@ -4448,7 +4448,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" + echo -e "秘密鍵情報が生成されました。必ずコピーして保存してください。として保存できます${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4516,7 +4516,7 @@ clear dd_xitong() { - send_stats "システムを再インストールします" + 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 @@ -4551,7 +4551,7 @@ dd_xitong() { dd_xitong_4() { echo -e "再インストール後の初期ユーザー名:${gl_huang}Administrator${gl_bai}最初のパスワード:${gl_huang}123@@@${gl_bai}初期ポート:${gl_huang}3389${gl_bai}" - echo -e "任意のキーを押して続行します..." + echo -e "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" dd_xitong_bin456789 } @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "Kaliを再インストールします" + send_stats "kaliを再インストールする" dd_xitong_3 bash reinstall.sh kali reboot @@ -4810,7 +4810,7 @@ dd_xitong() { ;; 45) - send_stats "Windows Server 22を再インストールします" + send_stats "Windowsサーバー22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4864,7 +4864,7 @@ bbrv3() { echo "------------------------" echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" sub_choice @@ -4895,7 +4895,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" + echo "XanMod カーネルがアンインストールされました。再起動後に有効になります" server_reboot ;; @@ -4982,7 +4982,7 @@ elrepo_install() { fi # 検出されたオペレーティングシステム情報を印刷します echo "検出されたオペレーティングシステム:$os_name $os_version" - # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする + # システムのバージョンに応じて、対応する ELRepo ウェアハウス構成をインストールします。 if [[ "$os_version" == 8 ]]; then echo "Elrepoリポジトリ構成(バージョン8)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm @@ -4993,7 +4993,7 @@ elrepo_install() { echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "サポートされていないシステムバージョン:$os_version" + echo "サポートされていないシステム バージョン:$os_version" break_end linux_Settings fi @@ -5031,7 +5031,7 @@ elrepo() { dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps elrepo_install - send_stats "Red Hatカーネルを更新します" + send_stats "Red Hat カーネルを更新する" server_reboot ;; @@ -5056,7 +5056,7 @@ elrepo() { echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" - echo "Linuxカーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上する可能性があります。条件が許可され、生産環境を慎重にアップグレードする場合は、試してみることをお勧めします!" + echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" read -e -p "必ず続行しますか? (y/n):" choice @@ -5071,7 +5071,7 @@ elrepo() { echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac fi @@ -5139,12 +5139,12 @@ clamav() { while true; do clear echo "クラマブウイルススキャンツール" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + 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 -e "${gl_lv}1。フルディスクスキャン${gl_bai} ${gl_huang}2.重要なディレクトリをスキャンします${gl_bai} ${gl_kjlan}3. カスタムディレクトリスキャン${gl_bai}" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -5227,7 +5227,7 @@ optimize_high_performance() { } -# イコライゼーションモード最適化関数 +# バランスモード最適化機能 optimize_balanced() { echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" @@ -5301,7 +5301,7 @@ restore_defaults() { 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 @@ -5582,7 +5582,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "システムリサイクルステーション" + send_stats "システムのごみ箱" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5602,7 +5602,7 @@ linux_trash() { echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" echo "------------------------" - echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" + echo "1. ごみ箱を有効にする 2. ごみ箱を閉じる" echo "3。コンテンツを復元4。リサイクルビンをクリアします" echo "------------------------" echo "0。前のメニューに戻ります" @@ -5666,7 +5666,7 @@ create_backup() { echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input - # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリが使用されます。 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップを作成します + # バックアップの作成 echo "バックアップを作成します$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -5718,13 +5718,13 @@ restore_backup() { # 復元するバックアップを選択します read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # バックアップファイルが存在するか確認する if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then echo "バックアップファイルは存在しません!" exit 1 fi - echo "バックアップの回復$BACKUP_NAME..." + echo "バックアップの復元$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then @@ -5745,7 +5745,7 @@ list_backups() { delete_backup() { send_stats "バックアップを削除します" - read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME + read -e -p "削除するバックアップ ファイル名を入力してください:" BACKUP_NAME # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then @@ -5816,7 +5816,7 @@ add_connection() { echo "- ユーザー名:root" echo "- ポート:22" echo "------------------------" - read -e -p "接続名を入力してください:" name + read -e -p "接続名を入力してください:" name read -e -p "IPアドレスを入力してください:" ip read -e -p "ユーザー名(デフォルト:root)を入力してください:" user local user=${user:-root} # 如果用户未输入,则使用默认值 root @@ -5982,13 +5982,13 @@ ssh_manager() { # 利用可能なハードディスクパーティションをリストします list_partitions() { - echo "利用可能なハードディスクパーティション:" + echo "利用可能なハードドライブのパーティション:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } # パーティションをマウントします mount_partition() { - send_stats "パーティションをマウントします" + send_stats "パーティションをマウントする" read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" PARTITION # パーティションが存在するかどうかを確認します @@ -6065,7 +6065,7 @@ format_partition() { fi # ファイルシステムタイプを選択します - echo "ファイルシステムタイプを選択してください:" + echo "ファイル システムのタイプを選択してください:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" @@ -6120,7 +6120,7 @@ disk_manager() { while true; do clear echo "ハードディスクパーティション管理" - echo -e "${gl_huang}この関数は、テスト期間中に内部的にテストされています。生産環境では使用しないでください。${gl_bai}" + echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions echo "------------------------" @@ -6161,7 +6161,7 @@ add_task() { echo "- ローカルディレクトリ: /var /www" echo "- リモートアドレス:user@192.168.1.100" echo "- リモートディレクトリ: /バックアップ /www" - echo "- ポート番号(デフォルト22)" + echo "- ポート番号 (デフォルトは 22)" echo "---------------------------------" read -e -p "タスク名を入力してください:" name read -e -p "ローカルディレクトリを入力してください:" local_path @@ -6227,7 +6227,7 @@ add_task() { install rsync rsync - echo "タスクが節約されました!" + echo "ミッションが保存されました!" } # タスクを削除します @@ -6285,7 +6285,7 @@ run_task() { # 同期の方向に従ってソースとターゲットのパスを調整します if [[ "$direction" == "pull" ]]; then - echo "同期をローカルに引く:$remote:$local_path -> $remote_path" + echo "ローカルへのプルと同期:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else @@ -6328,7 +6328,7 @@ run_task() { echo "1。ネットワーク接続は正常ですか?" echo "2。リモートホストにアクセスできますか?" echo "3。認証情報は正しいですか?" - echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" + echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi } @@ -6390,7 +6390,7 @@ delete_task_schedule() { fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "削除されたタスク番号$numタイミングタスク" + echo "削除されたタスク番号$numスケジュールされたタスク" } @@ -6521,7 +6521,7 @@ linux_info() { 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}$country $city" echo -e "${gl_kjlan}システム時間:${gl_bai}$timezone $current_time" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}ランタイム:${gl_bai}$runtime" @@ -6541,17 +6541,17 @@ linux_tools() { 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}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" + echo -e "${gl_kjlan}3. ${gl_bai}sudo スーパー管理者特権ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live Streamingツールをエンコードする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}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}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}------------------------" @@ -6560,7 +6560,7 @@ linux_tools() { 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}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択を入力してください:" sub_choice @@ -6615,7 +6615,7 @@ linux_tools() { clear install unzip clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" unzip send_stats "unzipをインストールします" ;; @@ -6771,7 +6771,7 @@ linux_tools() { ;; 42) clear - read -e -p "アンインストールされていないツール名(HTOP UFW TMUX CMATRIX)を入力してください。" removename + read -e -p "アンインストールされたツール名 (htop ufw tmux cmatrix) を入力してください:" removename remove $removename send_stats "指定されたソフトウェアをアンインストールします" ;; @@ -6810,7 +6810,7 @@ linux_bbr() { echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) @@ -6898,7 +6898,7 @@ docker_ssh_migration() { declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}バックアップコンテナ:$c${NC}" + echo -e "${GREEN}バックアップコンテナ:$c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" @@ -6913,7 +6913,7 @@ docker_ssh_migration() { # Composeプロジェクトがパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトを作成する[$project_name]バックアップ、複製パッケージをスキップ...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7001,7 +7001,7 @@ docker_ssh_migration() { # Composeプロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}プロジェクトを作成する[$project_name]すでにコンテナが走っています、復元をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトを作成する[$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" continue fi @@ -7010,12 +7010,12 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}プロジェクトを作成する[$project_name]減圧:$original_path${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name]減圧:$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}プロジェクトを作成する[$project_name]復元が完了しました!${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name]復元が完了しました!${NC}" fi done @@ -7073,7 +7073,7 @@ docker_ssh_migration() { docker rm -f "$container" fi - # コンテナを起動します + # コンテナの起動 echo "restoreコマンドを実行します:docker run -d - name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done @@ -7085,7 +7085,7 @@ docker_ssh_migration() { echo -e "${BLUE}/home /dockerの下でファイルを復元します...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home /dockerの下のファイルが復元されました${NC}" + echo -e "${GREEN}/home/docker 下のファイルが復元されました${NC}" else echo -e "${YELLOW}/home /dockerの下のファイルのバックアップは見つかりませんでした、スキップ...${NC}" fi @@ -7177,7 +7177,7 @@ linux_docker() { echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker環境のインストールと更新${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" @@ -7194,8 +7194,8 @@ linux_docker() { 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}19. ${gl_bai}バックアップ/移行/復元Docker環境" - echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールします" + echo -e "${gl_kjlan}19. ${gl_bai}Docker環境のバックアップ/移行/復元" + echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールする" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7227,7 +7227,7 @@ linux_docker() { echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker ボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" @@ -7270,11 +7270,11 @@ linux_docker() { done echo "" - echo "ネットワーク操作" + echo "ネットワーク運用" echo "------------------------" echo "1.ネットワークを作成します" echo "2。インターネットに参加してください" - echo "3。ネットワークを終了します" + echo "3. ネットワークを終了します" echo "4.ネットワークを削除します" echo "------------------------" echo "0。前のメニューに戻ります" @@ -7339,7 +7339,7 @@ linux_docker() { case $sub_choice in 1) - send_stats "新しいボリュームを作成します" + send_stats "新しいボリュームを作成する" read -e -p "新しいボリューム名を設定します:" dockerjuan docker volume create $dockerjuan @@ -7376,7 +7376,7 @@ linux_docker() { ;; 7) clear - send_stats "Dockerクリーニング" + send_stats "Docker のクリーンアップ" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7413,7 +7413,7 @@ linux_docker() { 12) clear - send_stats "Docker V6レベル" + send_stats "Docker v6 閉じる" docker_ipv6_off ;; @@ -7469,13 +7469,13 @@ linux_test() { echo -e "${gl_kjlan}1. ${gl_bai}CHATGPTはステータス検出のロックを解除します" echo -e "${gl_kjlan}2. ${gl_bai}リージョンストリーミングメディアのロック解除テスト" echo -e "${gl_kjlan}3. ${gl_bai}YeahWUストリーミングメディアのロック解除検出" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP 品質チェック スクリプト${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}ネットワーク速度測定" echo -e "${gl_kjlan}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" - echo -e "${gl_kjlan}13. ${gl_bai}SuperSpeed Three-Net速度測定" + echo -e "${gl_kjlan}13. ${gl_bai}超高速トリプルネットワーク速度テスト" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" @@ -7485,16 +7485,16 @@ linux_test() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}ハードウェアパフォーマンステスト" echo -e "${gl_kjlan}21. ${gl_bai}YABSパフォーマンステスト" - echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPUパフォーマンステストスクリプト" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU パフォーマンステストスクリプト" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}包括的なテスト" echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" - echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${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 + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) @@ -7553,10 +7553,10 @@ linux_test() { echo "上海通信:202.96.209.133" echo "上海ユニコム:210.22.97.1" echo "上海モバイル:211.136.112.200" - echo "広州通信:58.60.188.222" + echo "広州電信: 58.60.188.222" echo "広州ユニコム:210.21.196.6" echo "広州モバイル:120.196.165.24" - echo "成都通信:61.139.2.69" + echo "成都電信: 61.139.2.69" echo "成都ユニコム:119.6.6.6" echo "成都モバイル:211.137.96.205" echo "Hunan Telecom:36.111.200.100" @@ -7651,13 +7651,13 @@ linux_Oracle() { 1) clear echo "アクティブスクリプト:CPUが10-20%を占めるメモリは20%を占めています" - read -e -p "必ずインストールしますか? (y/n):" choice + read -e -p "インストールしてもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) install_docker - # デフォルト値を設定します + # デフォルト値を設定する local DEFAULT_CPU_CORE=1 local DEFAULT_CPU_UTIL="10-20" local DEFAULT_MEM_UTIL=20 @@ -7670,7 +7670,7 @@ linux_Oracle() { 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 + read -e -p "メモリ使用率を入力してください [デフォルト:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval @@ -7712,7 +7712,7 @@ linux_Oracle() { case "$choice" in [Yy]) while true; do - read -e -p "再インストールするシステムを選択してください:1。Debian12| 2。Ubuntu20.04:" sys_choice + read -e -p "再インストールするシステムを選択してください: 1. Debian12 | 2.Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7757,7 +7757,7 @@ linux_Oracle() { clear bash <(curl -L -s jhb.ovh/jb/v6.sh) echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + send_stats "IPv6修復" ;; 0) kejilion @@ -7806,7 +7806,7 @@ 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" + echo -e "${gl_lv}環境がインストールされています${gl_bai}サイト:$outputデータベース:$db_output" fi fi @@ -7854,9 +7854,9 @@ linux_ldnmp() { 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}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}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_huang}------------------------${gl_bai}" read -e -p "選択を入力してください:" sub_choice @@ -7890,7 +7890,7 @@ linux_ldnmp() { 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 + wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20250901.zip unzip latest.zip rm latest.zip @@ -7899,7 +7899,7 @@ linux_ldnmp() { ldnmp_web_on echo "データベースアドレス:mysql" - echo "データベース名:$dbname" + echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "テーブルプレフィックス:discuz_" @@ -7978,7 +7978,7 @@ linux_ldnmp() { echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベースプレフィックス:mac_" + echo "データベース接頭辞: mac_" echo "------------------------" echo "インストールが成功した後、バックグラウンドアドレスにログインします" echo "https://$yuming/vip.php" @@ -8013,12 +8013,12 @@ linux_ldnmp() { ldnmp_web_on echo "データベースアドレス:mysql" echo "データベースポート:3306" - echo "データベース名:$dbname" + echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "" echo "Redisアドレス:Redis" - echo "Redisパスワード:デフォルトで記入されていません" + echo "redis パスワード: デフォルトでは入力されていません" echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" @@ -8115,7 +8115,7 @@ linux_ldnmp() { ldnmp_web_on echo "データベースプレフィックス:typecho_" echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "データベース名:$dbname" @@ -8223,7 +8223,7 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}4/6${gl_bai}]指定された拡張機能をインストールします" + echo -e "[${gl_huang}4/6${gl_bai}] 指定された拡張機能をインストールします" echo "-------------" echo "インストールされた拡張機能" docker exec php php -m @@ -8282,7 +8282,7 @@ linux_ldnmp() { echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:$prefix" + echo "テーブルの接頭辞:$prefix" echo "管理者ログイン情報は自分で設定されます" ;; @@ -8297,7 +8297,7 @@ linux_ldnmp() { clear webname="站点重定向" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming read -e -p "ジャンプドメイン名を入力してください:" reverseproxy nginx_install_status @@ -8451,8 +8451,8 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリの下" + read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8576,14 +8576,14 @@ linux_ldnmp() { echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + read -e -p "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 @@ -8602,7 +8602,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "圧縮パッケージは見つかりませんでした。" + echo "圧縮パッケージが見つかりませんでした。" fi ;; @@ -8659,7 +8659,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version + read -e -p "入力してください${ldnmp_pods}バージョン番号 (例: 8.0 8.3 8.4 9.0) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-latest} cd /home/web/ @@ -8710,7 +8710,7 @@ linux_ldnmp() { 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}仕上げる" + echo "更新する${ldnmp_pods}仕上げる" ;; 4) @@ -8729,7 +8729,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "LDNMP環境を完全に更新します" + send_stats "LDNMP環境の完全アップデート" cd /home/web/ docker compose down --rmi all @@ -8815,36 +8815,36 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" - echo -e "${gl_kjlan}5. ${color5}OpenListマルチストアファイルリストプログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" + echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}Onlyofficeオンラインオフィス OFFICE" echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Today スケジュールされたタスク管理フレームワーク" echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" - echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}LobeChatAIチャットアグリゲーションサイト" echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}プロメテウス(ホスト監視)" + echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" - echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMH ホスト Web サイト構築管理パネル" echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" @@ -8863,7 +8863,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" + echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン${gl_kjlan}100. ${color100}同期ポイントツーポイントファイル同期ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AIビデオ生成ツール" + echo -e "${gl_kjlan}101. ${color101}AIビデオ生成ツール${gl_kjlan}102. ${color102}VoceChatマルチプレイヤーオンラインチャットシステム" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" echo -e "${gl_kjlan}------------------------" @@ -9221,7 +9221,7 @@ while true; do add_app_id clear - echo "Poste.ioがインストールされています" + echo "poste.ioがインストールされました" echo "------------------------" echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" @@ -9248,7 +9248,7 @@ while true; do clear echo "Poste.ioがインストールされています" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "次のアドレスを使用して poste.io にアクセスできます。" echo "https://$yuming" echo "" ;; @@ -9259,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" ;; *) @@ -9556,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "サンダープールを構築します" + send_stats "雷のプールを作る" local app_id="19" local docker_name=safeline-mgt @@ -10276,7 +10276,7 @@ while true; do prometheus_install clear ip_address - echo "インストール" + echo "インストール完了" check_docker_app_ip echo "最初のユーザー名とパスワードは次のとおりです" } @@ -10673,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11531,8 +11531,8 @@ while true; do local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" + local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" local app_size="1" docker_app @@ -11634,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11826,7 +11826,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -12140,6 +12140,28 @@ while true; do 102) + local app_id="102" + local docker_name="vocechat-server" + local docker_img="privoce/vocechat-server:latest" + local docker_port=8102 + + docker_rum() { + + docker run -d --restart=always \ + -p ${docker_port}:3000 \ + --name vocechat-server \ + -v /home/docker/vocechat/data:/home/vocechat-server/data \ + privoce/vocechat-server:latest + + } + + local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" + local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; @@ -12235,7 +12257,7 @@ linux_work() { clear send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" - echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" + echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" echo -e "${gl_kjlan}------------------------" @@ -12246,20 +12268,20 @@ linux_work() { echo -e "${gl_kjlan}1. ${gl_bai}ワークスペース番号1" echo -e "${gl_kjlan}2. ${gl_bai}ワークスペースNo. 2" echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" - echo -e "${gl_kjlan}4. ${gl_bai}ワークスペースNo. 4" + echo -e "${gl_kjlan}4. ${gl_bai}作業エリア 4" echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" - echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo. 10" + 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}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択を入力してください:" sub_choice @@ -12433,7 +12455,7 @@ linux_Settings() { 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}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}------------------------" @@ -12504,7 +12526,7 @@ linux_Settings() { if [[ "$py_new_v" == "0" ]]; then - send_stats "スクリプトPy管理" + send_stats "スクリプト PY 管理" break_end linux_Settings fi @@ -12567,7 +12589,7 @@ EOF local VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "スイッチスクリプトPyバージョン" + send_stats "スクリプトPYバージョン切り替え" ;; @@ -12634,7 +12656,7 @@ EOF 9) root_use send_stats "新しいユーザーはルートを無効にします" - read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username + read -e -p "新しいユーザー名を入力してください (終了するには 0 を入力してください):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12665,12 +12687,12 @@ EOF if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; then echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" else - echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" fi echo "" echo "------------------------" - echo "1。IPv4優先度2。IPv6優先度3。IPv6修理ツール" + echo "1. IPv4 が先 2. IPv6 が先 3. IPv6 修復ツール" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -12680,7 +12702,7 @@ EOF 1) grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "IPv4の優先度に切り替えました" + echo "IPv4優先に切り替えました" send_stats "IPv4の優先度に切り替えました" ;; 2) @@ -12739,13 +12761,13 @@ EOF ;; 3) - send_stats "4G仮想メモリが設定されています" + send_stats "4G仮想メモリが設定されました" add_swap 4096 ;; 4) - read -e -p "仮想メモリサイズ(ユニットM)を入力してください:" new_swap + read -e -p "仮想メモリ サイズ (単位 M) を入力してください:" new_swap add_swap "$new_swap" send_stats "カスタム仮想メモリが設定されています" ;; @@ -12826,7 +12848,7 @@ EOF ;; 5) - read -e -p "削除するにはユーザー名を入力してください:" username + read -e -p "削除するユーザー名を入力してください:" username # ユーザーとそのホームディレクトリを削除します userdel -r "$username" ;; @@ -12863,11 +12885,11 @@ EOF done echo "" - echo "ランダムuuid" + echo "ランダムな UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "ランダムuuid$i: $uuid" + echo "ランダムな UUID$i: $uuid" done echo "" @@ -12912,7 +12934,7 @@ EOF echo "アジア" echo "1。中国の上海時間2。中国の香港時間" echo "3。日本の東京時間4。韓国のソウル時間" - echo "5。シンガポール時間6。インドのコルカタ時間" + echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" echo "9。タイのバンコクでの時間" echo "------------------------" @@ -12924,9 +12946,9 @@ EOF echo "アメリカ" echo "21。WesternTime22。東部時間" echo "23。カナダ時間24。メキシコの時間" - echo "25。ブラジル時間26。アルゼンチン時間" + echo "25. ブラジル時間 26. アルゼンチン時間" echo "------------------------" - echo "31。UTCグローバル標準時間" + echo "31. UTC 世界標準時" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -12973,7 +12995,7 @@ EOF 18) root_use - send_stats "ホスト名を変更します" + send_stats "ホスト名の変更" while true; do clear @@ -13030,7 +13052,7 @@ EOF case $choice in 1) - send_stats "中国本土のデフォルトソース" + send_stats "中国本土のデフォルトのソース" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) @@ -13064,16 +13086,16 @@ EOF echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest echo "------------------------" echo "1。毎月のタスク2。毎週のタスク" - echo "3。毎日のタスク4。時間ごとのタスク" + echo "3. 毎日のタスク 4. 時間ごとのタスク" echo "------------------------" - read -e -p "選択を入力してください:" dingshi + read -e -p "選択肢を入力してください:" dingshi case $dingshi in 1) @@ -13089,7 +13111,7 @@ EOF (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute + read -e -p "タスクを実行する時間を入力してください。 (分、0 ~ 60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) @@ -13105,7 +13127,7 @@ EOF ;; 3) crontab -e - send_stats "タイミングタスクを編集します" + send_stats "スケジュールされたタスクを編集する" ;; *) break # 跳出循环,退出菜单 @@ -13124,7 +13146,7 @@ EOF echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" cat /etc/hosts echo "" - echo "動作します" + echo "操作する" echo "------------------------" echo "1.新しい解析2を追加します。解析アドレスを削除します" echo "------------------------" @@ -13134,7 +13156,7 @@ EOF case $host_dns in 1) - read -e -p "新しい解析レコード形式を入力してください:110.25.5.33 Kejilion.pro:" addhost + read -e -p "新しい解析レコード形式を入力してください: 110.25.5.33 kejilion.pro:" addhost echo "$addhost" >> /etc/hosts send_stats "ローカルホストの解析が追加されました" @@ -13157,13 +13179,13 @@ EOF while true; do check_f2b_status - echo -e "SSH防衛プログラム$check_f2b_status" + echo -e "SSH防御プログラム$check_f2b_status" echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "2。SSH傍受記録を表示します" + echo "2. SSH インターセプト記録の表示" echo "3。リアルタイムログ監視" echo "------------------------" echo "9.防衛プログラムをアンインストールします" @@ -13192,7 +13214,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; *) @@ -13213,12 +13235,12 @@ EOF echo "------------------------------------------------" echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" output_status - echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}受け取った合計:${gl_bai}$rx" + echo -e "${gl_kjlan}送信合計:${gl_bai}$tx" - # limiting_shut_down.shファイルが存在するかどうかを確認してください + # Limiting_Shut_down.sh ファイルが存在するかどうかを確認します if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gbの値を取得します + # しきい値_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}" @@ -13295,7 +13317,7 @@ EOF case $host_dns in 1) - send_stats "新しいキーを生成します" + send_stats "新しいキーを生成する" add_sshkey break_end @@ -13328,7 +13350,7 @@ EOF 25) root_use - send_stats "電報警告" + send_stats "電報警報" echo "TG-BOTモニタリングと早期警告機能" echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" echo "------------------------------------------------" @@ -13361,7 +13383,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # 〜/.Profileファイルに追加します + # ~/.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 @@ -13465,13 +13487,13 @@ EOF send_stats "ワンストップチューニング" echo "ワンストップシステムの最適化" 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 "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}" @@ -13500,7 +13522,7 @@ EOF 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 -e "[${gl_lv}OK${gl_bai}】5/10。すべてのポートを開く" echo "------------------------------------------------" bbr_on @@ -13525,7 +13547,7 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10。 DNSアドレスを自動的に最適化します${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}】8/10。 DNSアドレスを自動的に最適化する${gl_huang}${gl_bai}" echo "------------------------------------------------" install_docker @@ -13609,9 +13631,9 @@ EOF 102) clear send_stats "テックライオンスクリプトをアンインストールします" - echo "テックライオンスクリプトをアンインストールします" + echo "Tech Lion スクリプトをアンインストールする" echo "------------------------------------------------" - echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" + echo "kejilion スクリプトは、他の機能に影響を与えることなく完全にアンインストールされます。" read -e -p "必ず続行しますか? (y/n):" choice case "$choice" in @@ -13667,8 +13689,8 @@ linux_file() { echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1.ディレクトリ2を入力します。ディレクトリを作成3。ディレクトリアクセス許可を変更します。4。ディレクトリの名前を変更します" - echo "5.ディレクトリを削除6。前のメニューディレクトリに戻ります" + echo "1. ディレクトリを入力します。 2. ディレクトリを作成します。 3. ディレクトリのアクセス許可を変更します。 4. ディレクトリの名前を変更します。" + echo "5. ディレクトリを削除します。 6. 前のメニュー ディレクトリに戻ります。" echo "------------------------" echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" echo "15.ファイルを削除します" @@ -13694,7 +13716,7 @@ linux_file() { 3) # 修改目录权限 read -e -p "ディレクトリ名を入力してください:" dirname read -e -p "許可を入力してください(755など):" perm - chmod "$perm" "$dirname" && echo "許可が変更されました" || echo "変更に失敗しました" + chmod "$perm" "$dirname" && echo "権限が変更されました" || echo "変更に失敗しました" send_stats "ディレクトリ権限を変更します" ;; 4) # 重命名目录 @@ -13706,7 +13728,7 @@ linux_file() { 5) # 删除目录 read -e -p "削除するには、ディレクトリ名を入力してください。" dirname rm -rf "$dirname" && echo "ディレクトリが削除されました" || echo "削除が失敗しました" - send_stats "ディレクトリを削除します" + send_stats "ディレクトリを削除する" ;; 6) # 返回上一级选单目录 cd .. @@ -13725,14 +13747,14 @@ linux_file() { ;; 13) # 修改文件权限 read -e -p "ファイル名を入力してください:" filename - read -e -p "許可を入力してください(755など):" perm + 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 "名前変更に失敗しました" + mv "$current_name" "$new_name" && echo "ファイル名が変更されました" || echo "名前変更に失敗しました" send_stats "ファイルの名前を変更します" ;; 15) # 删除文件 @@ -13741,7 +13763,7 @@ linux_file() { send_stats "ファイルを削除します" ;; 21) # 压缩文件/目录 - read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name + read -e -p "圧縮するファイル/ディレクトリ名を入力してください:" name install tar tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" send_stats "圧縮ファイル/ディレクトリ" @@ -13774,10 +13796,10 @@ linux_file() { 24) # 复制文件目录 - read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "コピーするファイルまたはディレクトリのパスを入力してください:" src_path if [ ! -e "$src_path" ]; then echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" + send_stats "ファイルまたはディレクトリのコピーに失敗しました: ファイルまたはディレクトリが存在しません" continue fi @@ -13805,7 +13827,7 @@ linux_file() { read -e -p "リモートサーバーIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then echo "エラー:リモートサーバーIPを入力してください。" - send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" + send_stats "ファイル転送に失敗しました: リモート サーバー IP が入力されていません" continue fi @@ -13834,7 +13856,7 @@ EOF if [ $? -eq 0 ]; then echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" - send_stats "ファイル転送に正常に転送します" + send_stats "ファイル転送が成功しました" else echo "ファイル転送に失敗しました。" send_stats "ファイル転送に失敗しました" @@ -13944,11 +13966,11 @@ while true; do ;; 2) send_stats "クラスターサーバーを削除します" - read -e -p "削除する必要があるキーワードを入力してください。" rmserver + read -e -p "削除するキーワードを入力してください:" rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) - send_stats "クラスターサーバーを編集します" + send_stats "クラスターサーバーの編集" install nano nano ~/cluster/servers.py ;; @@ -13964,7 +13986,7 @@ while true; do clear send_stats "クラスターを復元します" echo "Servers.pyをアップロードし、キーを押してアップロードを開始してください!" - echo -e "アップロードしてください${gl_huang}servers.py${gl_bai}にファイル${gl_huang}/root/cluster/${gl_bai}復元を完了してください!" + echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}にファイル${gl_huang}/root/cluster/${gl_bai}復元を完了してください!" break_end ;; @@ -14036,7 +14058,7 @@ echo "------------------------" echo -e "${gl_lan}dmit四半期あたり28ドルUS CN2GIA 1コア2Gメモリ20Gハードドライブ800gトラフィック${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 $ 6.9東京ソフトバンク2コア1Gメモリ20gハードドライブ1Tトラフィック${gl_bai}" +echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?faffid=1355 &? affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}より人気のあるVPSオファー${gl_bai}" @@ -14100,7 +14122,7 @@ while true; do echo "------------------------" echo "0。メインメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case "$choice" in 1) clear @@ -14194,7 +14216,7 @@ read -e -p "選択を入力してください:" choice case $choice in 1) linux_info ;; - 2) clear ; send_stats "システムの更新" ; linux_update ;; + 2) clear ; send_stats "システムアップデート" ; linux_update ;; 3) clear ; send_stats "システムのクリーンアップ" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; @@ -14236,7 +14258,7 @@ echo "クリーンシステムガベージkクリーン| kきれい" echo "システムパネルk dd |を再インストールしますk再インストール" echo "BBR3コントロールパネルK BBR3 | K BBRV3" echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" -echo "仮想メモリkスワップ2048を設定します" +echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" @@ -14250,16 +14272,16 @@ echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" echo "ソフトウェア再起動k再起動sshd | k再起動sshd" echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" -echo "ドメイン名証明書アプリケーションK SSL" +echo "ドメイン名証明書アプリケーション k ssl" echo "ドメイン名証明書の有効期限クエリK SSL PS" echo "Docker Management Plane K Docker" echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" echo "Docker Container Management K Docker PS | K Dockerコンテナ" echo "Docker Image Management K Docker IMG | K Docker画像" -echo "LDNMPサイト管理k Web" +echo "LDNMP サイト管理 k Web" echo "LDNMPキャッシュクリーンアップK Webキャッシュ" echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" -echo "リバースプロキシk fd | k rp | k抗ジェネレーション| k fd xxx.comをインストールする" +echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" echo "ロードバランスkロードバランス| kロードバランシングをインストールします" echo "ファイアウォールパネルk fhq | kファイアウォール" echo "オープンポートK DKDK 8080 | Kオープンポート8080" @@ -14269,7 +14291,7 @@ echo "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" echo "コマンドお気に入りk fav | Kコマンドのお気に入り" echo "アプリ市場管理Kアプリ" echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" -echo "システム情報を表示k情報" +echo "システム情報を表示 k info" } @@ -14353,7 +14375,7 @@ else swap) shift - send_stats "仮想メモリをすばやく設定します" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; @@ -14412,7 +14434,7 @@ else ;; start|启动) shift - send_stats "ソフトウェアスタートアップ" + send_stats "ソフトウェアの起動" start "$@" ;; stop|停止) @@ -14452,7 +14474,7 @@ else shift case $1 in install|安装) - send_stats "Dockerをすばやくインストールします" + send_stats "Dockerを素早くインストールする" install_docker ;; ps|容器) @@ -14460,7 +14482,7 @@ else docker_ps ;; img|镜像) - send_stats "クイックミラー管理" + send_stats "素早い画像管理" docker_image ;; *) @@ -14487,7 +14509,7 @@ else app) shift - send_stats "$@を適用します" + send_stats "申し込む$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index a693df95d..9c65414f3 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.7" +sh_v="4.1.8" gl_hui='\e[37m' @@ -57,8 +57,8 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! -# 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다. +# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -221,10 +221,10 @@ check_disk_space() { if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}힌트:${gl_bai}불충분 한 디스크 공간!" - echo "현재 사용 가능한 공간 : $ ((uvery_space_mb/1024)) g" + echo "현재 사용 가능한 공간: $((available_space_mb/1024))G" echo "최소 수요 공간 :${required_gb}G" echo "설치를 계속할 수 없습니다. 디스크 공간을 청소하고 다시 시도하십시오." - send_stats "불충분 한 디스크 공간" + send_stats "디스크 공간이 부족합니다." break_end kejilion fi @@ -238,7 +238,7 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "패키지 매개 변수는 제공되지 않습니다!" + echo "패키지 매개변수가 제공되지 않았습니다!" return 1 fi @@ -281,7 +281,7 @@ systemctl() { } -# 서비스를 다시 시작하십시오 +# 서비스 다시 시작 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then @@ -311,7 +311,7 @@ stop() { fi } -# 서비스 상태를 확인하십시오 +# 서비스 상태 확인 status() { systemctl status "$1" if [ $? -eq 0 ]; then @@ -427,7 +427,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker 환경 설치 ...${gl_bai}" + 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 @@ -512,10 +512,10 @@ while true; do echo "------------------------" echo "2. 지정된 컨테이너를 시작하십시오. 6. 모든 컨테이너를 시작하십시오" echo "3. 지정된 컨테이너를 중지하십시오. 7. 모든 컨테이너를 중지하십시오" - echo "4. 지정된 컨테이너를 삭제합니다. 8. 모든 컨테이너를 삭제하십시오" + echo "4. 지정된 컨테이너 삭제 8. 모든 컨테이너 삭제" echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" echo "------------------------" - echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" + echo "11. 지정된 컨테이너를 입력합니다. 12. 컨테이너 로그를 봅니다." echo "13. 컨테이너 네트워크보기 14. 컨테이너 점유보기" echo "------------------------" echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." @@ -977,7 +977,7 @@ block_ip() { # 차단 규칙을 추가하십시오 if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then iptables -I INPUT 1 -s $ip -j DROP - echo "IP 차단$ip" + echo "IP가 차단됨$ip" fi done @@ -1042,7 +1042,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "오류: 다운로드$country_codeIP 영역 파일이 실패했습니다" continue fi @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "오류: 다운로드$country_codeIP 영역 파일이 실패했습니다" continue fi @@ -1118,13 +1118,13 @@ iptables_panel() { echo "" echo "방화벽 관리" echo "------------------------" - echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." + echo "1. 지정 포트 열기 2. 지정 포트 닫기" echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" echo "7. 지정된 IP를 지우십시오" echo "------------------------" - echo "11. 핑 허용 12. 핑을 비활성화하십시오" + echo "11. PING 허용 12. PING 비활성화" echo "------------------------" echo "13. DDOS 방어 시작 14. DDOS 방어를 끄십시오" echo "------------------------" @@ -1141,12 +1141,12 @@ iptables_panel() { send_stats "지정된 포트를 엽니 다" ;; 2) - read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port + 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 @@ -1159,7 +1159,7 @@ iptables_panel() { 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 "모든 포트를 엽니 다" + send_stats "모든 포트 열기" ;; 4) # 모든 포트를 닫습니다 @@ -1204,7 +1204,7 @@ iptables_panel() { 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 @@ -1321,7 +1321,7 @@ ldnmp_v() { 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 버전을 얻으십시오 + # 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}" @@ -1347,7 +1347,7 @@ install_ldnmp_conf() { 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 파일로 교체하십시오 + # 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 @@ -1522,13 +1522,13 @@ certs_status() { send_stats "도메인 이름 인증서에 대한 성공적인 응용 프로그램" else send_stats "도메인 이름 인증서 신청에 실패했습니다" - echo -e "${gl_hong}알아채다:${gl_bai}인증서 응용 프로그램이 실패했습니다. 가능한 이유를 확인하고 다시 시도하십시오." + echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." echo -e "1. 도메인 이름 철자 오류 ➠ 도메인 이름이 올바르게 입력되었는지 확인하십시오." echo -e "2. DNS 해상도 문제 ➠ 도메인 이름 이이 서버 IP로 올바르게 해결되었는지 확인합니다." - echo -e "3. 네트워크 구성 문제 ➠ CloudFlare Warp 및 기타 가상 네트워크를 사용하는 경우 임시로 종료하십시오." + echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한 ➠ 검증에 액세스 할 수 있도록 포트 80/443이 열려 있는지 확인" echo -e "5. 응용 프로그램 수는 한계를 초과합니다. ➠ 암호화하자는 주간 제한 (5 배/도메인 이름/주)을 갖습니다." - echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." + echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." break_end clear echo "다시 배포를 시도하십시오$webname" @@ -1552,7 +1552,7 @@ fi add_yuming() { ip_address echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming + read -e -p "귀하의 IP 또는 확인된 도메인 이름을 입력하십시오:" yuming } @@ -1657,12 +1657,12 @@ cf_purge_cache() { # 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 "CF 사용자 이름을 입력하세요:" EMAIL read -e -p "Zone_ID를 입력하십시오 (공백으로 여러 차례 분리) :" -a ZONE_IDS mkdir -p /home/web/config/ @@ -1716,7 +1716,7 @@ web_del() { 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 @@ -2003,7 +2003,7 @@ web_security() { echo "31. WAF 32를 켜십시오. WAF를 끄십시오" echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 방어 프로그램 제거" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -2107,7 +2107,7 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlare 모드는 CF 배경, Site-Security-Events에서 인터셉트 레코드를 보도록 구성됩니다." + echo "Cloudflare 모드가 구성되었으며, 차단 기록은 cf 백그라운드, site-security-events에서 볼 수 있습니다." ;; 22) @@ -2182,7 +2182,7 @@ CONFIG_FILE="/home/web/nginx.conf" # 현재 Worker_Processes 설정 값을 얻으십시오 current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 값에 따라 모드 정보를 설정합니다 +# 값에 따라 모드 정보 설정 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2212,7 +2212,7 @@ check_nginx_compression() { br_status="" fi - # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 + # gzip이 활성화되어 있고 주석 처리가 해제되어 있는지 확인하세요. if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2575,7 +2575,7 @@ clear_container_rules() { fi - echo "IP+포트는 서비스에 액세스 할 수있었습니다" + echo "IP+포트로 서비스 접속이 허용되었습니다" save_iptables_rules } @@ -2626,12 +2626,12 @@ block_host_port() { 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 @@ -2649,7 +2649,7 @@ clear_host_port_rules() { if [[ -z "$port" || -z "$allowed_ip" ]]; then echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." - echo "사용법 : CLEAR_HOST_PORT_RULES <포트 번호> <승인 IP>" + echo "사용법:clear_host_port_rules <포트 번호> <허용 IP>" return 1 fi @@ -2867,7 +2867,7 @@ docker_app_plus() { echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) setup_docker_dir @@ -2910,7 +2910,7 @@ docker_app_plus() { clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IP 액세스를 차단하십시오${docker_name}" + send_stats "IP 접근 차단${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -3138,7 +3138,7 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx 환경을 설치하십시오" +send_stats "nginx 환경 설치" root_use clear echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" @@ -3207,7 +3207,7 @@ ldnmp_wp() { webname="WordPress" yuming="${1:-}" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { fi if [ -z "$reverseproxy_port" ]; then - read -e -p "공간으로 분리 된 여러 반세대 IP+ 포트를 입력하십시오 (예 : 127.0.0.1:3000 127.0.1:3002) :" reverseproxy_port + read -e -p "여러 개의 세대 방지 IP+포트를 공백으로 구분하여 입력하세요(예: 127.0.0.1:3000 127.0.0.1:3002)." reverseproxy_port fi nginx_install_status @@ -3386,7 +3386,7 @@ ldnmp_web_status() { case $sub_choice in 1) send_stats "도메인 이름 인증서를 신청하십시오" - read -e -p "도메인 이름을 입력하십시오 :" yuming + 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 @@ -3442,8 +3442,8 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "관련 사이트를 만듭니다" - echo -e "액세스 용 기존 사이트의 새 도메인 이름을 연결하십시오." + send_stats "연결된 사이트 만들기" + echo -e "액세스하려면 새 도메인 이름을 기존 사이트에 연결하세요." read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming read -e -p "새 도메인 이름을 입력하십시오 :" yuming install_certbot @@ -3464,12 +3464,12 @@ ldnmp_web_status() { break_end ;; 6) - send_stats "오류 로그를 봅니다" + send_stats "오류 로그 보기" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "글로벌 구성 편집" + send_stats "전역 구성 편집" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 출력 생성 정보 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개 변수" @@ -3662,12 +3662,12 @@ EOF } add_forwarding_service() { - send_stats "FRP 인트라넷 서비스를 추가하십시오" + send_stats "FRP 인트라넷 서비스 추가" # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 read -e -p "서비스 이름을 입력하십시오 :" service_name read -e -p "전달 유형 (TCP/UDP)을 입력하십시오 [기본 TCP 입력] :" service_type local service_type=${service_type:-tcp} - read -e -p "인트라넷 IP를 입력하십시오 [기본값 127.0.0.1 입력] : :" local_ip + read -e -p "인트라넷 IP를 입력하십시오. [Enter를 누르면 기본값은 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 @@ -3695,9 +3695,9 @@ EOF delete_forwarding_service() { send_stats "FRP 인트라넷 서비스를 삭제하십시오" - # 삭제 해야하는 서비스 이름을 입력하라는 메시지 + # 삭제해야 하는 서비스 이름을 입력하라는 메시지를 사용자에게 표시합니다. read -e -p "삭제 해야하는 서비스 이름을 입력하십시오." service_name - # SED를 사용하여 서비스 및 관련 구성을 삭제하십시오. + # sed를 사용하여 서비스 및 관련 구성 삭제 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml echo "제공하다$service_namefrpc.toml에서 성공적으로 삭제되었습니다" @@ -3739,7 +3739,7 @@ list_forwarding_services() { type } - # 현재 서비스 이름을 업데이트하십시오 + # 현재 서비스 이름 업데이트 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 @@ -3804,7 +3804,7 @@ generate_access_urls() { fi done - # 유효한 포트가있을 때만 제목과 콘텐츠 표시 + # 유효한 포트가 있는 경우에만 제목과 내용 표시 if [ "$has_valid_ports" = true ]; then echo "FRP 서비스 외부 액세스 주소 :" @@ -3861,7 +3861,7 @@ frps_panel() { check_docker_image_update $docker_name echo -e "FRP 서버$check_frp $update_status" echo "FRP 인트라넷 침투 서비스 환경을 구축하여 인터넷에 공개 IP없이 장치를 노출시킵니다." - echo "공식 웹 사이트 소개 : https://github.com/fatedier/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 @@ -3929,7 +3929,7 @@ frps_panel() { 8) send_stats "IP 액세스를 차단하십시오" - echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단할 수 있습니다." + echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단하십시오." read -e -p "차단 해야하는 포트를 입력하십시오." frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4079,11 +4079,11 @@ yt_menu_pro() { read ;; 2) send_stats "yt-dlp 업데이트 ..." - echo "yt-dlp 업데이트 ..." + echo "yt-dlp 업데이트 중..." yt-dlp -U add_app_id - echo "업데이트가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "업데이트가 완료되었습니다. 계속하려면 아무 키나 누르세요..." read ;; 3) send_stats "yt-dlp 제거 ..." @@ -4110,7 +4110,7 @@ yt_menu_pro() { echo -e "# 여러 비디오 링크 주소를 입력하십시오 \ n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "이제 배치 다운로드를 시작하십시오 ..." + echo "지금 일괄 다운로드를 시작하세요..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4118,7 +4118,7 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "배치 다운로드가 완료되었습니다. 키를 눌러 계속하십시오 ..." ;; + read -e -p "일괄 다운로드가 완료되었습니다. 계속하려면 아무 키나 누르세요..." ;; 7) send_stats "맞춤형 비디오 다운로드" read -e -p "전체 YT-DLP 매개 변수를 입력하십시오 (YT-DLP 제외) :" custom @@ -4187,7 +4187,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" + echo -e "${gl_huang}시스템 업데이트 진행 중...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4275,7 +4275,7 @@ linux_clean() { elif command -v pkg &>/dev/null; then echo "사용하지 않는 의존성 정리 ..." pkg autoremove -y - echo "패키지 관리자 캐시 청소 ..." + echo "패키지 관리자 캐시 정리..." pkg clean -y echo "시스템 로그 삭제 ..." rm -rf /var/log/* @@ -4392,7 +4392,7 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthentication이 발견되면 예로 설정하십시오 + # 발견된 경우 PasswordAuthentication이 yes로 설정되어 있습니다. 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" @@ -4527,7 +4527,7 @@ dd_xitong() { } dd_xitong_1() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}root${gl_bai}초기 비밀번호 :${gl_huang}LeitboGi0ro${gl_bai}초기 포트 :${gl_huang}22${gl_bai}" + 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 @@ -4550,7 +4550,7 @@ dd_xitong() { } dd_xitong_4() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}Administrator${gl_bai}초기 비밀번호 :${gl_huang}123@@@${gl_bai}초기 포트 :${gl_huang}3389${gl_bai}" + 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 @@ -4682,7 +4682,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10을 다시 설치하십시오" + send_stats "oracle10 재설치" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4706,7 +4706,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41을 다시 설치하십시오" + send_stats "fedora41 재설치" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "Windows Server 19를 다시 설치하십시오" + send_stats "윈도우 서버 19 재설치" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot @@ -4843,7 +4843,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3 관리" + send_stats "bbrv3 관리" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4909,7 +4909,7 @@ bbrv3() { clear echo "BBR3 가속도를 설정하십시오" - echo "비디오 소개 : https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "데비안/우분투 만 지원합니다" echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." @@ -4949,7 +4949,7 @@ bbrv3() { bbr_on - echo "Xanmod 커널이 설치되고 BBR3이 성공적으로 활성화됩니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4959,7 +4959,7 @@ bbrv3() { echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac fi @@ -5200,7 +5200,7 @@ optimize_high_performance() { 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}" + 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 @@ -5229,7 +5229,7 @@ optimize_high_performance() { # 이퀄라이제이션 모드 최적화 기능 optimize_balanced() { - echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" + echo -e "${gl_lv}이퀄라이제이션 모드로 전환...${gl_bai}" echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 32768 @@ -5241,7 +5241,7 @@ optimize_balanced() { 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}" + 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 @@ -5310,7 +5310,7 @@ restore_defaults() { -# 웹 사이트 구축 최적화 기능 +# 웹사이트 구축 최적화 기능 optimize_web_server() { echo -e "${gl_lv}웹 사이트 구축 최적화 모드로 전환하십시오 ...${gl_bai}" @@ -5343,9 +5343,9 @@ optimize_web_server() { 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 밸런싱을 비활성화합니다 + # NUMA 밸런싱 비활성화 sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5360,7 +5360,7 @@ Kernel_optimize() { echo "Linux 시스템에서 커널 매개 변수의 최적화" echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" echo "------------------------------------------------" - echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." + echo "다양한 시스템 매개변수 조정 모드를 제공하며 사용자는 자신의 사용 시나리오에 따라 전환하도록 선택할 수 있습니다." echo -e "${gl_huang}힌트:${gl_bai}생산 환경에서주의해서 사용하십시오!" echo "--------------------" echo "1. 고성능 최적화 모드 : 시스템 성능을 극대화하고 파일 설명기, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." @@ -5452,7 +5452,7 @@ update_locale() { break_end ;; *) - echo "지원되지 않는 시스템 :$ID" + echo "지원되지 않는 시스템:$ID" break_end ;; esac @@ -5489,7 +5489,7 @@ while true; do ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "전통적인 중국어로 전환하십시오" + send_stats "중국어 번체로 전환" ;; *) break @@ -5656,7 +5656,7 @@ bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/ # 백업을 만듭니다 create_backup() { - send_stats "백업을 만듭니다" + send_stats "백업 만들기" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # 사용자에게 백업 디렉토리를 입력하라는 메시지를 표시하십시오 @@ -5714,7 +5714,7 @@ create_backup() { # 백업을 복원하십시오 restore_backup() { - send_stats "백업을 복원하십시오" + send_stats "백업 복원" # 복원하려는 백업을 선택하십시오 read -e -p "복원하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME @@ -5728,14 +5728,14 @@ restore_backup() { tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "백업 및 복원을 성공적으로 복원하십시오!" + echo "백업 및 복원 성공!" else - echo "백업 복구 실패!" + echo "백업 복원에 실패했습니다!" exit 1 fi } -# 백업을 나열합니다 +# 백업 나열 list_backups() { echo "사용 가능한 백업 :" ls -1 "$BACKUP_DIR" @@ -5817,7 +5817,7 @@ add_connection() { echo "- 포트 : 22" echo "------------------------" read -e -p "연결 이름을 입력하십시오 :" name - read -e -p "IP 주소를 입력하십시오 :" ip + read -e -p "请输入IP地址: " ip read -e -p "사용자 이름 (기본값 : 루트)을 입력하십시오 :" user local user=${user:-root} # 如果用户未输入,则使用默认值 root read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port @@ -5867,7 +5867,7 @@ add_connection() { -# 연결을 삭제하십시오 +# 연결 삭제 delete_connection() { send_stats "연결을 삭제하십시오" read -e -p "삭제하려면 연결 번호를 입력하십시오." num @@ -5924,8 +5924,8 @@ use_connection() { sshpass -p "$password_or_key" ssh -o StrictHostKeyChecking=no -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then echo "연결 실패! 다음을 확인하십시오." - echo "1. 사용자 이름과 비밀번호가 올바른지 여부." - echo "2. 대상 서버가 암호 로그인을 허용하는지 여부." + echo "1. 사용자 이름과 비밀번호가 정확합니까?" + echo "2. 대상 서버에서 비밀번호 로그인을 허용하는지 여부." echo "3. 대상 서버의 SSH 서비스가 정상적으로 실행되는지 여부." fi fi @@ -6049,7 +6049,7 @@ list_mounted_partitions() { # 형식 파티션 format_partition() { - send_stats "형식 파티션" + send_stats "파티션 포맷" read -e -p "파티션 이름을 형식 (예 : SDA1)에 입력하십시오." PARTITION # 파티션이 있는지 확인하십시오 @@ -6129,7 +6129,7 @@ disk_manager() { echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6161,13 +6161,13 @@ add_task() { echo "- 로컬 디렉토리 : /var /www" echo "- 원격 주소 : user@192.168.1.100" echo "- 원격 디렉토리 : /백업 /www" - echo "- 포트 번호 (기본 22)" + 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 + read -e -p "SSH 포트(기본값 22)를 입력하세요." port port=${port:-22} echo "인증 방법을 선택하십시오 :" @@ -6177,7 +6177,7 @@ add_task() { case $auth_choice in 1) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "비밀번호를 입력하세요:" password_or_key echo # 换行 auth_method="password" ;; @@ -6189,7 +6189,7 @@ add_task() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # 첫 번째 줄이거나 키 컨텐츠가 입력 된 경우 계속 추가하십시오. + # 첫 번째 줄이거나 이미 핵심 내용을 입력하기 시작했다면 계속해서 추가하세요. if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi @@ -6299,7 +6299,7 @@ run_task() { if [[ "$auth_method" == "password" ]]; then if ! command -v sshpass &> /dev/null; then - echo "오류 : Sshpass가 설치되지 않았습니다. 먼저 Sshpass를 설치하십시오." + echo "오류: sshpass가 설치되지 않았습니다. 먼저 sshpass를 설치하십시오." echo "설치 방법 :" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" @@ -6339,14 +6339,14 @@ schedule_task() { read -e -p "정기적으로 동기화 할 작업 번호를 입력하십시오." num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "오류: 유효한 작업 번호를 입력하십시오!" return fi echo "시간이 정한 실행 간격을 선택하십시오." echo "1) 한 시간에 한 번 실행하십시오" - echo "2) 하루에 한 번 수행하십시오" - echo "3) 일주일에 한 번 실행하십시오" + echo "2) 하루에 한 번 실행" + echo "3) 일주일에 한 번 실행" read -e -p "옵션을 입력하십시오 (1/2/3) :" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 @@ -6372,7 +6372,7 @@ schedule_task() { echo "타이밍 작업이 만들어졌습니다.$cron_job" } -# 예정된 작업을 봅니다 +# 예약된 작업 보기 view_tasks() { echo "현재 타이밍 작업 :" echo "---------------------------------" @@ -6503,7 +6503,7 @@ linux_info() { 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}$mem_info" echo -e "${gl_kjlan}가상 메모리 :${gl_bai}$swap_info" echo -e "${gl_kjlan}하드 디스크 직업 :${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" @@ -6543,8 +6543,8 @@ linux_tools() { 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}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}소사이어티 커뮤니케이션 연결 도구" 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}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 글로벌 검색 도구" @@ -6552,7 +6552,7 @@ linux_tools() { 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}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}" @@ -6713,14 +6713,14 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrix를 설치하십시오" + send_stats "cmatrix 설치" ;; 22) clear install sl clear sl - send_stats "SL을 설치하십시오" + send_stats "sl 설치" ;; 26) clear @@ -6741,7 +6741,7 @@ linux_tools() { install ninvaders clear ninvaders - send_stats "Ninvaders를 설치하십시오" + send_stats "닌베이더 설치" ;; 31) @@ -6773,7 +6773,7 @@ linux_tools() { clear read -e -p "제거되지 않은 도구 이름 (HTOP UFW TMUX CMATRIX)을 입력하십시오." removename remove $removename - send_stats "지정된 소프트웨어를 제거하십시오" + send_stats "지정된 소프트웨어 제거" ;; 0) @@ -6903,7 +6903,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}감지$c예, Docker-compose 컨테이너${NC}" + echo -e "${BLUE}감지됨$c예, Docker-compose 컨테이너${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -6913,7 +6913,7 @@ docker_ssh_migration() { # Compose 프로젝트가 포장 된 경우 건너 뛰십시오 if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}작곡 프로젝트 [$project_name] 백업, 중복 포장을 건너 뛰십시오 ...${NC}" + echo -e "${YELLOW}작곡 프로젝트 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" continue fi @@ -6989,7 +6989,7 @@ docker_ssh_migration() { install tar jq gzip install_docker - # ----------------------------- + # --------- Compose 프로젝트 복원 우선순위 지정 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then @@ -6998,10 +6998,10 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path - # Compose 프로젝트 용 컨테이너가 이미 실행 중인지 확인하십시오. + # Compose 프로젝트의 컨테이너가 이미 실행 중인지 확인하세요. running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}작곡 프로젝트 [$project_name] 이미 컨테이너가 실행 중입니다. 스킵 복원 ...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 컨테이너가 실행 중입니다. 스킵 복원 ...${NC}" continue fi @@ -7080,7 +7080,7 @@ docker_ssh_migration() { [[ "$has_container" == false ]] && echo -e "${YELLOW}일반 컨테이너에 대한 백업 정보는 발견되지 않았습니다${NC}" - # /home /docker에서 파일을 복원하십시오 + # /home/docker 아래의 파일 복원 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home /docker에서 파일을 복원 ...${NC}" mkdir -p /home/docker @@ -7142,7 +7142,7 @@ docker_ssh_migration() { list_backups echo -e "" echo "------------------------" - echo -e "1. Docker 프로젝트를 백업하십시오" + echo -e "1. 도커 프로젝트 백업" echo -e "2. Docker 프로젝트를 마이그레이션합니다" echo -e "3. Docker 프로젝트를 복원하십시오" echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" @@ -7186,16 +7186,16 @@ linux_docker() { 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}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}12. ${gl_bai}Docker-ipv6 액세스 끄기" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}19. ${gl_bai}백업/마이그레이션/복원 Docker 환경" - echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경을 제거하십시오" + echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경 제거" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7227,7 +7227,7 @@ linux_docker() { echo -e "도커 컨테이너 :${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" + echo -e "Docker 볼륨:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" echo -e "도커 네트워크 :${gl_lv}$network_count${gl_bai}" @@ -7283,7 +7283,7 @@ linux_docker() { case $sub_choice in 1) - send_stats "네트워크를 만듭니다" + send_stats "네트워크 생성" read -e -p "새 네트워크 이름 설정 :" dockernetwork docker network create $dockernetwork ;; @@ -7477,9 +7477,9 @@ linux_test() { echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 IP 백홀 테스트 스크립트를 지정합니다." echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC 다기능 속도 테스트 스크립트" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc 다기능 속도 테스트 스크립트" echo -e "${gl_kjlan}18. ${gl_bai}Netquality Network 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" @@ -7509,7 +7509,7 @@ linux_test() { ;; 3) clear - send_stats "YEAHWU 스트리밍 미디어 잠금 해제 탐지" + send_stats "예우 스트리밍 미디어 잠금 해제 감지" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; @@ -7552,7 +7552,7 @@ linux_test() { echo "베이징 모바일 : 221.179.155.161" echo "상하이 통신 : 202.96.209.133" echo "상하이 유니폼 : 210.22.97.1" - echo "상하이 모바일 : 211.136.112.200" + echo "상하이 모바일: 211.136.112.200" echo "광저우 통신 : 58.60.188.222" echo "광저우 유니폼 : 210.21.196.6" echo "광저우 모바일 : 120.196.165.24" @@ -7699,12 +7699,12 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" + send_stats "Oracle Cloud 제거 활성 스크립트" ;; 3) clear - echo "시스템을 다시 설치하십시오" + echo "시스템 재설치" echo "--------------------------------" echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." read -e -p "계속할거야? (Y/N) :" choice @@ -7838,13 +7838,13 @@ linux_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}WordPress를 설치하십시오${gl_huang}★${gl_bai}" + 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}Discuz 포럼을 설치하십시오${gl_huang}4. ${gl_bai}Kadao 클라우드 데스크탑을 설치하십시오" echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" echo -e "${gl_huang}7. ${gl_bai}Flarum Forum 웹 사이트를 설치하십시오${gl_huang}8. ${gl_bai}Typecho Lightweight 블로그 웹 사이트를 설치하십시오" 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}21. ${gl_bai}nginx만 설치하세요${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}사이트 리디렉션" echo -e "${gl_huang}23. ${gl_bai}사이트 리버스 프록시 -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}AI 페인팅 프롬프트 워드 생성기를 설치하십시오${gl_huang}28. ${gl_bai}사이트 리버스 프록시로드 밸런싱" @@ -7890,7 +7890,7 @@ linux_ldnmp() { 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 + wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20250901.zip unzip latest.zip rm latest.zip @@ -7944,7 +7944,7 @@ linux_ldnmp() { 5) clear - # Apple CMS + # AppleCMS webname="苹果CMS" send_stats "설치하다$webname" echo "배포를 시작하십시오$webname" @@ -7978,7 +7978,7 @@ linux_ldnmp() { echo "데이터베이스 이름 :$dbname" echo "사용자 이름 :$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 접두사 : MAC_" + echo "데이터베이스 접두사: mac_" echo "------------------------" echo "설치가 성공한 후 배경 주소에 로그인하십시오." echo "https://$yuming/vip.php" @@ -8011,7 +8011,7 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 주소: mysql" echo "데이터베이스 포트 : 3306" echo "데이터베이스 이름 :$dbname" echo "사용자 이름 :$dbuse" @@ -8182,7 +8182,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드하십시오" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리에서" read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download if [ -n "$url_download" ]; then @@ -8451,7 +8451,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드를 업로드하십시오" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리에서" read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download if [ -n "$url_download" ]; then @@ -8462,7 +8462,7 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html이있는 경로" + 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 {} @@ -8583,7 +8583,7 @@ linux_ldnmp() { linux_ldnmp fi - # 사용자가 파일 이름을 입력하지 않으면 최신 압축 패키지를 사용하십시오. + # 사용자가 파일명을 입력하지 않으면 최신 압축 패키지가 사용됩니다. if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8825,29 +8825,29 @@ while true; do echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" + echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}UptimeKuma 모니터링 도구" echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}Stirlingpdf 도구 컬렉션${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF 도구 모음${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" - echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}Websh 웹 버전 SSH 연결 도구" + echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}webssh 웹 버전 SSH 연결 도구" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" - echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdesk 원격 책상 (릴레이)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk 원격 데스크톱(릴레이)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" - echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹 사이트 빌딩 관리 패널" + echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹사이트 구축 관리 패널" echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}점프 서버 오픈 소스 요새 기계" + echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}JumpServer 오픈 소스 요새 머신" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" @@ -8858,12 +8858,12 @@ while true; do echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" - echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" + echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" - echo -e "${gl_kjlan}85. ${color85}Immich 사진 비디오 관리자${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" + echo -e "${gl_kjlan}85. ${color85}이미치 픽처 비디오 매니저${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" echo -e "${gl_kjlan}89. ${color89}filecodebox 파일 Express${gl_kjlan}90. ${color90}매트릭스 분산 채팅 프로토콜" echo -e "${gl_kjlan}------------------------" @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}동기화 지점 간 파일 동기화 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI 비디오 생성 도구" + echo -e "${gl_kjlan}101. ${color101}AI 비디오 생성 도구${gl_kjlan}102. ${color102}vecechat 멀티 플레이어 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" echo -e "${gl_kjlan}------------------------" @@ -9032,7 +9032,7 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 이름 설정:" admin read -e -p "로그인 사용자 비밀번호 설정 :" admin_password docker run -d \ --name=webtop-ubuntu \ @@ -9075,7 +9075,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezha 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9157,7 +9157,7 @@ while true; do clear echo -e "우체국 서비스$check_docker $update_status" echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" echo "포트 감지" @@ -9166,7 +9166,7 @@ while true; do 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}" + echo -e "${gl_hong}포트$port현재는 이용할 수 없습니다${gl_bai}" fi echo "" @@ -9221,7 +9221,7 @@ while true; do add_app_id clear - echo "Poste.io가 설치되었습니다" + echo "poste.io가 설치되었습니다" echo "------------------------" echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." echo "https://$yuming" @@ -9313,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9600,7 +9600,7 @@ while true; do add_app_id clear - echo "Thunder Pool WAF 패널이 업데이트되었습니다" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -10278,7 +10278,7 @@ while true; do ip_address echo "설치" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10518,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11531,8 +11531,8 @@ while true; do local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" + local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" local app_size="1" docker_app @@ -11568,7 +11568,7 @@ while true; do --restart=always \ matrixdotorg/synapse:latest - echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." + echo "초기 사용자 또는 관리자를 생성합니다. 다음 사용자 이름과 비밀번호를 설정하고 관리자인지 여부를 설정하세요." docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11758,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11772,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -12140,6 +12140,28 @@ while true; do 102) + local app_id="102" + local docker_name="vocechat-server" + local docker_img="privoce/vocechat-server:latest" + local docker_port=8102 + + docker_rum() { + + docker run -d --restart=always \ + -p ${docker_port}:3000 \ + --name vocechat-server \ + -v /home/docker/vocechat/data:/home/vocechat-server/data \ + privoce/vocechat-server:latest + + } + + local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" + local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; @@ -12173,7 +12195,7 @@ while true; do scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "파일은 원격 서버/루트 디렉토리로 전송되었습니다." else - echo "전송할 파일은 찾을 수 없었습니다." + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -12206,7 +12228,7 @@ while true; do fi if [ -n "$filename" ]; then - echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + echo -e "${gl_huang}압축 해제 중$filename ...${gl_bai}" cd / && tar -xzf "$filename" echo "응용 프로그램 데이터가 복원되었습니다. 지정된 응용 프로그램 메뉴를 수동으로 입력하고 응용 프로그램을 업데이트하여 응용 프로그램을 복원하십시오." else @@ -12245,9 +12267,9 @@ linux_work() { 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}3. ${gl_bai}작업 영역 3" echo -e "${gl_kjlan}4. ${gl_bai}작업 공간 No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" + echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 5번" echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 번호 7" echo -e "${gl_kjlan}8. ${gl_bai}작업 공간 번호 8" @@ -12269,7 +12291,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12359,7 +12381,7 @@ linux_work() { 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 + 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 ;; @@ -12375,7 +12397,7 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME + read -e -p "1001 kj001 work1과 같이 생성하거나 입력한 작업공간의 이름을 입력하세요." SESSION_NAME tmux_run send_stats "사용자 정의 작업 공간" ;; @@ -12425,20 +12447,20 @@ linux_Settings() { # Send_stats "시스템 도구" echo -e "시스템 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}스크립트 스타트 업 단축키 키를 설정하십시오${gl_kjlan}2. ${gl_bai}로그인 암호를 수정하십시오" + echo -e "${gl_kjlan}1. ${gl_bai}스크립트 스타트 업 단축키 키를 설정하십시오${gl_kjlan}2. ${gl_bai}로그인 비밀번호 변경" echo -e "${gl_kjlan}3. ${gl_bai}루트 암호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python을 설치하십시오" 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}7. ${gl_bai}DNS 주소 최적화${gl_kjlan}8. ${gl_bai}원 클릭 복직 시스템${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}9. ${gl_bai}루트 계정을 비활성화하여 새 계정을 생성하십시오${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}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}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}23. ${gl_bai}현재 한도의 자동 종료${gl_kjlan}24. ${gl_bai}ROOT 개인 키 로그인 모드" echo -e "${gl_kjlan}25. ${gl_bai}TG-BOT 시스템 모니터링 및 조기 경고${gl_kjlan}26. ${gl_bai}OpenSsh 고위험 취약점을 수정하십시오" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}바이러스 스캐닝 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" @@ -12450,12 +12472,12 @@ linux_Settings() { echo -e "${gl_kjlan}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" 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}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 + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) @@ -12537,7 +12559,7 @@ linux_Settings() { 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 "알 수없는 패키지 관리자!" + echo "알 수 없는 패키지 관리자입니다!" return fi @@ -12566,7 +12588,7 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + echo -e "현재 Python 버전 번호:${gl_huang}$VERSION${gl_bai}" send_stats "스크립트 Py 버전을 스위치하십시오" ;; @@ -12608,8 +12630,8 @@ EOF send_stats "SSH 포트 수정을 종료하십시오" break else - echo "포트 번호는 유효하지 않으며 1에서 65535 사이의 숫자를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "포트 번호가 잘못되었습니다. 1~65535 사이의 숫자를 입력하세요." + send_stats "잘못된 SSH 포트가 입력되었습니다." break_end fi else @@ -12778,7 +12800,7 @@ EOF echo "------------------------" echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." echo "------------------------" - echo "5. 계정을 삭제하십시오" + echo "5. 계정 삭제" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -12814,7 +12836,7 @@ EOF ;; 3) read -e -p "사용자 이름을 입력하십시오 :" username - # 새로운 사용자에게 허가를 부여하십시오 + # 새 사용자에게 sudo 권한 부여 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12827,7 +12849,7 @@ EOF ;; 5) read -e -p "삭제하려면 사용자 이름을 입력하십시오." username - # 사용자와 홈 디렉토리를 삭제하십시오 + # 사용자 및 해당 홈 디렉터리 삭제 userdel -r "$username" ;; @@ -12849,7 +12871,7 @@ EOF done echo "" - 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") @@ -12891,7 +12913,7 @@ EOF 15) root_use - send_stats "시간대를 변경하십시오" + send_stats "시간대 변경" while true; do clear echo "시스템 시간 정보" @@ -12912,7 +12934,7 @@ EOF echo "아시아" echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" - echo "5. 싱가포르 시간 6. 인도의 콜카타 시간" + echo "5. 싱가포르 시간 6. 콜카타, 인도 시간" echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" echo "9. 태국 방콕에서의 시간" echo "------------------------" @@ -12926,7 +12948,7 @@ EOF echo "23. 캐나다 시간 24. 멕시코 시간" echo "25. 브라질 시간 26. 아르헨티나 시간" echo "------------------------" - echo "31. UTC 글로벌 표준 시간" + echo "31. UTC 세계 표준시" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -13068,7 +13090,7 @@ EOF case $sub_choice in 1) - read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest + read -e -p "새 작업의 실행 명령을 입력하십시오:" newquest echo "------------------------" echo "1. 월간 작업 2. 주간 작업" echo "3. 일일 작업 4. 시간당 작업" @@ -13120,7 +13142,7 @@ EOF send_stats "지역 호스트 구문 분석" while true; do clear - echo "기본 호스트 구문 분석 목록" + echo "기본 호스트 확인 목록" echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." cat /etc/hosts echo "" @@ -13211,9 +13233,9 @@ EOF echo "현재 제한 종료 기능" echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" + echo "서버가 다시 시작되면 현재 트래픽 사용량이 지워집니다!" output_status - echo -e "${gl_kjlan}총 수신 :${gl_bai}$rx" + echo -e "${gl_kjlan}받은 총액:${gl_bai}$rx" echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" # limiting_shut_down.sh 파일이 있는지 확인하십시오 @@ -13231,9 +13253,9 @@ EOF echo "------------------------------------------------" echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" echo "------------------------" - echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" + echo "1. 전류 제한 종료 기능을 활성화합니다. 2. 전류 제한 종료 기능을 비활성화합니다." echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" Limiting @@ -13279,10 +13301,10 @@ EOF 24) root_use - send_stats "개인 키 로그인" + send_stats "개인키 로그인" while true; do clear - echo "루트 비공개 키 로그인 모드" + echo "ROOT 개인 키 로그인 모드" echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" @@ -13335,7 +13357,7 @@ EOF echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13525,7 +13547,7 @@ EOF fi set_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소를 자동으로 최적화합니다${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소 자동 최적화${gl_huang}${gl_bai}" echo "------------------------------------------------" install_docker @@ -13584,7 +13606,7 @@ EOF 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 "수집이 활성화되었습니다" + echo "수집이 시작되었습니다" send_stats "개인 정보 보호 및 보안 컬렉션이 활성화되었습니다" ;; 2) @@ -13668,7 +13690,7 @@ linux_file() { ls --color=auto -x echo "------------------------" echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" - echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." + echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 복귀" echo "------------------------" echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" echo "15. 파일을 삭제하십시오" @@ -13689,7 +13711,7 @@ linux_file() { 2) # 创建目录 read -e -p "작성하려면 디렉토리 이름을 입력하십시오." dirname mkdir -p "$dirname" && echo "디렉토리가 생성되었습니다" || echo "창조가 실패했습니다" - send_stats "디렉토리를 만듭니다" + send_stats "디렉터리 생성" ;; 3) # 修改目录权限 read -e -p "디렉토리 이름을 입력하십시오 :" dirname @@ -13700,11 +13722,11 @@ linux_file() { 4) # 重命名目录 read -e -p "현재 디렉토리 이름을 입력하십시오 :" current_name read -e -p "새 디렉토리 이름을 입력하십시오 :" new_name - mv "$current_name" "$new_name" && echo "디렉토리의 이름이 바뀌 었습니다" || echo "이름 바꾸지 실패했습니다" + mv "$current_name" "$new_name" && echo "디렉터리 이름이 변경되었습니다." || echo "이름 바꾸지 실패했습니다" send_stats "디렉토리의 이름을 바꿉니다" ;; 5) # 删除目录 - read -e -p "삭제하려면 디렉토리 이름을 입력하십시오." dirname + read -e -p "삭제할 디렉터리 이름을 입력하세요:" dirname rm -rf "$dirname" && echo "디렉토리가 삭제되었습니다" || echo "삭제가 실패했습니다" send_stats "디렉토리 삭제" ;; @@ -13737,7 +13759,7 @@ linux_file() { ;; 15) # 删除文件 read -e -p "삭제하려면 파일 이름을 입력하십시오." filename - rm -f "$filename" && echo "파일이 삭제되었습니다" || echo "삭제가 실패했습니다" + rm -f "$filename" && echo "파일이 삭제되었습니다." || echo "삭제가 실패했습니다" send_stats "파일 삭제" ;; 21) # 压缩文件/目录 @@ -13747,9 +13769,9 @@ linux_file() { send_stats "압축 파일/디렉토리" ;; 22) # 解压文件/目录 - read -e -p "파일 이름 (.tar.gz)을 입력하십시오." filename + read -e -p "추출할 파일 이름(.tar.gz)을 입력하십시오:" filename install tar - tar -xzvf "$filename" && echo "압축 압축$filename" || echo "감압이 실패했습니다" + tar -xzvf "$filename" && echo "압축이 풀렸습니다.$filename" || echo "감압이 실패했습니다" send_stats "압축 파일/디렉토리 해제" ;; @@ -13757,7 +13779,7 @@ linux_file() { read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path if [ ! -e "$src_path" ]; then echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리 이동 실패: 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -13805,17 +13827,17 @@ linux_file() { read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then echo "오류 : 원격 서버 IP를 입력하십시오." - send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" + send_stats "파일 전송 실패: 원격 서버 IP가 입력되지 않았습니다." continue fi - read -e -p "원격 서버 사용자 이름 (기본 루트)을 입력하십시오." remote_user + read -e -p "원격 서버 사용자 이름(기본 루트)을 입력하십시오:" remote_user remote_user=${remote_user:-root} read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password echo if [ -z "$remote_password" ]; then - echo "오류 : 원격 서버 비밀번호를 입력하십시오." + echo "오류: 원격 서버 비밀번호를 입력하세요." send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" continue fi @@ -13920,9 +13942,9 @@ while true; do 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}11. ${gl_bai}기술 사자 스크립트 설치${gl_kjlan}12. ${gl_bai}시스템을 업데이트하십시오${gl_kjlan}13. ${gl_bai}시스템을 청소하십시오" echo -e "${gl_kjlan}14. ${gl_bai}Docker를 설치하십시오${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}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}" @@ -13932,7 +13954,7 @@ while true; do 1) send_stats "클러스터 서버를 추가하십시오" read -e -p "서버 이름 :" server_name - read -e -p "서버 IP :" server_ip + read -e -p "서버 IP:" server_ip read -e -p "서버 포트 (22) :" server_port local server_port=${server_port:-22} read -e -p "서버 사용자 이름 (루트) :" server_username @@ -13956,7 +13978,7 @@ while true; do 4) clear send_stats "백업 클러스터" - echo -e "제발${gl_huang}/root/cluster/servers.py${gl_bai}파일을 다운로드하고 백업을 완료하십시오!" + echo -e "바꿔주세요${gl_huang}/root/cluster/servers.py${gl_bai}파일을 다운로드하고 백업을 완료하십시오!" break_end ;; @@ -14014,10 +14036,10 @@ done kejilion_Affiliates() { clear -send_stats "광고 열" +send_stats "광고 칼럼" echo "광고 열" echo "------------------------" -echo "그것은 사용자에게 더 간단하고 우아한 홍보 및 구매 경험을 제공 할 것입니다!" +echo "사용자에게 더욱 간단하고 우아한 프로모션 및 구매 경험을 제공할 것입니다!" echo "" echo -e "서버 제안" echo "------------------------" @@ -14080,7 +14102,7 @@ while true; do if [ "$sh_v" = "$sh_v_new" ]; then echo -e "${gl_lv}당신은 이미 최신 버전입니다!${gl_huang}v$sh_v${gl_bai}" - send_stats "스크립트는 최신 상태이며 업데이트가 필요하지 않습니다." + send_stats "스크립트가 이미 최신 상태이므로 업데이트할 필요가 없습니다." else echo "새 버전을 발견하십시오!" echo -e "현재 버전 v$sh_v최신 버전${gl_huang}v$sh_v_new${gl_bai}" @@ -14210,7 +14232,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; cd ~ + p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh exit ;; @@ -14228,10 +14250,10 @@ send_stats "K 명령 참조 사용 사례" echo "-------------------" echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" echo "다음은 K 명령 참조 유스 케이스입니다." -echo "스크립트 시작 k" +echo "시작 스크립트 k" echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" -echo "업데이트 시스템 K 업데이트 | K 업데이트" +echo "시스템 k 업데이트 업데이트 | k 업데이트" echo "깨끗한 시스템 쓰레기 K Clean | K 청소" echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" echo "BBR3 제어판 K BBR3 | K bbrv3" @@ -14251,13 +14273,13 @@ echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합 echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" echo "도메인 이름 인증서 응용 프로그램 K SSL" -echo "도메인 이름 인증서 만료 쿼리 K SSL PS" +echo "도메인 이름 인증서 만료 쿼리 k SSL ps" echo "Docker Management Plane K Docker" echo "도커 환경 설치 K 도커 설치 | K 도커 설치" echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" echo "Docker Image Management K Docker img | K Docker Image" echo "LDNMP 사이트 관리 K 웹" -echo "LDNMP 캐시 정리 K 웹 캐시" +echo "LDNMP 캐시 정리 k 웹 캐시" echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 5ee2d1c24..aadf4d9c8 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.7" +sh_v="4.1.8" gl_hui='\e[37m' @@ -7890,7 +7890,7 @@ linux_ldnmp() { 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 + wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/main/Discuz_X3.5_SC_UTF8_20250901.zip unzip latest.zip rm latest.zip @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機${gl_kjlan}100. ${color100}Syncthing點對點文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具" + echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具${gl_kjlan}102. ${color102}VoceChat多人在線聊天系統" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -11531,8 +11531,8 @@ while true; do local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="" - local docker_passwd="" + local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" + local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" local app_size="1" docker_app @@ -12140,6 +12140,28 @@ while true; do 102) + local app_id="102" + local docker_name="vocechat-server" + local docker_img="privoce/vocechat-server:latest" + local docker_port=8102 + + docker_rum() { + + docker run -d --restart=always \ + -p ${docker_port}:3000 \ + --name vocechat-server \ + -v /home/docker/vocechat/data:/home/vocechat-server/data \ + privoce/vocechat-server:latest + + } + + local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" + local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + ;; From c8874154efacf73d2e689a264bda82e19e2211ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:48:42 +0800 Subject: [PATCH 261/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0fb6077be..67745a43f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12138,7 +12138,7 @@ while true; do - 102) + 102|vocechat) local app_id="102" local docker_name="vocechat-server" From a4caa2588d69710a0975781eee0ffce48b5e898a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:49:09 +0800 Subject: [PATCH 262/553] Fix formatting of AI video generation tool entry --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index e1b27b425..3c72a1e49 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" + echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12138,7 +12138,7 @@ while true; do - 102) + 102|vocechat) local app_id="102" local docker_name="vocechat-server" From 067ea5d3576f485e34dc54c99bef920aa8029c1a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 8 Oct 2025 14:26:08 +0000 Subject: [PATCH 263/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-08=2014:26:08?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 1328 ++++++++++++++-------------- jp/kejilion.sh | 2266 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2154 ++++++++++++++++++++++----------------------- tw/kejilion.sh | 2 +- 4 files changed, 2875 insertions(+), 2875 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index d29734073..f8bf8ecbd 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -57,8 +57,8 @@ CheckFirstRun_true() { -# Functions that collect function buried point information, record the current script version number, usage time, system version, CPU architecture, the country of the machine and the function name used by the user. They absolutely do not involve any sensitive information, please rest assured! Please believe me! -# Why do we need to design this function? The purpose is to better understand the functions that users like to use, and further optimize the functions to launch more functions that meet user needs. +# This function collects function buried information and records the current script version number, usage time, system version, CPU architecture, machine country and function name used by the user. It does not involve any sensitive information, so don’t worry! Please believe me! +# Why is this function designed? The purpose is to better understand the functions that users like to use, and to further optimize the functions and launch more functions that meet user needs. # For the full text, you can search for the send_stats function call location, transparent and open source, and you can refuse to use it if you have any concerns. @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# Prompt the user to agree to the terms +# Prompt user to agree to terms UserLicenseAgreement() { clear echo -e "${gl_kjlan}Welcome to the Tech lion script toolbox${gl_bai}" - echo "For the first time using the script, please read and agree to the user license agreement." + echo "When using the script for the first time, please read and agree to the User License Agreement." echo "User License Agreement: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "Do you agree to the above terms? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "License consent" + send_stats "License agreement" 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 "Rejection of permission" + send_stats "permission denied" clear exit fi @@ -220,7 +220,7 @@ check_disk_space() { local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') if [ "$available_space_mb" -lt "$required_space_mb" ]; then - echo -e "${gl_huang}hint:${gl_bai}Insufficient disk space!" + echo -e "${gl_huang}hint:${gl_bai}Not enough disk space!" echo "Current available space: $((available_space_mb/1024))G" echo "Minimum demand space:${required_gb}G" echo "The installation cannot be continued. Please clean the disk space and try again." @@ -291,13 +291,13 @@ restart() { fi } -# Start the service +# Start service start() { systemctl start "$1" if [ $? -eq 0 ]; then - echo "$1The service has been started." + echo "$1The service has started." else - echo "Error: Start$1Service failed." + echo "Error: start$1Service failed." fi } @@ -305,9 +305,9 @@ start() { stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1Service has been stopped." + echo "$1Service has stopped." else - echo "Error: Stop$1Service failed." + echo "Error: stop$1Service failed." fi } @@ -315,7 +315,7 @@ stop() { status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1Service status is shown." + echo "$1The service status is displayed." else echo "Error: Unable to display$1Service status." fi @@ -330,7 +330,7 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAMESet to power on." + echo "$SERVICE_NAMEIt has been set to start automatically at boot." } @@ -506,7 +506,7 @@ while true; do echo "Docker container list" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "Container operation" + echo "Container operations" echo "------------------------" echo "1. Create a new container" echo "------------------------" @@ -516,9 +516,9 @@ while true; do echo "5. Restart the specified container 9. Restart all containers" echo "------------------------" echo "11. Enter the specified container 12. View the container log" - echo "13. View container network 14. View container occupancy" + echo "13. Check the container network 14. Check the container occupancy" echo "------------------------" - echo "15. Turn on container port access 16. Turn off container port access" + echo "15. Enable container port access 16. Close container port access" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -541,7 +541,7 @@ while true; do ;; 4) send_stats "Delete the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + read -e -p "Please enter the container name (please separate multiple container names with spaces):" dockername docker rm -f $dockername ;; 5) @@ -582,7 +582,7 @@ while true; do break_end ;; 12) - send_stats "View container log" + send_stats "View container logs" read -e -p "Please enter the container name:" dockername docker logs $dockername break_end @@ -656,15 +656,15 @@ while true; do read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "Pull the mirror" + send_stats "Pull image" read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames for name in $imagenames; do - echo -e "${gl_huang}Getting the image:$name${gl_bai}" + echo -e "${gl_huang}Obtaining image:$name${gl_bai}" docker pull $name done ;; 2) - send_stats "Update the image" + send_stats "Update image" read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames for name in $imagenames; do echo -e "${gl_huang}Updating image:$name${gl_bai}" @@ -765,7 +765,7 @@ install_crontab() { return fi - echo -e "${gl_lv}crontab is installed and the cron service is running.${gl_bai}" + echo -e "${gl_lv}crontab is installed and cron service is running.${gl_bai}" } @@ -782,7 +782,7 @@ docker_ipv6_on() { echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE" restart docker else - # Use jq to handle updates of configuration files + # Use jq to handle configuration file updates local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") # Check whether the current configuration already has ipv6 settings @@ -795,7 +795,7 @@ docker_ipv6_on() { UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {"fixed-cidr-v6": "2001:db8:1::/64"}') fi - # Comparing original configuration with new configuration + # Compare original configuration to new configuration if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then echo -e "${gl_huang}IPv6 access is currently enabled${gl_bai}" else @@ -818,13 +818,13 @@ docker_ipv6_off() { return fi - # Read the current configuration + # Read current configuration local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # Use jq to handle updates of configuration files + # Use jq to handle configuration file updates local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # Check the current ipv6 status + # Check current ipv6 status local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') # Comparing original configuration with new configuration @@ -879,7 +879,7 @@ open_port() { install iptables for port in "${ports[@]}"; do - # Delete existing closing rules + # Delete existing shutdown rules iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null @@ -890,7 +890,7 @@ open_port() { 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 "The port has been opened$port" + echo "Port opened$port" fi done @@ -913,7 +913,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add a close rule + # Add shutdown rule 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 @@ -928,7 +928,7 @@ close_port() { iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # Insert new rules to first + # Insert new rule into the first one iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT @@ -950,7 +950,7 @@ allow_ip() { # Delete existing blocking rules iptables -D INPUT -s $ip -j DROP 2>/dev/null - # Add allow rule + # Add allow rules if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT echo "Released IP$ip" @@ -992,7 +992,7 @@ block_ip() { enable_ddos_defense() { - # Turn on defense DDoS + # Turn on DDoS protection 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 @@ -1007,7 +1007,7 @@ enable_ddos_defense() { # Turn off DDoS Defense disable_ddos_defense() { - # Turn off defense DDoS + # Turn off DDoS protection 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 @@ -1118,7 +1118,7 @@ iptables_panel() { echo "" echo "Firewall Management" echo "------------------------" - echo "1. Open the specified port 2. Close the specified port" + echo "1. Open the designated port 2. Close the designated port" echo "3. Open all ports 4. Close all ports" echo "------------------------" echo "5. IP whitelist 6. IP blacklist" @@ -1143,7 +1143,7 @@ iptables_panel() { 2) read -e -p "Please enter the closed port number:" c_port close_port $c_port - send_stats "Close specified port" + send_stats "Close the specified port" ;; 3) # Open all ports @@ -1180,7 +1180,7 @@ iptables_panel() { 5) # IP whitelist - read -e -p "Please enter the IP or IP segment to release:" o_ip + read -e -p "Please enter the allowed IP or IP segment:" o_ip allow_ip $o_ip ;; 6) @@ -1223,15 +1223,15 @@ iptables_panel() { send_stats "Allowed countries$country_codeIP" ;; 16) - read -e -p "Please enter the allowed country code (multiple country codes can be separated by spaces such as CN US JP):" country_code + read -e -p "Please enter the allowed country codes (multiple country codes can be separated by spaces, such as CN US JP):" country_code manage_country_rules allow $country_code - send_stats "Block the country$country_codeIP" + send_stats "block country$country_codeIP" ;; 17) - read -e -p "Please enter the cleared country code (multiple country codes can be separated by spaces such as CN US JP):" country_code + read -e -p "Please enter the cleared country code (multiple country codes can be separated by spaces, such as CN US JP):" country_code manage_country_rules unblock $country_code - send_stats "clear country$country_codeIP" + send_stats "Clear the country$country_codeIP" ;; *) @@ -1253,7 +1253,7 @@ add_swap() { # Get all swap partitions in the current system local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') - # Iterate over and delete all swap partitions + # Traverse and delete all swap partitions for partition in $swap_partitions; do swapoff "$partition" wipefs -a "$partition" @@ -1263,7 +1263,7 @@ add_swap() { # Make sure /swapfile is no longer used swapoff /swapfile - # Delete the old /swapfile + # Delete old /swapfile rm -f /swapfile # Create a new swap partition @@ -1317,7 +1317,7 @@ ldnmp_v() { 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}" - # Get the php version + # Get php version 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}" @@ -1463,7 +1463,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}Quickly apply for an SSL certificate, automatically renew your signature before expiration${gl_bai}" +echo -e "${gl_huang}Quickly apply for an SSL certificate and automatically renew it before expiration${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1479,7 +1479,7 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}The expiration of the applied certificate${gl_bai}" + echo -e "${gl_huang}Expiration status of applied certificates${gl_bai}" echo "Site information Certificate expiration time" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do @@ -1521,14 +1521,14 @@ certs_status() { if [ -f "$file_path" ]; then send_stats "Successful application for domain name certificate" else - send_stats "Application for domain name certificate failed" - echo -e "${gl_hong}Notice:${gl_bai}The certificate application failed. Please check the following possible reasons and try again:" - echo -e "1. Domain name spelling error ➠ Please check whether the domain name is entered correctly" - echo -e "2. DNS resolution problem ➠ Confirm that the domain name has been correctly resolved to this server IP" + send_stats "Domain name certificate application failed" + echo -e "${gl_hong}Notice:${gl_bai}Certificate application failed, please check the following possible reasons and try again:" + echo -e "1. Domain name is spelled incorrectly ➠ Please check whether the domain name is entered correctly" + echo -e "2. DNS resolution problem ➠ Confirm that the domain name has been correctly resolved to the server IP" echo -e "3. Network configuration issues ➠ If you use Cloudflare Warp and other virtual networks, please temporarily shut down" - echo -e "4. Firewall restrictions ➠ Check whether port 80/443 is open to ensure verification is accessible" + echo -e "4. Firewall restrictions ➠ Check whether port 80/443 is open and ensure that it is accessible" echo -e "5. The number of applications exceeds the limit ➠ Let's Encrypt has a weekly limit (5 times/domain name/week)" - echo -e "6. Domestic registration restrictions ➠ Please confirm whether the domain name is registered in mainland China" + echo -e "6. Domestic registration restrictions ➠ For mainland China environment, please confirm whether the domain name is registered" break_end clear echo "Please try deploying again$webname" @@ -1551,8 +1551,8 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "Please enter your IP or the resolved domain name:" yuming + echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "Please enter your IP or resolved domain name:" yuming } @@ -1658,12 +1658,12 @@ cf_purge_cache() { ZONE_IDS=($ZONE_IDS) else # Prompt the user whether to clean the cache - read -e -p "Need to clean Cloudflare's cache? (y/n):" answer + read -e -p "Need to clear Cloudflare's cache? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF information is saved in$CONFIG_FILE, you can modify CF information later" + echo "CF information is saved in$CONFIG_FILE, you can modify the CF information later" read -e -p "Please enter your API_TOKEN:" API_TOKEN read -e -p "Please enter your CF username:" EMAIL - read -e -p "Please enter zone_id (multiple separated by spaces):" -a ZONE_IDS + read -e -p "Please enter zone_id (separate multiple with spaces):" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" @@ -1686,7 +1686,7 @@ cf_purge_cache() { web_cache() { - send_stats "Clean up site cache" + send_stats "Clear site cache" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1706,7 +1706,7 @@ web_del() { fi for yuming in $yuming_list; do - echo "Deleting the domain name:$yuming" + echo "Domain name is being deleted:$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 @@ -1740,7 +1740,7 @@ nginx_waf() { 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 - # Close WAF: Add Comments + # Turn off WAF: add comments 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 @@ -1800,7 +1800,7 @@ patch_wp_memory_limit() { sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # Insert a new definition before the line with "Happy publishing" + # Insert the new definition before the line containing "Happy publishing" awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1851,7 +1851,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Turn on Brotli: Remove comments + # Turn on Brotli: remove comments sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1885,7 +1885,7 @@ nginx_br() { return 1 fi - # Check nginx images and handle them according to the situation + # Check the nginx image and handle it accordingly if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1907,7 +1907,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # Turn on Zstd: Remove comments + # Turn on Zstd: remove comments sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1994,11 +1994,11 @@ web_security() { echo "1. Install the defense program" echo "------------------------" echo "5. View SSH interception record 6. View website interception record" - echo "7. View the list of defense rules 8. View real-time monitoring of logs" + echo "7. View the list of defense rules 8. View logs for real-time monitoring" echo "------------------------" echo "11. Configure intercept parameters 12. Clear all blocked IPs" echo "------------------------" - echo "21. cloudflare mode 22. High load on 5 seconds shield" + echo "21. cloudflare mode 22. Enable 5 seconds shield under high load" echo "------------------------" echo "31. Turn on WAF 32. Turn off WAF" echo "33. Turn on DDOS Defense 34. Turn off DDOS Defense" @@ -2092,7 +2092,7 @@ web_security() { echo "Go to the upper right corner of the cf background, select the API token on the left, and obtain the Global API Key" echo "https://dash.cloudflare.com/login" read -e -p "Enter CF account number:" cfuser - read -e -p "Enter CF’s Global API Key:" cftoken + read -e -p "Enter the Global API Key for 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 @@ -2107,21 +2107,21 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "Cloudflare mode is configured to view intercept records in the cf background, site-security-events" + echo "Cloudflare mode has been configured, and the interception record can be viewed in the cf background, site-security-events" ;; 22) - send_stats "High load on 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When high load is detected, the shield will be automatically turned on, and low load will be automatically turned off for 5 seconds.${gl_bai}" + send_stats "High load enables 5 seconds shield" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When it detects high load, it will automatically open the shield, and when it detects low load, it will automatically close the shield for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" echo -e "Go to the bottom right of the cf background domain name summary page to get${gl_huang}Region ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "Enter CF account number:" cfuser - read -e -p "Enter the Global API Key for CF:" cftoken - read -e -p "Enter the region ID of the domain name in CF:" cfzonID + read -e -p "Enter CF’s account number:" cfuser + read -e -p "Enter CF’s Global API Key:" cftoken + read -e -p "Enter the zone ID of the domain name in CF:" cfzonID cd ~ install jq bc @@ -2140,7 +2140,7 @@ web_security() { (crontab -l 2>/dev/null; echo "$cron_job") | crontab - echo "High load automatic shield opening script has been added" else - echo "Automatic shield script already exists, no need to add it" + echo "The automatic shield opening script already exists, no need to add it" fi ;; @@ -2182,7 +2182,7 @@ CONFIG_FILE="/home/web/nginx.conf" # Get the current worker_processes setting value current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# Set mode information according to value +# Set mode information based on value if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2198,21 +2198,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # Check whether zstd is enabled and not commented (the whole line starts with zstd on;) + # Check whether zstd is on and uncommented (the whole line starts with zstd on;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Check if brotli is enabled and not commented + # Check if brotli is enabled and uncommented if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # Check if gzip is enabled and not commented + # Check if gzip is enabled and uncommented if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2231,7 +2231,7 @@ web_optimization() { send_stats "Optimize LDNMP environment" echo -e "Optimize LDNMP environment${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. Standard mode 2. High performance mode (recommended 2H4G or above)" + echo "1. Standard mode 2. High performance mode (2H4G or above recommended)" echo "------------------------" echo "3. Turn on gzip compression 4. Turn off gzip compression" echo "5. Turn on br compression 6. Turn off br compression" @@ -2242,7 +2242,7 @@ web_optimization() { read -e -p "Please enter your selection:" sub_choice case $sub_choice in 1) - send_stats "Site standard mode" + send_stats "site standards mode" # nginx tuning sed -i 's/worker_connections.*/worker_connections 10240;/' /home/web/nginx.conf @@ -2278,7 +2278,7 @@ web_optimization() { optimize_balanced - echo "LDNMP environment has been set to standard mode" + echo "The LDNMP environment has been set to standard mode" ;; 2) @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP environment has been set to high performance mode" + echo "The LDNMP environment has been set to high performance mode" ;; 3) @@ -2376,7 +2376,7 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then -# check_docker="${gl_lv}${gl_bai} installed" +# check_docker="${gl_lv} has installed ${gl_bai}" # else # check_docker="${gl_hui}${gl_bai} is not installed" # fi @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "Access address:" +echo "Visit address:" ip_address @@ -2429,11 +2429,11 @@ check_docker_image_update() { local container_created=$(echo "$container_info" | cut -d',' -f1) local image_name=$(echo "$container_info" | cut -d',' -f2) - # Extract mirror warehouses and tags + # Extract image repository and tags local image_repo=${image_name%%:*} local image_tag=${image_name##*:} - # The default label is latest + # The default tag is latest [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" # Add support for official images @@ -2443,7 +2443,7 @@ check_docker_image_update() { 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) - # Verify the time of acquisition + # Verify the time obtained 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) @@ -2559,12 +2559,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules for releasing the specified 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 - # Clear the rules for release local network 127.0.0.0/8 + # Clear the rules that allow local network 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 @@ -2575,7 +2575,7 @@ clear_container_rules() { fi - echo "IP+ports have been allowed to access the service" + echo "IP+port has been allowed to access the service" save_iptables_rules } @@ -2589,7 +2589,7 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "Error: Please provide the port number and the IP that is allowed to access." + echo "Error: Please provide port number and IP to allow access." echo "Usage: block_host_port " return 1 fi @@ -2597,7 +2597,7 @@ block_host_port() { install iptables - # Denied all other IP access + # Deny access from all other IPs if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -j DROP fi @@ -2616,12 +2616,12 @@ block_host_port() { - # Deny access from all other IPs + # Denied all other IP access if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi - # Allow specified IP access + # Allow access to specified 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 @@ -2636,7 +2636,7 @@ block_host_port() { iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT fi - echo "IP+ ports have been blocked from accessing the service" + echo "IP+port has been blocked from accessing the service" save_iptables_rules } @@ -2656,7 +2656,7 @@ clear_host_port_rules() { install iptables - # Clear rules that block all other IP access + # Clear the rule that blocks access from all other IPs if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi @@ -2672,12 +2672,12 @@ clear_host_port_rules() { fi - # Clear rules that block all other IP access + # Clear the rule that blocks access from all other IPs if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi - # Clear rules that allow local access + # Clear rules that allow native access 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 @@ -2750,16 +2750,16 @@ while true; do echo "1. Install 2. Update 3. Uninstall" echo "------------------------" echo "5. Add domain name access 6. Delete domain name access" - echo "7. Allow IP+ port access 8. Block IP+ port access" + echo "7. Allow IP+port access 8. Block IP+port access" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case $choice in 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port + read -e -p "Enter the application external service port and press Enter to use it by default.${docker_port}port:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2786,7 +2786,7 @@ while true; do add_app_id clear - echo "$docker_nameInstalled" + echo "$docker_nameInstallation completed" check_docker_app_ip echo "" $docker_use @@ -2800,7 +2800,7 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -2867,12 +2867,12 @@ docker_app_plus() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "Enter the application external service port, and enter the default${docker_port}port:" app_port + read -e -p "Enter the application external service port and press Enter to use it by default.${docker_port}port:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2896,7 +2896,7 @@ docker_app_plus() { ;; 5) echo "${docker_name}Domain name access settings" - send_stats "${docker_name}Domain access settings" + send_stats "${docker_name}Domain name access settings" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" @@ -3111,7 +3111,7 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear send_stats "Unable to install LDNMP environment again" - echo -e "${gl_huang}hint:${gl_bai}The website construction environment is installed. No need to install again!" + echo -e "${gl_huang}hint:${gl_bai}The website building environment has been installed. No need to install again!" break_end linux_ldnmp fi @@ -3124,7 +3124,7 @@ cd ~ send_stats "Install LDNMP environment" root_use clear -echo -e "${gl_huang}The LDNMP environment is not installed, start installing the LDNMP environment...${gl_bai}" +echo -e "${gl_huang}The LDNMP environment is not installed. Start installing the LDNMP environment...${gl_bai}" check_disk_space 3 /home check_port install_dependency @@ -3185,7 +3185,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "Yours$webnameBuilt!" + echo "your$webnameIt's built!" echo "https://$yuming" echo "------------------------" echo "$webnameThe installation information is as follows:" @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { fi if [ -z "$reverseproxy_port" ]; then - read -e -p "Please enter your multiple anti-generation IP+ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port + read -e -p "Please enter your multiple anti-generation IP+ ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3365,7 +3365,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo "Site Directory" + echo "site directory" echo "------------------------" echo -e "data${gl_hui}/home/web/html${gl_bai}Certificate${gl_hui}/home/web/certs${gl_bai}Configuration${gl_hui}/home/web/conf.d${gl_bai}" echo "------------------------" @@ -3373,12 +3373,12 @@ ldnmp_web_status() { echo "operate" echo "------------------------" echo "1. Apply for/update the domain name certificate 2. Change the site domain name" - echo "3. Clean up the site cache 4. Create an associated site" - echo "5. View access log 6. View error log" + echo "3. Clear site cache 4. Create associated site" + echo "5. View the access log 6. View the error log" echo "7. Edit global configuration 8. Edit site configuration" echo "9. Manage site database 10. View site analysis report" echo "------------------------" - echo "20. Delete the specified site data" + echo "20. Delete specified site data" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -3396,7 +3396,7 @@ ldnmp_web_status() { 2) send_stats "Change the site domain name" - echo -e "${gl_hong}Highly recommended:${gl_bai}First back up the entire site data and then change the site domain name!" + echo -e "${gl_hong}Highly recommended:${gl_bai}Back up the entire site data first and then change the site domain name!" read -e -p "Please enter the old domain name:" oddyuming read -e -p "Please enter the new domain name:" yuming install_certbot @@ -3443,8 +3443,8 @@ ldnmp_web_status() { ;; 4) send_stats "Create an associated site" - echo -e "Associate a new domain name for the existing site for access" - read -e -p "Please enter the existing domain name:" oddyuming + echo -e "Associate a new domain name with the existing site for access" + read -e -p "Please enter an existing domain name:" oddyuming read -e -p "Please enter the new domain name:" yuming install_certbot install_ssltls @@ -3477,7 +3477,7 @@ ldnmp_web_status() { 8) send_stats "Edit site configuration" - read -e -p "To edit the site configuration, please enter the domain name you want to edit:" yuming + read -e -p "To edit site configuration, please enter the domain name you want to edit:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3523,12 +3523,12 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}It is a popular and powerful operation and maintenance management panel nowadays." + echo "${panelname}It is a popular and powerful operation and maintenance management panel." echo "Official website introduction:$panelurl " echo "" echo "------------------------" - echo "1. Install 2. Management 3. Uninstall" + echo "1. Install 2. Manage 3. Uninstall" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -3664,10 +3664,10 @@ EOF add_forwarding_service() { send_stats "Add FRP intranet service" # Prompt the user to enter the service name and forwarding information - read -e -p "Please enter the service name:" service_name - read -e -p "Please enter the forwarding type (tcp/udp) [Enter default tcp]:" service_type + read -e -p "Please enter service name:" service_name + read -e -p "Please enter the forwarding type (tcp/udp) [Enter to default to tcp]:" service_type local service_type=${service_type:-tcp} - read -e -p "Please enter the intranet IP [Enter default 127.0.0.1]:" local_ip + read -e -p "Please enter the intranet IP [default is 127.0.0.1 when pressing Enter]:" local_ip local local_ip=${local_ip:-127.0.0.1} read -e -p "Please enter the intranet port:" local_port read -e -p "Please enter the external network port:" remote_port @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # Output generated information + # Output the generated information echo "Serve$service_nameAdded successfully to frpc.toml" docker restart frpc @@ -3694,9 +3694,9 @@ EOF delete_forwarding_service() { - send_stats "Delete the frp intranet service" - # Prompt the user to enter the service name that needs to be deleted - read -e -p "Please enter the service name that needs to be deleted:" service_name + send_stats "Delete frp intranet service" + # Prompt the user to enter the name of the service that needs to be deleted + read -e -p "Please enter the service name to be deleted:" service_name # Use sed to delete the service and its related configurations sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml echo "Serve$service_nameDeleted successfully from frpc.toml" @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # Print the header + # Print header printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3730,7 +3730,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # If there is service information, print the current service before processing the new service + # If service information already exists, print the current service before processing the new service if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3739,7 +3739,7 @@ list_forwarding_services() { type } - # Update the current service name + # Update current service name if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # Print the information for the last service + # Print information about the last service if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3808,7 +3808,7 @@ generate_access_urls() { if [ "$has_valid_ports" = true ]; then echo "FRP service external access address:" - # Process IPv4 address + # Handling IPv4 addresses for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" @@ -3862,7 +3862,7 @@ frps_panel() { echo -e "FRP server$check_frp $update_status" echo "Build an FRP intranet penetration service environment to expose devices without public IP to the Internet" echo "Official website introduction: https://github.com/fatedier/frp/" - echo "Video teaching: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" + echo "Video tutorial: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" if [ -d "/home/frp/" ]; then check_docker_app_ip frps_main_ports @@ -3871,7 +3871,7 @@ frps_panel() { echo "------------------------" echo "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "5. Domain name access for intranet service 6. Delete domain name access" + echo "5. Intranet service domain name access 6. Delete domain name access" echo "------------------------" echo "7. Allow IP+ port access 8. Block IP+ port access" echo "------------------------" @@ -3906,7 +3906,7 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "App has been uninstalled" ;; 5) echo "Reverse intranet penetration service into domain name access" @@ -3917,13 +3917,13 @@ frps_panel() { block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "Domain name format example.com does not come with https://" + echo "Domain name format example.com without https://" web_del ;; 7) send_stats "Allow IP access" - read -e -p "Please enter the port to be released:" frps_port + read -e -p "Please enter the port that needs to be released:" frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; @@ -3958,9 +3958,9 @@ frpc_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRP Client$check_frp $update_status" - echo "Connect with the server. After the connection, you can create an intranet penetration service to access the Internet." + echo "Docking with the server, after docking, you can create intranet penetration service to the Internet access" echo "Official website introduction: https://github.com/fatedier/frp/" - echo "Video teaching: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" + echo "Video tutorial: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3970,11 +3970,11 @@ frpc_panel() { echo "------------------------" echo "1. Install 2. Update 3. Uninstall" echo "------------------------" - echo "4. Add external services 5. Delete external services 6. Configure services manually" + echo "4. Add external services 5. Delete external services 6. Manually configure services" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) install jq grep ss @@ -4060,11 +4060,11 @@ yt_menu_pro() { echo "1. Install 2. Update 3. Uninstall" echo "-------------------------" echo "5. Single video download 6. Batch video download 7. Custom parameter download" - echo "8. Download as MP3 audio 9. Delete the video directory 10. Cookie management (under development)" + echo "8. Download as MP3 audio 9. Delete video directory 10. Cookie management (under development)" echo "-------------------------" echo "0. Return to the previous menu" echo "-------------------------" - read -e -p "Please enter the option number:" choice + read -e -p "Please enter option number:" choice case $choice in 1) @@ -4079,7 +4079,7 @@ yt_menu_pro() { read ;; 2) send_stats "Update yt-dlp..." - echo "Update yt-dlp..." + echo "Updating yt-dlp..." yt-dlp -U add_app_id @@ -4091,7 +4091,7 @@ yt_menu_pro() { rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "Uninstall is complete. Press any key to continue..." + echo "Uninstallation completed. Press any key to continue..." read ;; 5) send_stats "Single video download" @@ -4102,7 +4102,7 @@ yt_menu_pro() { --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites "$url" - read -e -p "After the download is complete, press any key to continue..." ;; + read -e -p "Download completed, press any key to continue..." ;; 6) send_stats "Batch video download" install nano @@ -4187,7 +4187,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}System update...${gl_bai}" + echo -e "${gl_huang}System update in progress...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4214,7 +4214,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}Cleaning up the system...${gl_bai}" + echo -e "${gl_huang}System cleaning in progress...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4243,9 +4243,9 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "Clean the package manager cache..." + echo "Clean package manager cache..." apk cache clean - echo "Delete the system log..." + echo "Delete system log..." rm -rf /var/log/* echo "Delete APK cache..." rm -rf /var/cache/apk/* @@ -4267,7 +4267,7 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "Delete system log..." + echo "Delete the system log..." rm -rf /var/log/* echo "Delete temporary files..." rm -rf /tmp/* @@ -4277,7 +4277,7 @@ linux_clean() { pkg autoremove -y echo "Clean the package manager cache..." pkg clean -y - echo "Delete the system log..." + echo "Delete system log..." rm -rf /var/log/* echo "Delete temporary files..." rm -rf /tmp/* @@ -4406,7 +4406,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # If neither PasswordAuthentication nor PubkeyAuthentication matches, set the default value + # Sets default value if neither PasswordAuthentication nor PubkeyAuthentication matches 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" @@ -4448,7 +4448,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "The private key information has been generated. Be sure to copy and save it.${gl_huang}${ipv4_address}_ssh.key${gl_bai}File for future SSH login" + echo -e "The private key information has been generated. Be sure to copy and save it. It can be saved as${gl_huang}${ipv4_address}_ssh.key${gl_bai}file for future SSH logins" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4460,14 +4460,14 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT private key login is enabled, ROOT password login has been closed, reconnection will take effect${gl_bai}" + echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, and reconnection will take effect.${gl_bai}" } import_sshkey() { - read -e -p "Please enter your SSH public key contents (usually starting with 'ssh-rsa' or 'ssh-ed25519'):" public_key + read -e -p "Please enter the contents of your SSH public key (usually starts with 'ssh-rsa' or 'ssh-ed25519'):" public_key if [[ -z "$public_key" ]]; then echo -e "${gl_hong}Error: The public key content was not entered.${gl_bai}" @@ -4488,7 +4488,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}The public key has been successfully imported, the ROOT private key login has been enabled, the ROOT password login has been closed, and the reconnection will take effect${gl_bai}" + echo -e "${gl_lv}The public key has been successfully imported, ROOT private key login has been enabled, and ROOT password login has been closed. Reconnection will take effect.${gl_bai}" } @@ -4503,7 +4503,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login is set up!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -4561,7 +4561,7 @@ dd_xitong() { echo "Reinstall the system" echo "--------------------------------" echo -e "${gl_hong}Notice:${gl_bai}Reinstallation may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." - echo -e "${gl_hui}Thanks to the script support of leitbogioro and bin456789!${gl_bai} " + echo -e "${gl_hui}Thanks to boss leitbogioro and boss bin456789 for their script support!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4586,7 +4586,7 @@ dd_xitong() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please select the system to reinstall:" sys_choice + read -e -p "Please select the system you want to reinstall:" sys_choice case "$sys_choice" in @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall windows11" + send_stats "Reinstall Windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4794,7 +4794,7 @@ dd_xitong() { ;; 43) - send_stats "Reinstall Windows 7" + send_stats "Reinstall windows7" 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 @@ -4860,13 +4860,13 @@ bbrv3() { echo "Current kernel version:$kernel_version" echo "" - echo "Kernel Management" + echo "Kernel management" echo "------------------------" echo "1. Update the BBRv3 kernel 2. Uninstall the BBRv3 kernel" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) @@ -4876,7 +4876,7 @@ bbrv3() { # 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 - # Step 3: Add a repository + # Step 3: Add repository 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+') @@ -4885,7 +4885,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "The XanMod kernel has been updated. Take effect after restart" + echo "XanMod kernel has been updated. Take effect after restart" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4895,7 +4895,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "The XanMod kernel is uninstalled. Take effect after restart" + echo "The XanMod kernel has been uninstalled. Take effect after restart" server_reboot ;; @@ -4911,7 +4911,7 @@ bbrv3() { echo "Set up BBR3 acceleration" echo "Video introduction: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "Only support Debian/Ubuntu" + echo "Only supports Debian/Ubuntu" echo "Please back up the data and will enable BBR3 for you to upgrade the Linux kernel." echo "------------------------------------------------" read -e -p "Are you sure to continue? (Y/N):" choice @@ -4971,7 +4971,7 @@ elrepo_install() { # Import ELRepo GPG public key echo "Import the ELRepo GPG public key..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - # Check system version + # Detect system version 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) # Make sure we run on a supported operating system @@ -4981,13 +4981,13 @@ elrepo_install() { linux_Settings fi # Print detected operating system information - echo "Operating system detected:$os_name $os_version" + echo "Detected operating systems:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then echo "Install ELRepo repository configuration (version 8)..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm elif [[ "$os_version" == 9 ]]; then - echo "Install ELRepo repository configuration (version 9)..." + echo "Installing the ELRepo repository configuration (version 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then echo "Install ELRepo repository configuration (version 10)..." @@ -5001,7 +5001,7 @@ elrepo_install() { echo "Enable the ELRepo kernel repository and install the latest mainline kernel..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "The ELRepo repository configuration is installed and updated to the latest mainline kernel." + echo "Installed ELRepo repository configuration and updated to latest mainline kernel." server_reboot } @@ -5020,26 +5020,26 @@ elrepo() { echo "" echo "Kernel Management" echo "------------------------" - echo "1. Update the elrepo kernel 2. Uninstall the elrepo kernel" + echo "1. Update elrepo kernel 2. Uninstall elrepo kernel" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" 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 "Update the Red Hat kernel" + send_stats "Update Red Hat Kernel" server_reboot ;; 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "The elrepo kernel is uninstalled. Take effect after restart" - send_stats "Uninstall the Red Hat kernel" + echo "The elrepo kernel has been uninstalled. Take effect after restart" + send_stats "Uninstall Red Hat Kernel" server_reboot ;; @@ -5052,19 +5052,19 @@ elrepo() { else clear - echo "Please back up the data and will upgrade the Linux kernel for you" + echo "Please back up your data and we will upgrade the Linux kernel for you." echo "Video introduction: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "Only support Red Hat series distributions CentOS/RedHat/Alma/Rocky/oracle" + echo "Only supports Red Hat series distributions CentOS/RedHat/Alma/Rocky/oracle" echo "Upgrading the Linux kernel can improve system performance and security. It is recommended to try it if conditions permit and upgrade the production environment with caution!" echo "------------------------------------------------" - read -e -p "Are you sure to continue? (Y/N):" choice + read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Upgrade the Red Hat kernel" + send_stats "Upgrade Red Hat kernel" server_reboot ;; [Nn]) @@ -5082,7 +5082,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}Update the virus database...${gl_bai}" + echo -e "${gl_huang}Updating virus database...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "Please specify the directory to scan." + echo "Please specify the directories to scan." return fi @@ -5142,13 +5142,13 @@ clamav() { echo "Video introduction: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" echo "It is an open source antivirus software tool, mainly used to detect and remove various types of malware." - echo "Including viruses, Trojan horses, spyware, malicious scripts and other harmful software." + echo "Includes viruses, Trojan horses, spyware, malicious scripts and other harmful software." echo "------------------------" - echo -e "${gl_lv}1. Full disk scan${gl_bai} ${gl_huang}2. Scan the important directory${gl_bai} ${gl_kjlan}3. Custom directory scanning${gl_bai}" + echo -e "${gl_lv}1. Full disk scan${gl_bai} ${gl_huang}2. Scan important directories${gl_bai} ${gl_kjlan}3. Custom directory scanning${gl_bai}" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) send_stats "Full disk scan" @@ -5186,7 +5186,7 @@ clamav() { -# High-performance mode optimization function +# High performance mode optimization function optimize_high_performance() { echo -e "${gl_lv}Switch to${tiaoyou_moshi}...${gl_bai}" @@ -5227,7 +5227,7 @@ optimize_high_performance() { } -# Equalization mode optimization function +# Balanced mode optimization function optimize_balanced() { echo -e "${gl_lv}Switch to equalization mode...${gl_bai}" @@ -5268,9 +5268,9 @@ optimize_balanced() { } -# Restore default settings function +# Restore the default settings function restore_defaults() { - echo -e "${gl_lv}Restore to default settings...${gl_bai}" + echo -e "${gl_lv}Revert to default settings...${gl_bai}" echo -e "${gl_lv}Restore file descriptor...${gl_bai}" ulimit -n 1024 @@ -5282,7 +5282,7 @@ restore_defaults() { sysctl -w vm.overcommit_memory=0 2>/dev/null sysctl -w vm.min_free_kbytes=16384 2>/dev/null - echo -e "${gl_lv}Reset network settings...${gl_bai}" + echo -e "${gl_lv}Restore network settings...${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 @@ -5300,8 +5300,8 @@ restore_defaults() { echo -e "${gl_lv}Restore CPU settings...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}Restore other optimizations...${gl_bai}" - # Restore transparent huge pages + echo -e "${gl_lv}Revert other optimizations...${gl_bai}" + # Restore transparent page echo always > /sys/kernel/mm/transparent_hugepage/enabled # Restore NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null @@ -5312,7 +5312,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to the website building optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -5343,7 +5343,7 @@ optimize_web_server() { sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null echo -e "${gl_lv}Other optimizations...${gl_bai}" - # Disable large transparent pages to reduce latency + # Disable transparent huge pages to reduce latency echo never > /sys/kernel/mm/transparent_hugepage/enabled # Disable NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5360,19 +5360,19 @@ Kernel_optimize() { echo "Optimization of kernel parameters in Linux system" echo "Video introduction: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "A variety of system parameter tuning modes are provided, and users can choose and switch according to their own usage scenarios." + echo "Provides a variety of system parameter tuning modes, and users can choose to switch according to their own usage scenarios." echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in the production environment!" echo "--------------------" echo "1. High-performance optimization mode: Maximize system performance and optimize file descriptors, virtual memory, network settings, cache management and CPU settings." - echo "2. Balanced optimization mode: Balance between performance and resource consumption, suitable for daily use." + echo "2. Balanced optimization mode: strikes a balance between performance and resource consumption, suitable for daily use." echo "3. Website optimization mode: Optimize for the website server to improve concurrent connection processing capabilities, response speed and overall performance." echo "4. Live broadcast optimization mode: Optimize the special needs of live broadcast streaming to reduce latency and improve transmission performance." echo "5. Game server optimization mode: Optimize for game servers to improve concurrent processing capabilities and response speed." - echo "6. Restore the default settings: Restore the system settings to the default configuration." + echo "6. Restore default settings: Restore system settings to default configuration." echo "--------------------" echo "0. Return to the previous menu" echo "--------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) cd ~ @@ -5447,7 +5447,7 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}The system language has been modified to:$langReconnecting SSH takes effect.${gl_bai}" + echo -e "${gl_lv}The system language has been modified to:$langReconnect to SSH to take effect.${gl_bai}" hash -r break_end ;; @@ -5457,7 +5457,7 @@ update_locale() { ;; esac else - echo "Unsupported systems, system type cannot be recognized." + echo "Unsupported system, system type cannot be identified." break_end fi } @@ -5476,7 +5476,7 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -5537,7 +5537,7 @@ shell_bianse() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -5582,7 +5582,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "System Recycling Station" + send_stats "System Recycle Bin" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5597,17 +5597,17 @@ linux_trash() { fi clear - echo -e "Current recycling bin${trash_status}" - echo -e "After enabling, the files deleted by rm will first enter the recycling bin to prevent the mistaken deletion of important files!" + echo -e "Current recycle bin${trash_status}" + echo -e "After enabling it, files deleted by rm will be put into the recycle bin first to prevent accidental deletion of important files!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "The recycling bin is empty" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "Recycle bin is empty" echo "------------------------" echo "1. Enable the Recycle Bin 2. Close the Recycle Bin" echo "3. Restore content 4. Clear the recycling bin" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -5623,14 +5623,14 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "The recycling bin is closed and the file will be deleted directly." + echo "The recycle bin is closed and the files will be deleted directly." sleep 2 ;; 3) read -e -p "Enter the file name to restore:" file_to_restore if [ -e "$TRASH_DIR/$file_to_restore" ]; then mv "$TRASH_DIR/$file_to_restore" "$HOME/" - echo "$file_to_restoreRestored to home directory." + echo "$file_to_restoreRestored to the home directory." else echo "The file does not exist." fi @@ -5656,14 +5656,14 @@ bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/ # Create a backup create_backup() { - send_stats "Create a backup" + send_stats "Create backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # Prompt the user to enter the backup directory - echo "Create a backup example:" + echo "Example of creating a backup:" echo "- Backup a single directory: /var/www" - echo "- Backup multiple directories: /etc /home /var/log" - echo "- Direct Enter will use the default directory (/etc /usr /home)" + echo "- Back up multiple directories: /etc /home /var/log" + echo "- Press Enter to use the default directory (/etc /usr /home)" read -r -p "Please enter the directory to back up (multiple directories are separated by spaces, and if you enter directly, use the default directory):" input # If the user does not enter a directory, use the default directory @@ -5674,7 +5674,7 @@ create_backup() { "/home" # 用户数据 ) else - # Separate the directory entered by the user into an array by spaces + # Separate the directories entered by the user into an array by spaces IFS=' ' read -r -a BACKUP_PATHS <<< "$input" fi @@ -5698,14 +5698,14 @@ create_backup() { echo "- $path" done - # Create a backup + # Create backup echo "Creating a backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" # Check if the command is successful if [ $? -eq 0 ]; then - echo "The backup was created successfully:$BACKUP_DIR/$BACKUP_NAME" + echo "Backup created successfully:$BACKUP_DIR/$BACKUP_NAME" else echo "Backup creation failed!" exit 1 @@ -5724,13 +5724,13 @@ restore_backup() { exit 1 fi - echo "Recovering backup$BACKUP_NAME..." + echo "Restoring backup$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "Backup and restore successfully!" + echo "Backup and restore successful!" else - echo "Backup recovery failed!" + echo "Backup restore failed!" exit 1 fi } @@ -5757,7 +5757,7 @@ delete_backup() { rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "The backup was deleted successfully!" + echo "Backup deleted successfully!" else echo "Backup deletion failed!" exit 1 @@ -5779,7 +5779,7 @@ linux_backup() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; @@ -5810,23 +5810,23 @@ list_connections() { # Add a new connection add_connection() { send_stats "Add a new connection" - echo "Example to create a new connection:" + echo "Example of creating a new connection:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" echo "- Username: root" echo "- Port: 22" echo "------------------------" - read -e -p "Please enter the connection name:" name + read -e -p "Please enter a connection name:" name read -e -p "Please enter your IP address:" ip read -e -p "Please enter the username (default: root):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root read -e -p "Please enter the port number (default: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "Please select the authentication method:" + echo "Please select an authentication method:" echo "1. Password" echo "2. Key" - read -e -p "Please enter the selection (1/2):" auth_choice + read -e -p "Please enter your choice (1/2):" auth_choice case $auth_choice in 1) @@ -5837,7 +5837,7 @@ add_connection() { echo "Please paste the key content (press press Enter twice after pasting):" local password_or_key="" while IFS= read -r line; do - # If the input is a blank line and the key content already contains the beginning, end the input + # If the input is empty and the key content already contains the beginning, the input ends if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi @@ -5862,7 +5862,7 @@ add_connection() { esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "The connection is saved!" + echo "Connection saved!" } @@ -5870,11 +5870,11 @@ add_connection() { # Delete a connection delete_connection() { send_stats "Delete a connection" - read -e -p "Please enter the connection number to delete:" num + read -e -p "Please enter the connection number to be deleted:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "Error: The corresponding connection was not found." + echo "Error: Corresponding connection not found." return fi @@ -5896,7 +5896,7 @@ use_connection() { local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "Error: The corresponding connection was not found." + echo "Error: Corresponding connection not found." return fi @@ -5909,7 +5909,7 @@ use_connection() { if [[ $? -ne 0 ]]; then echo "Connection failed! Please check the following:" echo "1. Is the key file path correct?$password_or_key" - echo "2. Are the key file permissions correct (should be 600)." + echo "2. Whether the key file permissions are correct (should be 600)." echo "3. Whether the target server allows login using the key." fi else @@ -5924,7 +5924,7 @@ use_connection() { sshpass -p "$password_or_key" ssh -o StrictHostKeyChecking=no -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then echo "Connection failed! Please check the following:" - echo "1. Whether the username and password are correct." + echo "1. Are the username and password correct?" echo "2. Whether the target server allows password login." echo "3. Whether the SSH service of the target server is running normally." fi @@ -5950,15 +5950,15 @@ ssh_manager() { while true; do clear - echo "SSH Remote Connection Tool" - echo "Can be connected to other Linux systems via SSH" + echo "SSH remote connection tool" + echo "Can connect to other Linux systems via SSH" echo "------------------------" list_connections - echo "1. Create a new connection 2. Use a connection 3. Delete a connection" + echo "1. Create a new connection 2. Use the connection 3. Delete the connection" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case $choice in 1) add_connection ;; 2) use_connection ;; @@ -5982,14 +5982,14 @@ ssh_manager() { # List available hard disk partitions list_partitions() { - echo "Available hard disk partitions:" + echo "Available hard drive partitions:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } # Mount the partition mount_partition() { send_stats "Mount the partition" - read -e -p "Please enter the partition name to be mounted (for example, sda1):" PARTITION + read -e -p "Please enter the name of the partition to be mounted (e.g. sda1):" PARTITION # Check if the partition exists if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then @@ -5997,9 +5997,9 @@ mount_partition() { return fi - # Check if the partition is already mounted + # Check whether the partition is mounted if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "The partition is already mounted!" + echo "The partition has been mounted!" return fi @@ -6007,30 +6007,30 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # Mount partition + # Mount the partition mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "Partition mount successfully:$MOUNT_POINT" + echo "Partition mounted successfully:$MOUNT_POINT" else echo "Partition mount failed!" rmdir "$MOUNT_POINT" fi } -# Uninstall the partition +# Unmount partition unmount_partition() { - send_stats "Uninstall the partition" - read -e -p "Please enter the partition name (for example, sda1):" PARTITION + send_stats "Unmount partition" + read -e -p "Please enter the name of the partition to be unmounted (e.g. sda1):" PARTITION - # Check if the partition is already mounted + # Check whether the partition is mounted MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then echo "The partition is not mounted!" return fi - # Uninstall the partition + # Unmount partition umount "/dev/$PARTITION" if [ $? -eq 0 ]; then @@ -6060,17 +6060,17 @@ format_partition() { # Check if the partition is already mounted if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "The partition has been mounted, please uninstall it first!" + echo "The partition has been mounted, please unmount it first!" return fi - # Select a file system type + # Select file system type echo "Please select the file system type:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "Please enter your selection:" FS_CHOICE + read -e -p "Please enter your choice:" FS_CHOICE case $FS_CHOICE in 1) FS_TYPE="ext4" ;; @@ -6081,7 +6081,7 @@ format_partition() { esac # Confirm formatting - read -e -p "Confirm formatting partition /dev/$PARTITIONfor$FS_TYPEIs it? (y/n):" CONFIRM + read -e -p "Confirm formatted partition /dev/$PARTITIONfor$FS_TYPE? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then echo "The operation has been cancelled." return @@ -6114,22 +6114,22 @@ check_partition() { fsck "/dev/$PARTITION" } -# Main Menu +# Main menu disk_manager() { send_stats "Hard disk management function" while true; do clear echo "Hard disk partition management" - echo -e "${gl_huang}This function is internally tested during the test period, please do not use it in the production environment.${gl_bai}" + echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. Mount the partition 2. Uninstall the partition 3. View mounted partition" + echo "1. Mount the partition 2. Unmount the partition 3. View the mounted partition" echo "4. Format the partition 5. Check the partition status" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6155,8 +6155,8 @@ list_tasks() { # Add a new task add_task() { - send_stats "Add a new synchronization task" - echo "Create a new synchronization task example:" + send_stats "Add new sync task" + echo "Example of creating a new sync task:" echo "- Task name: backup_www" echo "- Local Directory: /var/www" echo "- Remote address: user@192.168.1.100" @@ -6166,7 +6166,7 @@ add_task() { read -e -p "Please enter the task name:" name read -e -p "Please enter the local directory:" local_path read -e -p "Please enter the remote directory:" remote_path - read -e -p "Please enter the remote user @IP:" remote + read -e -p "Please enter remote user@IP:" remote read -e -p "Please enter the SSH port (default 22):" port port=${port:-22} @@ -6177,15 +6177,15 @@ add_task() { case $auth_choice in 1) - read -s -p "Please enter your password:" password_or_key + read -s -p "Please enter password:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "Please paste the key content (press press Enter twice after pasting):" + echo "Please paste the key content (press Enter twice after pasting):" local password_or_key="" while IFS= read -r line; do - # If the input is empty and the key content already contains the beginning, the input ends + # If the input is a blank line and the key content already contains the beginning, end the input if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi @@ -6213,7 +6213,7 @@ add_task() { ;; esac - echo "Please select the synchronization mode:" + echo "Please select synchronization mode:" echo "1. Standard mode (-avz)" echo "2. Delete the target file (-avz --delete)" read -e -p "Please select (1/2):" mode @@ -6232,8 +6232,8 @@ add_task() { # Delete a task delete_task() { - send_stats "Delete synchronization tasks" - read -e -p "Please enter the task number to delete:" num + send_stats "Delete sync task" + read -e -p "Please enter the task number to be deleted:" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then @@ -6249,7 +6249,7 @@ delete_task() { fi sed -i "${num}d" "$CONFIG_FILE" - echo "Task deleted!" + echo "Task has been deleted!" } @@ -6289,7 +6289,7 @@ run_task() { source="$remote:$local_path" destination="$remote_path" else - echo "Push synchronization to the remote end:$local_path -> $remote:$remote_path" + echo "Pushing and synchronizing to the remote end:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi @@ -6322,9 +6322,9 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "Synchronization is complete!" + echo "Synchronization completed!" else - echo "Synchronization failed! Please check the following:" + echo "Sync failed! Please check the following:" echo "1. Is the network connection normal?" echo "2. Is the remote host accessible?" echo "3. Is the authentication information correct?" @@ -6333,9 +6333,9 @@ run_task() { } -# Create a timed task +# Create a scheduled task schedule_task() { - send_stats "Add synchronization scheduled tasks" + send_stats "Add synchronization timing tasks" read -e -p "Please enter the task number to be synchronized regularly:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6343,8 +6343,8 @@ schedule_task() { return fi - echo "Please select the timed execution interval:" - echo "1) Execute once an hour" + echo "Please select the scheduled execution interval:" + echo "1) Execute once every hour" echo "2) Perform once a day" echo "3) Execute once a week" read -e -p "Please enter options (1/2/3):" interval @@ -6355,7 +6355,7 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "Error: Please enter a valid option!" ; return ;; + *) echo "Error: Please enter valid options!" ; return ;; esac local cron_job="$cron_time k rsync_run $num" @@ -6363,7 +6363,7 @@ schedule_task() { # Check if the same task already exists if crontab -l | grep -q "k rsync_run $num"; then - echo "Error: The timing synchronization of this task already exists!" + echo "Error: The scheduled synchronization for this task already exists!" return fi @@ -6374,7 +6374,7 @@ schedule_task() { # View scheduled tasks view_tasks() { - echo "Current timing tasks:" + echo "Current scheduled tasks:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" @@ -6383,7 +6383,7 @@ view_tasks() { # Delete scheduled tasks delete_task_schedule() { send_stats "Delete synchronization timing tasks" - read -e -p "Please enter the task number to delete:" num + read -e -p "Please enter the task number to be deleted:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "Error: Please enter a valid task number!" return @@ -6394,7 +6394,7 @@ delete_task_schedule() { } -# Task Management Main Menu +# Task management main menu rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" @@ -6402,7 +6402,7 @@ rsync_manager() { while true; do clear echo "Rsync remote synchronization tool" - echo "Synchronization between remote directories supports incremental synchronization, efficient and stable." + echo "Synchronization between remote directories supports incremental synchronization, which is efficient and stable." echo "---------------------------------" list_tasks echo @@ -6410,11 +6410,11 @@ rsync_manager() { echo echo "1. Create a new task 2. Delete a task" echo "3. Perform local synchronization to the remote end 4. Perform remote synchronization to the local end" - echo "5. Create a timing task 6. Delete a timing task" + echo "5. Create a scheduled task 6. Delete a scheduled task" echo "---------------------------------" echo "0. Return to the previous menu" echo "---------------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6501,13 +6501,13 @@ linux_info() { echo -e "${gl_kjlan}Number of CPU cores:${gl_bai}$cpu_cores" echo -e "${gl_kjlan}CPU frequency:${gl_bai}$cpu_freq" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}CPU occupancy:${gl_bai}$cpu_usage_percent%" + echo -e "${gl_kjlan}CPU usage:${gl_bai}$cpu_usage_percent%" echo -e "${gl_kjlan}System load:${gl_bai}$load" echo -e "${gl_kjlan}Physical memory:${gl_bai}$mem_info" echo -e "${gl_kjlan}Virtual memory:${gl_bai}$swap_info" echo -e "${gl_kjlan}Hard disk occupation:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Total received:${gl_bai}$rx" + echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" echo -e "${gl_kjlan}Total send:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}Network algorithm:${gl_bai}$congestion_algorithm $queue_algorithm" @@ -6541,19 +6541,19 @@ linux_tools() { echo -e "Basic tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}3. ${gl_bai}sudo super management permission tool${gl_kjlan}4. ${gl_bai}socat communication connection tool" + echo -e "${gl_kjlan}3. ${gl_bai}sudo super administrative privilege tool${gl_kjlan}4. ${gl_bai}socat communication connection tool" echo -e "${gl_kjlan}5. ${gl_bai}htop system monitoring tool${gl_kjlan}6. ${gl_bai}iftop network traffic monitoring tool" - echo -e "${gl_kjlan}7. ${gl_bai}unzip ZIP compression decompression tool${gl_kjlan}8. ${gl_bai}tar GZ compression decompression tool" + echo -e "${gl_kjlan}7. ${gl_bai}unzip ZIP compression and decompression tool${gl_kjlan}8. ${gl_bai}tar GZ compression and decompression tool" echo -e "${gl_kjlan}9. ${gl_bai}tmux multi-channel background running tool${gl_kjlan}10. ${gl_bai}ffmpeg video encoding live streaming tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}btop modern monitoring tools${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}range file management tool" + echo -e "${gl_kjlan}11. ${gl_bai}btop modern monitoring tool${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}range file management tool" echo -e "${gl_kjlan}13. ${gl_bai}ncdu disk occupation viewing tool${gl_kjlan}14. ${gl_bai}fzf global search tool" echo -e "${gl_kjlan}15. ${gl_bai}vim text editor${gl_kjlan}16. ${gl_bai}nano text editor${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}17. ${gl_bai}git version control system" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}The Matrix Screen Guarantee${gl_kjlan}22. ${gl_bai}Train screen security" - echo -e "${gl_kjlan}26. ${gl_bai}Tetris game${gl_kjlan}27. ${gl_bai}Snake-eating game" - echo -e "${gl_kjlan}28. ${gl_bai}Space Invader Game" + echo -e "${gl_kjlan}21. ${gl_bai}The Matrix Screensaver${gl_kjlan}22. ${gl_bai}Train screen security" + echo -e "${gl_kjlan}26. ${gl_bai}Tetris mini game${gl_kjlan}27. ${gl_bai}Snake-eating game" + echo -e "${gl_kjlan}28. ${gl_bai}space invaders mini game" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${gl_bai}Install all${gl_kjlan}32. ${gl_bai}All installations (excluding screen savers and games)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${gl_bai}Uninstall all" @@ -6562,7 +6562,7 @@ linux_tools() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) @@ -6577,7 +6577,7 @@ linux_tools() { clear install wget clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" wget --help send_stats "Install wget" ;; @@ -6585,9 +6585,9 @@ linux_tools() { clear install sudo clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" sudo --help - send_stats "Install sudo" + send_stats "install sudo" ;; 4) clear @@ -6639,7 +6639,7 @@ linux_tools() { clear install ffmpeg clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" ffmpeg --help send_stats "Install ffmpeg" ;; @@ -6752,7 +6752,7 @@ linux_tools() { 32) clear - send_stats "Install all (excluding games and screen savers)" + send_stats "Install all (excluding games and screensavers)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; @@ -6804,18 +6804,18 @@ linux_bbr() { echo "Current TCP blocking algorithm:$congestion_algorithm $queue_algorithm" echo "" - echo "BBR management" + echo "BBR Management" echo "------------------------" - echo "1. Turn on BBRv3 2. Turn off BBRv3 (restarts)" + echo "1. Turn on BBRv3 2. Turn off BBRv3 (it will restart)" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) bbr_on - send_stats "Alpine enable bbr3" + send_stats "alpine opens bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6869,7 +6869,7 @@ docker_ssh_migration() { backup_docker() { send_stats "Docker backup" - echo -e "${YELLOW}Backing up Docker container...${NC}" + echo -e "${YELLOW}Backing up Docker containers...${NC}" docker ps --format '{{.Names}}' read -e -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers @@ -6884,7 +6884,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}No container found${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}Container not found${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6894,7 +6894,7 @@ docker_ssh_migration() { echo "set -e" >> "$RESTORE_SCRIPT" echo "# Automatically generated restore script" >> "$RESTORE_SCRIPT" - # Record the path of the packaged Compose project to avoid duplicate packaging + # Record the packaged Compose project path to avoid repeated packaging declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do @@ -6903,7 +6903,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}Detected$cYes docker-compose container${NC}" + echo -e "${BLUE}detected$cYes docker-compose container${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -6911,9 +6911,9 @@ docker_ssh_migration() { read -e -p "The compose directory is not detected, please enter the path manually:" project_dir fi - # If the Compose project has been packaged, skip it + # If the Compose project has already been packaged, skip if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose project [$project_name] Already backed up, skip repeated packaging...${NC}" + echo -e "${YELLOW}Compose project [$project_name] Backed up, skip duplicate packaging...${NC}" continue fi @@ -6921,19 +6921,19 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# docker-compose recovery:$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose restore:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 echo -e "${GREEN}Compose project [$project_name] Packed:${project_dir}${NC}" else - echo -e "${RED}docker-compose.yml not found, skip this container...${NC}" + echo -e "${RED}docker-compose.yml not found, skipping this container...${NC}" fi else - # Normal container backup volume + # Ordinary container backup volume local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "Packing rolls:$path" + echo "Packing volume:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done @@ -6942,7 +6942,7 @@ docker_ssh_migration() { mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[] | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$inspect_file" 2>/dev/null) for p in "${PORTS[@]}"; do PORT_ARGS+="-p $p "; done - # Environment variables + # environment variables local ENV_VARS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done @@ -6963,13 +6963,13 @@ docker_ssh_migration() { # Backup all files under /home/docker (excluding subdirectories) if [ -d "/home/docker" ]; then - echo -e "${BLUE}Backup the files under /home/docker...${NC}" + echo -e "${BLUE}Back up files under /home/docker...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}The file under /home/docker has been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}Backup is complete:${BACKUP_DIR}${NC}" + echo -e "${GREEN}Backup completed:${BACKUP_DIR}${NC}" echo -e "${GREEN}Available restore scripts:${RESTORE_SCRIPT}${NC}" @@ -6981,10 +6981,10 @@ docker_ssh_migration() { restore_docker() { send_stats "Docker restore" - read -e -p "Please enter the backup directory to restore:" BACKUP_DIR + read -e -p "Please enter the backup directory to be restored:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } - echo -e "${BLUE}Start the restore operation...${NC}" + echo -e "${BLUE}Starting the restore operation...${NC}" install tar jq gzip install_docker @@ -6996,16 +6996,16 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -e -p "The original path was not found, please enter the restore directory path:" original_path + [[ -z "$original_path" ]] && read -e -p "Original path not found, please enter the restore directory path:" original_path - # Check whether the container of the compose project is already running + # Check if the container for the compose project is already running running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then echo -e "${YELLOW}Compose project [$project_name] There is already a container running, skip restore...${NC}" continue fi - read -e -p "Confirm restoring the Compose project [$project_name] to path [$original_path] ? (y/n): " confirm + read -e -p "Confirm to restore Compose project [$project_name] to path [$original_path] ? (y/n): " confirm [[ "$confirm" != "y" ]] && read -e -p "Please enter a new restore path:" original_path mkdir -p "$original_path" @@ -7030,21 +7030,21 @@ docker_ssh_migration() { # Check if the container already exists and is running if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}Container [$container] is running, skip restore...${NC}" + echo -e "${YELLOW}container [$container] already running, skipping restore...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information was not found, skip:$container${NC}"; continue; } - # Port Mapping + # port mapping PORT_ARGS="" mapfile -t PORTS < <(jq -r '.[0].HostConfig.PortBindings | to_entries[]? | "\(.value[0].HostPort):\(.key | split("/")[0])"' "$json") for p in "${PORTS[@]}"; do [[ -n "$p" ]] && PORT_ARGS="$PORT_ARGS -p $p" done - # Environment variables + # environment variables ENV_ARGS="" mapfile -t ENVS < <(jq -r '.[0].Config.Env[]' "$json") for e in "${ENVS[@]}"; do @@ -7069,7 +7069,7 @@ docker_ssh_migration() { # Delete existing but not running containers if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}Container [$container] Exist but not running, delete the old container...${NC}" + echo -e "${YELLOW}container [$container] exists but is not running, delete the old container...${NC}" docker rm -f "$container" fi @@ -7078,16 +7078,16 @@ docker_ssh_migration() { eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for normal containers was found${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for common containers found${NC}" # Restore the file under /home/docker if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}Restore the file under /home/docker...${NC}" + echo -e "${BLUE}Restoring files under /home/docker...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}The file under /home/docker has been restored${NC}" + echo -e "${GREEN}Files under /home/docker have been restored${NC}" else - echo -e "${YELLOW}No backup of the file under /home/docker was found, skip...${NC}" + echo -e "${YELLOW}The backup of the file under /home/docker was not found, skipping...${NC}" fi @@ -7110,7 +7110,7 @@ docker_ssh_migration() { local LATEST_TAR="$BACKUP_DIR" - echo -e "${YELLOW}Transfer backup...${NC}" + echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then # Log in with key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" @@ -7123,14 +7123,14 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Docker backup file deletion" - read -e -p "Please enter the backup directory to delete:" BACKUP_DIR + read -e -p "Please enter the backup directory to be deleted:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}Deleted backup:${BACKUP_DIR}${NC}" } # ---------------------------- - # Main Menu + # Main menu # ---------------------------- main_menu() { send_stats "Docker backup migration and restore" @@ -7142,9 +7142,9 @@ docker_ssh_migration() { list_backups echo -e "" echo "------------------------" - echo -e "1. Backup the docker project" - echo -e "2. Migrate docker projects" - echo -e "3. Restore the docker project" + echo -e "1. Back up docker project" + echo -e "2. Migrate docker project" + echo -e "3. Restore docker project" echo -e "4. Delete the backup file of the docker project" echo "------------------------" echo -e "0. Return to the previous menu" @@ -7177,16 +7177,16 @@ linux_docker() { echo -e "Docker Management" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Install and update Docker environment${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Install and update the Docker environment${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}2. ${gl_bai}View Docker global status${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}3. ${gl_bai}Docker container management${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}4. ${gl_bai}Docker image management" - echo -e "${gl_kjlan}5. ${gl_bai}Docker Network Management" + echo -e "${gl_kjlan}5. ${gl_bai}Docker network management" echo -e "${gl_kjlan}6. ${gl_bai}Docker volume management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}Clean useless docker containers and mirror network data volumes" + echo -e "${gl_kjlan}7. ${gl_bai}Clean up useless docker containers and mirror network data volumes" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Replace Docker source" echo -e "${gl_kjlan}9. ${gl_bai}Edit daemon.json file" @@ -7194,7 +7194,7 @@ linux_docker() { echo -e "${gl_kjlan}11. ${gl_bai}Enable Docker-ipv6 access" echo -e "${gl_kjlan}12. ${gl_bai}Close Docker-ipv6 access" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}Backup/Migration/Restore Docker Environment" + echo -e "${gl_kjlan}19. ${gl_bai}Backup/migrate/restore Docker environment" echo -e "${gl_kjlan}20. ${gl_bai}Uninstall the Docker environment" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -7215,7 +7215,7 @@ linux_docker() { 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 "Docker global status" + send_stats "docker global status" echo "Docker version" docker -v docker compose version @@ -7227,10 +7227,10 @@ linux_docker() { echo -e "Docker container:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker volume:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker volumes:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker Network:${gl_lv}$network_count${gl_bai}" + echo -e "Docker network:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7245,7 +7245,7 @@ linux_docker() { 5) while true; do clear - send_stats "Docker Network Management" + send_stats "Docker network management" echo "Docker network list" echo "------------------------------------------------------------" docker network ls @@ -7270,26 +7270,26 @@ linux_docker() { done echo "" - echo "Network operation" + echo "network operations" echo "------------------------" echo "1. Create a network" - echo "2. Join the Internet" + echo "2. Join the network" echo "3. Exit the network" echo "4. Delete the network" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) - send_stats "Create a network" + send_stats "Create network" read -e -p "Set a new network name:" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "Join the Internet" - read -e -p "Join the network name:" dockernetwork + send_stats "Join the network" + read -e -p "Add network name:" dockernetwork read -e -p "Those containers are added to the network (multiple container names are separated by spaces):" dockernames for dockername in $dockernames; do @@ -7297,9 +7297,9 @@ linux_docker() { done ;; 3) - send_stats "Join the Internet" + send_stats "Join the network" read -e -p "Exit network name:" dockernetwork - read -e -p "Those containers exit the network (multiple container names are separated by spaces):" dockernames + read -e -p "Those containers exit the network (please separate multiple container names with spaces):" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7308,7 +7308,7 @@ linux_docker() { ;; 4) - send_stats "Delete the network" + send_stats "delete network" read -e -p "Please enter the network name to delete:" dockernetwork docker network rm $dockernetwork ;; @@ -7327,7 +7327,7 @@ linux_docker() { echo "Docker volume list" docker volume ls echo "" - echo "Volume operation" + echo "Volume operations" echo "------------------------" echo "1. Create a new volume" echo "2. Delete the specified volume" @@ -7335,12 +7335,12 @@ linux_docker() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) send_stats "Create a new volume" - read -e -p "Set the new volume name:" dockerjuan + read -e -p "Set new volume name:" dockerjuan docker volume create $dockerjuan ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 open" + send_stats "Docker v6 on" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 level" + send_stats "Docker v6 Close" docker_ipv6_off ;; @@ -7466,26 +7466,26 @@ linux_test() { echo -e "Test script collection" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}IP and unlock status detection" - echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT Unlock Status Detection" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT unlock status detection" echo -e "${gl_kjlan}2. ${gl_bai}Region streaming media unlock test" echo -e "${gl_kjlan}3. ${gl_bai}yeahwu streaming media unlock detection" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP quality physical examination script${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}Network speed measurement" echo -e "${gl_kjlan}11. ${gl_bai}besttrace three network backhaul delay routing test" - echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace Three-network backhaul line test" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace triple network backhaul line test" echo -e "${gl_kjlan}13. ${gl_bai}Superspeed three-net speed measurement" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace Specifies IP backhaul test script" - echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three-network line test" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace specifies IP backhaul test script" + echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three network line test" echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunction speed test script" echo -e "${gl_kjlan}18. ${gl_bai}NetQuality Network Quality Physical Examination Script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}Hardware performance testing" - echo -e "${gl_kjlan}21. ${gl_bai}yabs performance testing" - echo -e "${gl_kjlan}22. ${gl_bai}iicu/gb5 CPU performance test script" + echo -e "${gl_kjlan}21. ${gl_bai}yabs performance test" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU performance test script" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}Comprehensive test" @@ -7522,7 +7522,7 @@ linux_test() { 11) clear - send_stats "Besttrace three network backhaul delay routing test" + send_stats "besttrace triple network backhaul delay routing test" install wget wget -qO- git.io/besttrace | bash ;; @@ -7554,10 +7554,10 @@ linux_test() { echo "Shanghai Unicom: 210.22.97.1" echo "Shanghai Mobile: 211.136.112.200" echo "Guangzhou Telecom: 58.60.188.222" - echo "Guangzhou Unicom: 210.21.196.6" + echo "Guangzhou China Unicom: 210.21.196.6" echo "Guangzhou Mobile: 120.196.165.24" echo "Chengdu Telecom: 61.139.2.69" - echo "Chengdu Unicom: 119.6.6.6" + echo "Chengdu China Unicom: 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" @@ -7571,7 +7571,7 @@ linux_test() { 16) clear - send_stats "ludashi2020 three-network line test" + send_stats "ludashi2020 three network line test" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; @@ -7606,7 +7606,7 @@ linux_test() { curl -Lso- bench.sh | bash ;; 32) - send_stats "Spiritysdx Fusion Monster Review" + send_stats "spiritysdx fusion monster review" clear curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; @@ -7636,10 +7636,10 @@ linux_Oracle() { echo -e "Oracle Cloud Script Collection" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}Install idle machine active script" - echo -e "${gl_kjlan}2. ${gl_bai}Uninstall idle machine active script" + echo -e "${gl_kjlan}2. ${gl_bai}Uninstall active scripts from idle machines" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}3. ${gl_bai}DD reinstall system script" - echo -e "${gl_kjlan}4. ${gl_bai}Detective R start script" + echo -e "${gl_kjlan}4. ${gl_bai}Detective R startup script" echo -e "${gl_kjlan}5. ${gl_bai}Turn on ROOT password login mode" echo -e "${gl_kjlan}6. ${gl_bai}IPV6 recovery tool" echo -e "${gl_kjlan}------------------------" @@ -7651,23 +7651,23 @@ linux_Oracle() { 1) clear echo "Active script: CPU occupies 10-20% memory occupies 20%" - read -e -p "Are you sure to install it? (Y/N):" choice + read -e -p "Are you sure you want to install it? (Y/N):" choice case "$choice" in [Yy]) install_docker - # Set default values + # Set default value local DEFAULT_CPU_CORE=1 local DEFAULT_CPU_UTIL="10-20" local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 # Prompt the user to enter the number of CPU cores and occupancy percentage, and if entered, use the default value. - read -e -p "Please enter the number of CPU cores [Default:$DEFAULT_CPU_CORE]: " cpu_core + read -e -p "Please enter the number of CPU cores [default:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} - read -e -p "Please enter the CPU usage percentage range (for example, 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util + read -e -p "Please enter the CPU usage percentage range (e.g. 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL} read -e -p "Please enter the memory usage percentage [default:$DEFAULT_MEM_UTIL]: " mem_util @@ -7706,7 +7706,7 @@ linux_Oracle() { clear echo "Reinstall the system" echo "--------------------------------" - echo -e "${gl_hong}Notice:${gl_bai}Reinstallation is risky to lose contact, and those who are worried should use it with caution. Reinstallation is expected to take 15 minutes, please back up the data in advance." + echo -e "${gl_hong}Notice:${gl_bai}Reinstallation may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in @@ -7729,7 +7729,7 @@ linux_Oracle() { esac done - read -e -p "Please enter your reinstalled password:" vpspasswd + read -e -p "Please enter your password after reinstallation:" 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 Reinstall System Script" @@ -7756,7 +7756,7 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "This function is provided by the master jhb, thanks to him!" + echo "This function is provided by jhb, thank him!" send_stats "ipv6 fix" ;; 0) @@ -7840,20 +7840,20 @@ linux_ldnmp() { echo -e "${gl_huang}------------------------" echo -e "${gl_huang}1. ${gl_bai}Install LDNMP environment${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}Install WordPress${gl_huang}★${gl_bai}" echo -e "${gl_huang}3. ${gl_bai}Install Discuz Forum${gl_huang}4. ${gl_bai}Install the Kadao Cloud Desktop" - echo -e "${gl_huang}5. ${gl_bai}Install Apple CMS Film and Television Station${gl_huang}6. ${gl_bai}Install a Unicorn Digital Card Network" - echo -e "${gl_huang}7. ${gl_bai}Install the flarum forum website${gl_huang}8. ${gl_bai}Install typecho lightweight blog website" - echo -e "${gl_huang}9. ${gl_bai}Install LinkStack Shared Link Platform${gl_huang}20. ${gl_bai}Customize dynamic site" + echo -e "${gl_huang}5. ${gl_bai}Install Apple CMS Movie and TV Station${gl_huang}6. ${gl_bai}Install Unicorn Digital Card Network" + echo -e "${gl_huang}7. ${gl_bai}Install flarum forum website${gl_huang}8. ${gl_bai}Install typecho lightweight blog website" + echo -e "${gl_huang}9. ${gl_bai}Install LinkStack Shared Link Platform${gl_huang}20. ${gl_bai}Custom dynamic site" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}21. ${gl_bai}Install nginx only${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}site redirect" - echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy - domain name" - echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden password management platform${gl_huang}26. ${gl_bai}Install Halo Blog Website" + echo -e "${gl_huang}21. ${gl_bai}Only install nginx${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" + echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy-domain name" + echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden Password Management Platform${gl_huang}26. ${gl_bai}Install Halo Blog Site" echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" - echo -e "${gl_huang}30. ${gl_bai}Customize static site" + echo -e "${gl_huang}30. ${gl_bai}Custom static site" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up site-wide data" - echo -e "${gl_huang}33. ${gl_bai}Timed remote backup${gl_huang}34. ${gl_bai}Restore the entire site data" + echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up the entire site data" + echo -e "${gl_huang}33. ${gl_bai}Scheduled remote backup${gl_huang}34. ${gl_bai}Restore the entire site data" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}35. ${gl_bai}Protect LDNMP environment${gl_huang}36. ${gl_bai}Optimize LDNMP environment" + echo -e "${gl_huang}35. ${gl_bai}Protect LDNMP environments${gl_huang}36. ${gl_bai}Optimize LDNMP environment" echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall LDNMP environment" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}0. ${gl_bai}Return to main menu" @@ -7944,7 +7944,7 @@ linux_ldnmp() { 5) clear - # Apple CMS + # AppleCMS webname="苹果CMS" send_stats "Install$webname" echo "Start deployment$webname" @@ -7980,7 +7980,7 @@ linux_ldnmp() { echo "password:$dbusepasswd" echo "Database prefix: mac_" echo "------------------------" - echo "Log in to the background address after installation is successful" + echo "After successful installation, log in to the backend address" echo "https://$yuming/vip.php" ;; @@ -8018,17 +8018,17 @@ linux_ldnmp() { echo "password:$dbusepasswd" echo "" echo "redis address: redis" - echo "Redis password: Not filled in by default" - echo "Redis port: 6379" + echo "redis password: not filled in by default" + echo "redis port: 6379" echo "" echo "Website url: https://$yuming" - echo "Background login path: /admin" + echo "Backend login path: /admin" echo "------------------------" echo "Username: admin" echo "Password: admin" echo "------------------------" echo "If a red error0 appears in the upper right corner when logging in, please use the following command:" - echo "I am also very angry that the unicorn number card is so troublesome, and there will be such problems!" + echo "I am also very angry about why the Unicorn Number Card is so troublesome and has such problems!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8080,7 +8080,7 @@ linux_ldnmp() { echo "username:$dbuse" echo "password:$dbusepasswd" echo "Table prefix: flarum_" - echo "Administrator information is set by yourself" + echo "Administrator information can be set by oneself" ;; @@ -8183,7 +8183,7 @@ linux_ldnmp() { echo -e "[${gl_huang}1/6${gl_bai}] Upload PHP source code" echo "-------------" echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" - read -e -p "You can also enter the download link to remotely download the source code package. Directly press Enter to skip remote download:" url_download + read -e -p "You can also enter the download link to download the source code package remotely. Press Enter directly to skip the remote download:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8204,9 +8204,9 @@ linux_ldnmp() { sed -i "s#/home/web/#/var/www/#g" /home/web/conf.d/$yuming.conf clear - echo -e "[${gl_huang}3/6${gl_bai}] Please select the PHP version" + echo -e "[${gl_huang}3/6${gl_bai}] Please select PHP version" echo "-------------" - read -e -p "1. The latest version of php | 2. php7.4:" pho_v + read -e -p "1. php latest version | 2. php7.4:" pho_v case "$pho_v" in 1) sed -i "s#php:9000#php:9000#g" /home/web/conf.d/$yuming.conf @@ -8244,7 +8244,7 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}6/6${gl_bai}] Database Management" + echo -e "[${gl_huang}6/6${gl_bai}] Database management" echo "-------------" read -e -p "1. I build a new site 2. I build an old site and have a database backup:" use_db case $use_db in @@ -8263,7 +8263,7 @@ linux_ldnmp() { 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 "Database import table data" + echo "Database imported table data" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql echo "Database import completed" @@ -8299,7 +8299,7 @@ linux_ldnmp() { send_stats "Install$webname" echo "Start deployment$webname" add_yuming - read -e -p "Please enter the jump domain name:" reverseproxy + read -e -p "Please enter the redirect domain name:" reverseproxy nginx_install_status install_ssltls certs_status @@ -8321,7 +8321,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ ports have been blocked from accessing the service" + echo "IP+port has been blocked from accessing the service" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8451,8 +8451,8 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/2${gl_bai}] Upload static source code" echo "-------------" - echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" - read -e -p "You can also enter the download link to remotely download the source code package. Directly press Enter to skip remote download:" url_download + echo "Currently, only source code packages in zip format are allowed to be uploaded. Please put the source code packages in /home/web/html/${yuming}In the directory" + read -e -p "You can also enter the download link to download the source code package remotely. Press Enter directly to skip the remote download:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8534,7 +8534,7 @@ linux_ldnmp() { 33) clear - send_stats "Timed remote backup" + send_stats "Scheduled remote backup" read -e -p "Enter the remote server IP:" useip read -e -p "Enter the remote server password:" usepasswd @@ -8547,7 +8547,7 @@ linux_ldnmp() { echo "------------------------" echo "1. Weekly backup 2. Daily backup" - read -e -p "Please enter your selection:" dingshi + read -e -p "Please enter your choice:" dingshi case $dingshi in 1) @@ -8576,7 +8576,7 @@ linux_ldnmp() { echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename + read -e -p "Press the Enter key to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename if [ "$filename" == "0" ]; then break_end @@ -8602,7 +8602,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "No compression package was found." + echo "No compressed package found." fi ;; @@ -8659,7 +8659,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "Please enter${ldnmp_pods}Version number (such as: 8.0 8.3 8.4 9.0) (Enter to get the latest version):" version + read -e -p "Please enter${ldnmp_pods}Version number (such as: 8.0 8.3 8.4 9.0) (press enter to get the latest version):" version local version=${version:-latest} cd /home/web/ @@ -8676,7 +8676,7 @@ linux_ldnmp() { ;; 3) local ldnmp_pods="php" - read -e -p "Please enter${ldnmp_pods}Version number (such as: 7.4 8.0 8.1 8.2 8.3) (Enter to get the latest version):" version + read -e -p "Please enter${ldnmp_pods}Version number (such as: 7.4 8.0 8.1 8.2 8.3) (press enter to get the latest version):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8729,7 +8729,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "Completely update the LDNMP environment" + send_stats "Complete update of LDNMP environment" cd /home/web/ docker compose down --rmi all @@ -8799,12 +8799,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "Application Market" + echo -e "application market" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # Set the color with loop + # Set color with loop for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,23 +8813,23 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager Visual Panel" + echo -e "${gl_kjlan}1. ${color1}Official version of Baota Panel${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" + echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB Offline BT Magnetic Download Panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multiplayer online chat system" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendao project management software${gl_kjlan}12. ${color12}Qinglong Panel Timed Task Management Platform" + echo -e "${gl_kjlan}11. ${color11}ZenTao project management software${gl_kjlan}12. ${color12}Qinglong Panel Timed Task Management Platform" echo -e "${gl_kjlan}13. ${color13}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}Simple picture bed picture management program" echo -e "${gl_kjlan}15. ${color15}emby multimedia management system${gl_kjlan}16. ${color16}Speedtest speed test panel" - echo -e "${gl_kjlan}17. ${color17}AdGuardHome Adware${gl_kjlan}18. ${color18}onlyoffice online office OFFICE" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome removes adware${gl_kjlan}18. ${color18}onlyofficeOnline office OFFICE" echo -e "${gl_kjlan}19. ${color19}Thunder Pool WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" - echo -e "${gl_kjlan}23. ${color23}Memos web page memo${gl_kjlan}24. ${color24}Webtop remote desktop web version${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}23. ${color23}Memos web memo${gl_kjlan}24. ${color24}Webtop remote desktop web version${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed ​​Speed ​​Test Tool" - echo -e "${gl_kjlan}29. ${color29}searxng aggregation search site${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" + echo -e "${gl_kjlan}29. ${color29}searxng aggregated search station${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF tool collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel Navigation Panel${gl_kjlan}34. ${color34}Pingvin-Share file sharing platform" @@ -8838,42 +8838,42 @@ while true; do echo -e "${gl_kjlan}39. ${color39}Bililive live broadcast recording tool${gl_kjlan}40. ${color40}webssh web version SSH connection tool" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${color41}Mouse Management Panel${gl_kjlan}42. ${color42}Nexte remote connection tool" - echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk Remote Desk (Relay)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}Prometheus Monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tools" + echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk remote desktop (relay)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub acceleration station${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}Prometheus monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE Chicken Panel${gl_kjlan}52. ${color52}DPanel Container Management Panel" - echo -e "${gl_kjlan}53. ${color53}llama3 chat AI model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" + echo -e "${gl_kjlan}51. ${color51}PVE open chick panel${gl_kjlan}52. ${color52}DPanel container management panel" + echo -e "${gl_kjlan}53. ${color53}llama3 chat AI large model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI big model${gl_kjlan}58. ${color58}Dify large model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI big model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" + echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI large model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI Big Model Asset Management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow big model knowledge base" + echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow large model knowledge base" echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" echo -e "${gl_kjlan}65. ${color65}n8n Automation Workflow Platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" echo -e "${gl_kjlan}67. ${color67}ddns-go Dynamic DNS Management Tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL Certificate Management Platform" echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot Chat Robot Framework" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome Private Music Server${gl_kjlan}72. ${color72}bitwarden Password Manager${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV Private Film and Television${gl_kjlan}74. ${color74}MoonTV Private Movie" - echo -e "${gl_kjlan}75. ${color75}Melody Music Elf${gl_kjlan}76. ${color76}Online DOS old games" - echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki Intelligent Document Management System" + echo -e "${gl_kjlan}71. ${color71}Navidrome Private Music Server${gl_kjlan}72. ${color72}bitwarden password manager${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV Private Film and Television${gl_kjlan}74. ${color74}MoonTV private movies" + echo -e "${gl_kjlan}75. ${color75}Melody music wizard${gl_kjlan}76. ${color76}Online DOS old games" + echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki intelligent document management system" echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" - echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tools" + echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tool" echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" - echo -e "${gl_kjlan}87. ${color87}SyncTV movie watching artifact${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" + echo -e "${gl_kjlan}87. ${color87}SyncTV is a great tool for watching movies together${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser File Manager" + echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser file manager" echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" - echo -e "${gl_kjlan}95. ${color95}paperless document management platform${gl_kjlan}96. ${color96}2FAuth self-hosted two-step validator" - echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing point-to-point file synchronization tool" + echo -e "${gl_kjlan}95. ${color95}paperless document management platform${gl_kjlan}96. ${color96}2FAuth self-hosted two-step authenticator" + echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server)${gl_kjlan}98. ${color98}WireGuard networking (client)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing peer-to-peer file synchronization tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multi-person online chat system" + echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multiplayer online chat system" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" echo -e "${gl_kjlan}------------------------" @@ -9033,7 +9033,7 @@ while true; do docker_rum() { read -e -p "Set login username:" admin - read -e -p "Set the login user password:" admin_password + read -e -p "Set login user password:" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9076,7 +9076,7 @@ while true; do check_docker_image_update $docker_name clear echo -e "Nezha Monitoring$check_docker $update_status" - echo "Open source, lightweight and easy-to-use server monitoring and operation and maintenance tools" + echo "Open source, lightweight, easy-to-use server monitoring and operation and maintenance tool" echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -9088,7 +9088,7 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -9156,7 +9156,7 @@ while true; do clear echo -e "Post Office Services$check_docker $update_status" - echo "poste.io is an open source mail server solution." + echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" @@ -9166,13 +9166,13 @@ while true; do if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then echo -e "${gl_lv}port$portCurrently available${gl_bai}" else - echo -e "${gl_hong}port$portNot currently available${gl_bai}" + echo -e "${gl_hong}port$portCurrently unavailable${gl_bai}" fi echo "" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) - echo "Access address:" + echo "Visit address:" echo "https://$yuming" fi @@ -9181,7 +9181,7 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -9313,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -9397,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -9556,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "Build a Thunder Pool" + send_stats "Build a thunder pool" local app_id="19" local docker_name=safeline-mgt @@ -9564,8 +9564,8 @@ while true; do while true; do check_docker_app clear - echo -e "Thunder Pool Service$check_docker" - echo "Lei Chi is a WAF site firewall program panel developed by Changting Technology, which can reverse the agency site for automated defense." + echo -e "Thunder pool service$check_docker" + echo "Leichi is a WAF site firewall program panel developed by Changting Technology, which can reverse the site for automated defense." echo "Video introduction: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip @@ -9600,7 +9600,7 @@ while true; do add_app_id clear - echo "Thunder Pool WAF panel has been updated" + echo "The Leichi WAF panel has been updated" check_docker_app_ip ;; 3) @@ -10072,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya family bucket" + send_stats "Xiaoya Family Bucket" clear install_docker check_disk_space 1 @@ -10276,7 +10276,7 @@ while true; do prometheus_install clear ip_address - echo "Installed" + echo "Installation completed" check_docker_app_ip echo "The initial username and password are: admin" } @@ -10546,7 +10546,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10590,7 +10590,7 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "Installed" + echo "Installation completed" check_docker_app_ip echo "Initial username: admin" echo "Initial password: ChangeMe" @@ -10600,7 +10600,7 @@ while true; do docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "The app has been updated" + echo "App has been updated" } @@ -10610,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10935,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "Set the LibreTV login password:" app_passwd + read -e -p "Set LibreTV login password:" app_passwd docker run -d \ --name libretv \ @@ -10971,7 +10971,7 @@ while true; do docker_app_install() { read -e -p "Set login username:" admin read -e -p "Set the login user password:" admin_password - read -e -p "Enter the authorization code:" shouquanma + read -e -p "Enter authorization code:" shouquanma mkdir -p /home/docker/moontv @@ -11001,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "App has been uninstalled" + echo "The app has been uninstalled" } docker_app_plus @@ -11191,11 +11191,11 @@ while true; do sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # Start the container + # Start container docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11394,7 +11394,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11407,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11620,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11634,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "App has been uninstalled" + echo "The app has been uninstalled" } docker_app_plus @@ -11758,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11772,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11812,7 +11812,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11844,7 +11844,7 @@ while true; do docker_rum() { - read -e -p "Please enter the number of clients to form the network (default 5):" COUNT + read -e -p "Please enter the number of clients in the network (default 5):" COUNT COUNT=${COUNT:-5} read -e -p "Please enter the WireGuard segment (default 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} @@ -11916,15 +11916,15 @@ while true; do sleep 2 echo - echo -e "${gl_huang}All client QR code configuration:${gl_bai}" + echo -e "${gl_huang}All client QR code configurations:${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}All client configuration codes:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}All outputs are provided by each client. The usage method is as follows:${gl_bai}" - echo -e "${gl_lv}1. Download wg's APP on your mobile phone, scan the QR code above to quickly connect to the network${gl_bai}" + echo -e "${gl_lv}${COUNT}Configure all outputs for each client. The usage method is as follows:${gl_bai}" + echo -e "${gl_lv}1. Download the wg APP on your mobile phone and scan the QR code above to quickly connect to the Internet.${gl_bai}" echo -e "${gl_lv}2. Download the Windows client and copy the configuration code to connect to the network.${gl_bai}" echo -e "${gl_lv}3. Linux uses scripts to deploy WG clients and copy configuration code to connect to the network.${gl_bai}" echo -e "${gl_lv}Official client download method: https://www.wireguard.com/install/${gl_bai}" @@ -11955,12 +11955,12 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # Create directory if it does not exist + # Create a directory (if it does not exist) mkdir -p "$(dirname "$CONFIG_FILE")" echo "Please paste your client configuration and press Enter twice in a row to save:" - # Initialize variables + # initialize variables input="" empty_line_count=0 @@ -11980,7 +11980,7 @@ while true; do # Write to the configuration file echo "$input" > "$CONFIG_FILE" - echo "Client configuration has been saved to$CONFIG_FILE" + echo "Client configuration saved to$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12028,7 +12028,7 @@ while true; do read -e -p "Set the number of CPU cores (default 2):" CPU_CORES local CPU_CORES=${CPU_CORES:-2} - read -e -p "Set the memory size (default 4G):" RAM_SIZE + read -e -p "Set memory size (default 4G):" RAM_SIZE local RAM_SIZE=${RAM_SIZE:-4} mkdir -p /home/docker/dsm @@ -12045,7 +12045,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -12114,7 +12114,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -12129,7 +12129,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "App has been uninstalled" + echo "The app has been uninstalled" } docker_app_plus @@ -12138,7 +12138,7 @@ while true; do - 102) + 102|vocechat) local app_id="102" local docker_name="vocechat-server" @@ -12193,7 +12193,7 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "The file has been transferred to the remote server/root directory." + echo "File transferred to remote server/root directory." else echo "The file to be transferred was not found." fi @@ -12215,7 +12215,7 @@ while true; do echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "Enter to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename + read -e -p "Press the Enter key to restore the latest backup, enter the backup file name to restore the specified backup, enter 0 to exit:" filename if [ "$filename" == "0" ]; then break_end @@ -12232,7 +12232,7 @@ while true; do cd / && tar -xzf "$filename" echo "The application data has been restored. Please manually enter the specified application menu and update the application to restore the application." else - echo "No compressed package found." + echo "No compression package was found." fi ;; @@ -12257,7 +12257,7 @@ linux_work() { clear send_stats "Backend workspace" echo -e "Backend workspace" - echo -e "The system will provide you with a workspace that can be run on the backend, which you can use to perform long-term tasks." + echo -e "The system will provide you with a workspace that can run permanently in the background, which you can use to perform long-term tasks." echo -e "Even if you disconnect SSH, tasks in the workspace will not be interrupted, and tasks in the background will be resident." echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and press d alone to exit the workspace!" echo -e "${gl_kjlan}------------------------" @@ -12266,24 +12266,24 @@ linux_work() { tmux list-sessions echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}Workspace No. 1" - echo -e "${gl_kjlan}2. ${gl_bai}Workspace No. 2" + echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Workspace No. 3" echo -e "${gl_kjlan}4. ${gl_bai}Workspace No. 4" echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" - echo -e "${gl_kjlan}7. ${gl_bai}Workspace No. 7" + echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Workspace No. 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}Workspace No. 10" + echo -e "${gl_kjlan}10. ${gl_bai}Workspace 10" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}SSH resident mode${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}22. ${gl_bai}Create/enter the workspace" + echo -e "${gl_kjlan}22. ${gl_bai}Create/enter workspace" echo -e "${gl_kjlan}23. ${gl_bai}Inject commands into the background workspace" echo -e "${gl_kjlan}24. ${gl_bai}Delete the specified workspace" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -12291,7 +12291,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; @@ -12306,7 +12306,7 @@ linux_work() { clear install tmux local SESSION_NAME="work3" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 4) @@ -12320,14 +12320,14 @@ linux_work() { clear install tmux local SESSION_NAME="work5" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 6) clear install tmux local SESSION_NAME="work6" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 7) @@ -12341,21 +12341,21 @@ linux_work() { clear install tmux local SESSION_NAME="work8" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; @@ -12369,19 +12369,19 @@ linux_work() { fi send_stats "SSH resident mode" echo -e "SSH resident mode${tmux_sshd_status}" - echo "After opening the SSH connection, it will directly enter the resident mode and return directly to the previous working state." + echo "After SSH connection is enabled, it will directly enter the resident mode and return to the previous working state." echo "------------------------" echo "1. Turn on 2. Turn off" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" gongzuoqu_del + read -e -p "Please enter your choice:" gongzuoqu_del case "$gongzuoqu_del" in 1) install tmux local SESSION_NAME="sshd" send_stats "Start the workspace$SESSION_NAME" - grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\n# Automatically enter the tmux session\nif [[ -z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc + grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\n# Automatically enter tmux session\nif [[ -z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc source ~/.bashrc tmux_run ;; @@ -12412,7 +12412,7 @@ linux_work() { 24) read -e -p "Please enter the name of the workspace you want to delete:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "Delete the workspace" + send_stats "Delete workspace" ;; 0) @@ -12445,25 +12445,25 @@ linux_Settings() { while true; do clear # send_stats "System Tools" - echo -e "System Tools" + echo -e "system tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut keys${gl_kjlan}2. ${gl_bai}Change login password" echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" - echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify SSH connection port" - echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}One-click reinstallation system${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account to create a new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" + echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify the SSH connection port" + echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}Reinstall the system with one click${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account and create new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}Check port occupation status${gl_kjlan}12. ${gl_bai}Modify virtual memory size" - echo -e "${gl_kjlan}13. ${gl_bai}User Management${gl_kjlan}14. ${gl_bai}User/Password Generator" + echo -e "${gl_kjlan}13. ${gl_bai}User Management${gl_kjlan}14. ${gl_bai}User/password generator" echo -e "${gl_kjlan}15. ${gl_bai}System time zone adjustment${gl_kjlan}16. ${gl_bai}Set up BBR3 acceleration" echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" - echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Timing task management" + echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Scheduled task management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}Native host parsing${gl_kjlan}22. ${gl_bai}SSH Defense Program" + echo -e "${gl_kjlan}21. ${gl_bai}Native host resolution${gl_kjlan}22. ${gl_bai}SSH defense program" echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Optimization of kernel parameters in Linux system${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tool${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}File Manager" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Linux system kernel parameter optimization${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tools${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}file manager" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${gl_bai}Switch system language${gl_kjlan}32. ${gl_bai}Command line beautification tool${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${gl_bai}Set up system recycle bin${gl_kjlan}34. ${gl_bai}System backup and recovery" @@ -12471,8 +12471,8 @@ linux_Settings() { echo -e "${gl_kjlan}37. ${gl_bai}Command line history${gl_kjlan}38. ${gl_bai}rsync remote synchronization tool" echo -e "${gl_kjlan}39. ${gl_bai}Command Favorites${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system tuning${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and Security" + echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system optimization${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and security" echo -e "${gl_kjlan}101. ${gl_bai}Advanced usage of k command${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}Uninstall tech lion script" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -12483,7 +12483,7 @@ linux_Settings() { 1) while true; do clear - read -e -p "Please enter your shortcut key (enter 0 to exit):" kuaijiejian + read -e -p "Please enter your shortcut keys (enter 0 to exit):" kuaijiejian if [ "$kuaijiejian" == "0" ]; then break_end linux_Settings @@ -12491,7 +12491,7 @@ linux_Settings() { 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 "Shortcut keys are set" - send_stats "Script shortcut keys have been set" + send_stats "Script shortcut key has been set" break_end linux_Settings done @@ -12512,7 +12512,7 @@ linux_Settings() { 4) root_use send_stats "py version management" - echo "Python version management" + echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" echo "This feature seamlessly installs any version officially supported by python!" @@ -12526,7 +12526,7 @@ linux_Settings() { if [[ "$py_new_v" == "0" ]]; then - send_stats "Script PY Management" + send_stats "Script PY management" break_end linux_Settings fi @@ -12589,7 +12589,7 @@ EOF local VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" - send_stats "Switch script PY version" + send_stats "Script PY version switching" ;; @@ -12612,13 +12612,13 @@ EOF # Read the current SSH port number local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') - # Print the current SSH port number + # Print current SSH port number echo -e "The current SSH port number is:${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "Numbers with port numbers ranging from 1 to 65535. (Enter 0 to exit)" + echo "The port number ranges from 1 to 65535. (Enter 0 to exit)" - # Prompt the user to enter a new SSH port number + # Prompt user for new SSH port number read -e -p "Please enter the new SSH port number:" new_port # Determine whether the port number is within the valid range @@ -12636,7 +12636,7 @@ EOF fi else echo "The input is invalid, please enter the number." - send_stats "Invalid SSH port input" + send_stats "Invalid SSH port entered" break_end fi done @@ -12656,7 +12656,7 @@ EOF 9) root_use send_stats "New users disable root" - read -e -p "Please enter the new username (enter 0 to exit):" new_username + read -e -p "Please enter a new username (enter 0 to exit):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12671,7 +12671,7 @@ EOF passwd -l root - echo "The operation has been completed." + echo "The operation is complete." ;; @@ -12714,7 +12714,7 @@ EOF 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "This function is provided by the master jhb, thanks to him!" + echo "This function is provided by jhb, thank him!" send_stats "ipv6 fix" ;; @@ -12761,7 +12761,7 @@ EOF ;; 3) - send_stats "4G virtual memory has been set" + send_stats "4G virtual memory has been set up" add_swap 4096 ;; @@ -12769,7 +12769,7 @@ EOF 4) read -e -p "Please enter the virtual memory size (unit M):" new_swap add_swap "$new_swap" - send_stats "Custom virtual memory has been set" + send_stats "Custom virtual memory set" ;; *) @@ -12782,8 +12782,8 @@ EOF 13) while true; do root_use - send_stats "User Management" - echo "User List" + send_stats "User management" + echo "User list" echo "----------------------------------------------------------------------------" printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" while IFS=: read -r username _ userid groupid _ _ homedir shell; do @@ -12794,13 +12794,13 @@ EOF echo "" - echo "Account operations" + echo "Account operation" echo "------------------------" - echo "1. Create a normal account 2. Create a premium account" + echo "1. Create a regular account 2. Create a premium account" echo "------------------------" - echo "3. Give the highest permissions 4. Cancel the highest permissions" + echo "3. Grant the highest authority 4. Remove the highest authority" echo "------------------------" - echo "5. Delete the account" + echo "5. Delete account" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -12808,7 +12808,7 @@ EOF case $sub_choice in 1) - # Prompt the user to enter a new username + # Prompt user for new username read -e -p "Please enter a new username:" new_username # Create a new user and set a password @@ -12822,7 +12822,7 @@ EOF # Prompt the user to enter a new username read -e -p "Please enter a new username:" new_username - # Create a new user and set a password + # Create new user and set password useradd -m -s /bin/bash "$new_username" passwd "$new_username" @@ -12842,14 +12842,14 @@ EOF install sudo ;; 4) - read -e -p "Please enter your username:" username + read -e -p "Please enter username:" username # Remove user's sudo permissions from sudoers file sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) read -e -p "Please enter the username to delete:" username - # Delete the user and its home directory + # Delete users and their home directories userdel -r "$username" ;; @@ -12897,7 +12897,7 @@ EOF echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - echo "Random password$i: $password" + echo "random password$i: $password" done echo "" @@ -12929,26 +12929,26 @@ EOF echo "Current system time:$current_time" echo "" - echo "Time zone switching" + echo "time zone switch" echo "------------------------" echo "Asia" - echo "1. Shanghai time in China 2. Hong Kong time in China" - echo "3. Tokyo time in Japan 4. Seoul time in South Korea" - echo "5. Singapore time 6. Kolkata time in India" + echo "1. Shanghai, China time 2. Hong Kong time, China" + echo "3. Tokyo, Japan time 4. Seoul, South Korea time" + echo "5. Singapore time 6. Kolkata, India time" echo "7. Dubai time in the UAE 8. Sydney time in Australia" echo "9. Time in Bangkok, Thailand" echo "------------------------" echo "Europe" echo "11. London time in the UK 12. Paris time in France" - echo "13. Berlin time, Germany 14. Moscow time, Russia" + echo "13. Berlin, Germany time 14. Moscow, Russia time" echo "15. Utrecht time in the Netherlands 16. Madrid time in Spain" echo "------------------------" echo "America" - echo "21. Western Time 22. Eastern Time" + echo "21. US Western Time 22. US Eastern Time" echo "23. Canadian time 24. Mexican time" echo "25. Brazil Time 26. Argentina Time" echo "------------------------" - echo "31. UTC Global Standard Time" + echo "31. UTC global standard time" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -13009,7 +13009,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Other systems, such as Debian, Ubuntu, CentOS, etc. + # Other systems such as Debian, Ubuntu, CentOS, etc. hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13027,8 +13027,8 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "The host name has been changed to:$new_hostname" - send_stats "Host name has been changed" + echo "The hostname has been changed to:$new_hostname" + send_stats "Hostname changed" sleep 1 else echo "Exited, hostname not changed." @@ -13044,7 +13044,7 @@ EOF echo "Select the update source area" echo "Connect to LinuxMirrors to switch system update source" echo "------------------------" - echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas Regions" + echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas regions" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -13052,7 +13052,7 @@ EOF case $choice in 1) - send_stats "Default source in mainland China" + send_stats "Mainland China default source" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) @@ -13072,34 +13072,34 @@ EOF ;; 20) - send_stats "Timing task management" + send_stats "Scheduled task management" while true; do clear check_crontab_installed clear - echo "Timed task list" + echo "Scheduled task list" crontab -l echo "" echo "operate" echo "------------------------" - echo "1. Add timing tasks 2. Delete timing tasks 3. Edit timing tasks" + echo "1. Add a scheduled task 2. Delete a scheduled task 3. Edit a scheduled task" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) - read -e -p "Please enter the execution command for the new task:" newquest + read -e -p "Please enter the execution command of the new task:" newquest echo "------------------------" - echo "1. Monthly Tasks 2. Weekly Tasks" + echo "1. Monthly tasks 2. Weekly tasks" echo "3. Daily tasks 4. Hourly tasks" echo "------------------------" read -e -p "Please enter your selection:" dingshi case $dingshi in 1) - read -e -p "Choose what day of each month to perform tasks? (1-30):" day + read -e -p "On what day of the month do you choose to execute the task? (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) @@ -13107,11 +13107,11 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "Choose what time to perform tasks every day? (Hours, 0-23):" hour + read -e -p "What time do you choose to perform the task every day? (hours, 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "Enter what minute of the hour to perform the task? (mins, 0-60):" minute + read -e -p "Enter what time of the hour the task should be executed? (minutes, 0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) @@ -13139,7 +13139,7 @@ EOF 21) root_use - send_stats "Local host parsing" + send_stats "Local host resolution" while true; do clear echo "Native host parsing list" @@ -13148,11 +13148,11 @@ EOF echo "" echo "operate" echo "------------------------" - echo "1. Add a new parsing 2. Delete the parsing address" + echo "1. Add new resolution 2. Delete resolution address" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" host_dns + read -e -p "Please enter your choice:" host_dns case $host_dns in 1) @@ -13164,7 +13164,7 @@ EOF 2) read -e -p "Please enter the keywords of the parsed content that need to be deleted:" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "Local host parsing and deletion" + send_stats "Local host resolution and deletion" ;; *) break # 跳出循环,退出菜单 @@ -13179,7 +13179,7 @@ EOF while true; do check_f2b_status - echo -e "SSH Defense Program$check_f2b_status" + echo -e "SSH defense program$check_f2b_status" echo "fail2ban is an SSH tool to prevent brute force" echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" @@ -13192,7 +13192,7 @@ EOF echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -13230,20 +13230,20 @@ EOF send_stats "Current limit shutdown function" while true; do clear - echo "Current limit shutdown function" + echo "Current limiting shutdown function" echo "Video introduction: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "Current traffic usage, restarting the server traffic calculation will be cleared!" + echo "The current traffic usage will be cleared when the server is restarted!" output_status - echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" + echo -e "${gl_kjlan}Total received:${gl_bai}$rx" echo -e "${gl_kjlan}Total send:${gl_bai}$tx" - # Check if the Limiting_Shut_down.sh file exists + # Check if Limiting_Shut_down.sh file exists if [ -f ~/Limiting_Shut_down.sh ]; then # Get the value of threshold_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}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" + echo -e "${gl_lv}The current set entry-station current limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The current outbound current limit threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else echo -e "${gl_hui}Current limit shutdown function is not enabled${gl_bai}" @@ -13251,7 +13251,7 @@ EOF echo echo "------------------------------------------------" - echo "The system will detect whether the actual traffic reaches the threshold every minute, and the server will be automatically shut down after it arrives!" + echo "The system will detect whether the actual traffic reaches the threshold every minute, and will automatically shut down the server after reaching the threshold!" echo "------------------------" echo "1. Turn on the current limit shutdown function 2. Deactivate the current limit shutdown function" echo "------------------------" @@ -13262,12 +13262,12 @@ EOF case "$Limiting" in 1) # Enter the new virtual memory size - echo "If the actual server has 100G traffic, the threshold can be set to 95G and shut down the power in advance to avoid traffic errors or overflows." - read -e -p "Please enter the incoming traffic threshold (unit is G, default is 100G):" rx_threshold_gb + echo "If the actual server only has 100G traffic, you can set the threshold to 95G and shut down in advance to avoid traffic errors or overflows." + read -e -p "Please enter the inbound traffic threshold (unit is G, default is 100G):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "Please enter the outbound traffic threshold (unit is G, default is 100G):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "Please enter the traffic reset date (default resets on the 1st of every month):" cz_day + read -e -p "Please enter the traffic reset date (default reset on the 1st of each month):" cz_day cz_day=${cz_day:-1} cd ~ @@ -13317,7 +13317,7 @@ EOF case $host_dns in 1) - send_stats "Generate a new key" + send_stats "Generate new key" add_sshkey break_end @@ -13350,13 +13350,13 @@ EOF 25) root_use - send_stats "Telegram warning" + send_stats "Telegraph warning" echo "TG-bot monitoring and early warning function" echo "Video introduction: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" echo "You need to configure the tg robot API and the user ID to receive alerts to achieve real-time monitoring and alerts of local CPU, memory, hard disk, traffic, and SSH login." echo "After reaching the threshold, the user will be sent to the user" - echo -e "${gl_hui}- Regarding traffic, restarting the server will recalculate-${gl_bai}" + echo -e "${gl_hui}- Regarding traffic, restarting the server will recalculate -${gl_bai}" read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in @@ -13394,7 +13394,7 @@ EOF source ~/.profile clear - echo "TG-bot early warning system has been started" + echo "TG-bot early warning system has been activated" 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]) @@ -13475,7 +13475,7 @@ EOF 41) clear - send_stats "Message board" + send_stats "message board" echo "Visit the official message board of Technology lion. If you have any ideas about scripts, please leave a message and communicate!" echo "https://board.kejilion.pro" echo "Public password: kejilion.sh" @@ -13485,9 +13485,9 @@ EOF root_use send_stats "One-stop tuning" - echo "One-stop system optimization" + echo "One-stop system tuning" echo "------------------------------------------------" - echo "The following will be operated and optimized" + echo "The following content will be operated and optimized" echo "1. Update the system to the latest" echo "2. Clean up system junk files" echo -e "3. Set up virtual memory${gl_huang}1G${gl_bai}" @@ -13495,8 +13495,8 @@ EOF echo -e "5. Open all ports" echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "7. Set the time zone to${gl_huang}Shanghai${gl_bai}" - echo -e "8. Automatically optimize DNS address${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "9. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "8. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" + echo -e "9. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10. Switch to kernel parameter optimization in Linux system${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" read -e -p "Are you sure to have one-click maintenance? (Y/N):" choice @@ -13530,7 +13530,7 @@ EOF echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. Set the time zone to${gl_huang}Shanghai${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 7/10. Set time zone to${gl_huang}Shanghai${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13590,13 +13590,13 @@ EOF fi echo "Privacy and security" - echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used," + echo "The script will collect data on users’ use of functions, optimize the script experience, and create more fun and useful functions." + echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" - echo "1. Turn on collection" - echo "2. Close the collection" + echo "1. Start collection" + echo "2. Close collection" echo "--------------------" echo "0. Return to the previous menu" echo "--------------------" @@ -13606,15 +13606,15 @@ EOF 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 "Collection has been enabled" - send_stats "Privacy and security collection has been enabled" + echo "Collection has been started" + send_stats "Privacy and security collection has been turned on" ;; 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 "Collection closed" - send_stats "Privacy and Security have been closed for collection" + send_stats "Privacy and security collection has been turned off" ;; *) break @@ -13633,7 +13633,7 @@ EOF send_stats "Uninstall tech lion script" echo "Uninstall tech lion script" echo "------------------------------------------------" - echo "Will completely uninstall the kejilion script and will not affect your other functions" + echo "The kejilion script will be completely uninstalled without affecting your other functions." read -e -p "Are you sure to continue? (Y/N):" choice case "$choice" in @@ -13682,9 +13682,9 @@ linux_file() { send_stats "File Manager" while true; do clear - echo "File Manager" + echo "file manager" echo "------------------------" - echo "Current path" + echo "current path" pwd echo "------------------------" ls --color=auto -x @@ -13696,22 +13696,22 @@ linux_file() { echo "15. Delete the file" echo "------------------------" echo "21. Compress file directory 22. Unzip file directory 23. Move file directory 24. Copy file directory" - echo "25. Pass the file to another server" + echo "25. Transfer files to other servers" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" Limiting + read -e -p "Please enter your choice:" Limiting case "$Limiting" in 1) # 进入目录 read -e -p "Please enter the directory name:" dirname - cd "$dirname" 2>/dev/null || echo "Unable to enter directory" - send_stats "Go to the directory" + cd "$dirname" 2>/dev/null || echo "Unable to enter the directory" + send_stats "Enter directory" ;; 2) # 创建目录 - read -e -p "Please enter the directory name to create:" dirname + read -e -p "Please enter the directory name to be created:" dirname mkdir -p "$dirname" && echo "Directory created" || echo "Creation failed" - send_stats "Create a directory" + send_stats "Create directory" ;; 3) # 修改目录权限 read -e -p "Please enter the directory name:" dirname @@ -13721,13 +13721,13 @@ linux_file() { ;; 4) # 重命名目录 read -e -p "Please enter the current directory name:" current_name - read -e -p "Please enter the new directory name:" new_name + read -e -p "Please enter a new directory name:" new_name mv "$current_name" "$new_name" && echo "Directory has been renamed" || echo "Rename failed" send_stats "Rename the directory" ;; 5) # 删除目录 - read -e -p "Please enter the directory name to delete:" dirname - rm -rf "$dirname" && echo "Directory has been deleted" || echo "Delete failed" + read -e -p "Please enter the directory name to be deleted:" dirname + rm -rf "$dirname" && echo "Directory deleted" || echo "Delete failed" send_stats "Delete Directory" ;; 6) # 返回上一级选单目录 @@ -13743,19 +13743,19 @@ linux_file() { read -e -p "Please enter the file name to edit:" filename install nano nano "$filename" - send_stats "Edit files" + send_stats "Edit file" ;; 13) # 修改文件权限 - read -e -p "Please enter the file name:" filename - read -e -p "Please enter permissions (such as 755):" perm + read -e -p "Please enter a file name:" filename + read -e -p "Please enter permissions (e.g. 755):" perm chmod "$perm" "$filename" && echo "Permissions have been modified" || echo "Modification failed" send_stats "Modify file permissions" ;; 14) # 重命名文件 read -e -p "Please enter the current file name:" current_name read -e -p "Please enter a new file name:" new_name - mv "$current_name" "$new_name" && echo "File has been renamed" || echo "Rename failed" - send_stats "Rename the file" + mv "$current_name" "$new_name" && echo "File renamed" || echo "Rename failed" + send_stats "Rename file" ;; 15) # 删除文件 read -e -p "Please enter the file name to delete:" filename @@ -13771,22 +13771,22 @@ linux_file() { 22) # 解压文件/目录 read -e -p "Please enter the file name (.tar.gz):" filename install tar - tar -xzvf "$filename" && echo "Decompressed$filename" || echo "Decompression failed" + tar -xzvf "$filename" && echo "Unzipped$filename" || echo "Decompression failed" send_stats "Unzip files/directories" ;; 23) # 移动文件或目录 - read -e -p "Please enter the file or directory path to move:" src_path + read -e -p "Please enter the file or directory path to be moved:" src_path if [ ! -e "$src_path" ]; then echo "Error: The file or directory does not exist." - send_stats "Failed to move file or directory: File or directory does not exist" + send_stats "Failed to move a file or directory: The file or directory does not exist" continue fi read -e -p "Please enter the destination path (including new file or directory name):" dest_path if [ -z "$dest_path" ]; then - echo "Error: Please enter the target path." - send_stats "Moving file or directory failed: The destination path is not specified" + echo "Error: Please enter destination path." + send_stats "Failed to move file or directory: Destination path not specified" continue fi @@ -13803,10 +13803,10 @@ linux_file() { continue fi - read -e -p "Please enter the target path (including the new file name or directory name):" dest_path + read -e -p "Please enter the destination path (including new file or directory name):" dest_path if [ -z "$dest_path" ]; then - echo "Error: Please enter the target path." - send_stats "Failed to copy file or directory: Destination path not specified" + echo "Error: Please enter destination path." + send_stats "Copying file or directory failed: Destination path not specified" continue fi @@ -13819,15 +13819,15 @@ linux_file() { 25) # 传送文件至远端服务器 read -e -p "Please enter the file path to be transferred:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "Error: The file does not exist." - send_stats "Failed to transfer the file: The file does not exist" + echo "Error: File does not exist." + send_stats "Failed to transfer file: file does not exist" continue fi read -e -p "Please enter the remote server IP:" remote_ip if [ -z "$remote_ip" ]; then echo "Error: Please enter the remote server IP." - send_stats "File transfer failed: Remote server IP was not entered" + send_stats "File transfer failed: Remote server IP not entered" continue fi @@ -13856,7 +13856,7 @@ EOF if [ $? -eq 0 ]; then echo "The file has been transferred to the remote server home directory." - send_stats "File transfer successfully" + send_stats "File transfer successful" else echo "File transfer failed." send_stats "File transfer failed" @@ -13868,7 +13868,7 @@ EOF 0) # 返回上一级选单 - send_stats "Return to the previous menu" + send_stats "Return to the previous menu menu" break ;; *) # 处理无效输入 @@ -13902,7 +13902,7 @@ run_commands_on_servers() { # Convert extracted information into an array IFS=$'\n' read -r -d '' -a SERVER_ARRAY <<< "$SERVERS" - # Iterate through the server and execute commands + # Traverse the server and execute commands for ((i=0; i<${#SERVER_ARRAY[@]}; i+=5)); do local name=${SERVER_ARRAY[i]} local hostname=${SERVER_ARRAY[i+1]} @@ -13932,18 +13932,18 @@ fi while true; do clear - send_stats "Cluster Control Center" + send_stats "Cluster control center" echo "Server cluster control" cat ~/cluster/servers.py echo echo -e "${gl_kjlan}------------------------${gl_bai}" - echo -e "${gl_kjlan}Server list management${gl_bai}" - echo -e "${gl_kjlan}1. ${gl_bai}Add a server${gl_kjlan}2. ${gl_bai}Delete the server${gl_kjlan}3. ${gl_bai}Edit the server" - echo -e "${gl_kjlan}4. ${gl_bai}Backup cluster${gl_kjlan}5. ${gl_bai}Restore the cluster" + echo -e "${gl_kjlan}Server List Management${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Add server${gl_kjlan}2. ${gl_bai}Delete server${gl_kjlan}3. ${gl_bai}Edit the server" + echo -e "${gl_kjlan}4. ${gl_bai}Backup cluster${gl_kjlan}5. ${gl_bai}Restore cluster" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" - echo -e "${gl_kjlan}11. ${gl_bai}Install the tech lion script${gl_kjlan}12. ${gl_bai}Update the system${gl_kjlan}13. ${gl_bai}Clean the system" - echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set up 1G virtual memory" + echo -e "${gl_kjlan}11. ${gl_bai}Install the tech lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" + echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom commands" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -13955,7 +13955,7 @@ while true; do send_stats "Add a cluster server" read -e -p "Server name:" server_name read -e -p "Server IP:" server_ip - read -e -p "Server Port (22):" server_port + read -e -p "Server port (22):" server_port local server_port=${server_port:-22} read -e -p "Server username (root):" server_username local server_username=${server_username:-root} @@ -13986,7 +13986,7 @@ while true; do clear send_stats "Restore the cluster" echo "Please upload your servers.py and press any key to start uploading!" - echo -e "Please upload your${gl_huang}servers.py${gl_bai}File to${gl_huang}/root/cluster/${gl_bai}Complete the restore!" + echo -e "Please upload your${gl_huang}servers.py${gl_bai}file to${gl_huang}/root/cluster/${gl_bai}Complete the restore!" break_end ;; @@ -14017,8 +14017,8 @@ while true; do ;; 51) - send_stats "Customize the execution of commands" - read -e -p "Please enter the batch execution command:" mingling + send_stats "Custom execution command" + read -e -p "Please enter the command for batch execution:" mingling run_commands_on_servers "${mingling}" ;; @@ -14043,7 +14043,7 @@ echo "It will provide users with a simpler and more elegant promotion and purcha echo "" echo -e "Server Offers" echo "------------------------" -echo -e "${gl_lan}Leica Cloud Hong Kong CN2 GIA South Korea Dual ISP US CN2 GIA Discounts${gl_bai}" +echo -e "${gl_lan}Laika Cloud Hong Kong CN2 GIA Korean dual ISP US CN2 GIA promotions${gl_bai}" echo -e "${gl_bai}Website: https://www.lcayun.com/aff/ZEXUQBIM${gl_bai}" echo "------------------------" echo -e "${gl_lan}RackNerd $10.99 per year, USA, 1 core, 1G memory, 20G hard drive, 1T traffic per month${gl_bai}" @@ -14052,14 +14052,14 @@ echo "------------------------" echo -e "${gl_zi}Hostinger 52.7 dollars per year United States 1 core 4G memory 50G hard drive 4T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${gl_bai}" echo "------------------------" -echo -e "${gl_huang}Bricklayer 49 dollars per quarter US CN2GIA Japan SoftBank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" +echo -e "${gl_huang}Brickworker, $49 per quarter, US CN2GIA, Japan SoftBank, 2 cores, 1G memory, 20G hard drive, 1T traffic per month${gl_bai}" echo -e "${gl_bai}Website: https://bandwagonhost.com/aff.php?aff=69004&pid=87${gl_bai}" echo "------------------------" echo -e "${gl_lan}DMIT $28 per quarter US CN2GIA 1 core 2G memory 20G hard drive 800G traffic per month${gl_bai}" -echo -e "${gl_bai}Website: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" +echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" echo -e "${gl_zi}V.PS $6.9 per month Tokyo SoftBank 2 core 1G memory 20G hard drive 1T traffic per month${gl_bai}" -echo -e "${gl_bai}Website: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" +echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" @@ -14067,13 +14067,13 @@ echo "------------------------" echo "" echo -e "Domain name discount" echo "------------------------" -echo -e "${gl_lan}GNAME 8.8 dollars first year COM domain name 6.68 dollars first year CC domain name${gl_bai}" +echo -e "${gl_lan}GNAME $8.8 first-year COM domain name $6.68 first-year CC domain name${gl_bai}" echo -e "${gl_bai}Website: https://www.gname.com/register?tt=86836&ttcode=KEJILION86836&ttbj=sh${gl_bai}" echo "------------------------" echo "" -echo -e "Technology lion surrounding" +echo -e "Technology lion peripherals" echo "------------------------" -echo -e "${gl_kjlan}B station:${gl_bai}https://b23.tv/2mqnQyh ${gl_kjlan}Oil pipe:${gl_bai}https://www.youtube.com/@kejilion${gl_bai}" +echo -e "${gl_kjlan}Station B:${gl_bai}https://b23.tv/2mqnQyh ${gl_kjlan}Oil pipe:${gl_bai}https://www.youtube.com/@kejilion${gl_bai}" echo -e "${gl_kjlan}Official website:${gl_bai}https://kejilion.pro/ ${gl_kjlan}navigation:${gl_bai}https://dh.kejilion.pro/${gl_bai}" echo -e "${gl_kjlan}blog:${gl_bai}https://blog.kejilion.pro/ ${gl_kjlan}Software Center:${gl_bai}https://app.kejilion.pro/${gl_bai}" echo "------------------------" @@ -14092,7 +14092,7 @@ send_stats "Script update" cd ~ while true; do clear - echo "Update log" + echo "Change log" echo "------------------------" echo "All logs:${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt" echo "------------------------" @@ -14101,11 +14101,11 @@ while true; do 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}You are already the latest version!${gl_huang}v$sh_v${gl_bai}" - send_stats "The script is up to date and no update is required" + echo -e "${gl_lv}You are already on the latest version!${gl_huang}v$sh_v${gl_bai}" + send_stats "The script is already up to date and does not need to be updated" else echo "Discover a new version!" - echo -e "Current version v$sh_vLatest version${gl_huang}v$sh_v_new${gl_bai}" + echo -e "Current version v$sh_vlatest version${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14114,7 +14114,7 @@ while true; do if [ -n "$existing_cron" ]; then echo "------------------------" - echo -e "${gl_lv}Automatic updates are turned on, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" + echo -e "${gl_lv}Automatic update is enabled, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" fi echo "------------------------" @@ -14157,7 +14157,7 @@ while true; do (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}Automatic update is enabled, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" + echo -e "${gl_lv}Automatic updates are turned on, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" send_stats "Turn on automatic script update" break_end ;; @@ -14193,20 +14193,20 @@ echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}1. ${gl_bai}System information query" echo -e "${gl_kjlan}2. ${gl_bai}System update" echo -e "${gl_kjlan}3. ${gl_bai}System Cleanup" -echo -e "${gl_kjlan}4. ${gl_bai}Basic tools" +echo -e "${gl_kjlan}4. ${gl_bai}basic tools" echo -e "${gl_kjlan}5. ${gl_bai}BBR Management" -echo -e "${gl_kjlan}6. ${gl_bai}Docker Management" -echo -e "${gl_kjlan}7. ${gl_bai}WARP Management" +echo -e "${gl_kjlan}6. ${gl_bai}Docker management" +echo -e "${gl_kjlan}7. ${gl_bai}WARP management" echo -e "${gl_kjlan}8. ${gl_bai}Test script collection" echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Script Collection" echo -e "${gl_huang}10. ${gl_bai}LDNMP website building" -echo -e "${gl_kjlan}11. ${gl_bai}Application Market" +echo -e "${gl_kjlan}11. ${gl_bai}application market" echo -e "${gl_kjlan}12. ${gl_bai}Backend workspace" -echo -e "${gl_kjlan}13. ${gl_bai}System Tools" +echo -e "${gl_kjlan}13. ${gl_bai}system tools" echo -e "${gl_kjlan}14. ${gl_bai}Server cluster control" echo -e "${gl_kjlan}15. ${gl_bai}Advertising column" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu server opening script" +echo -e "${gl_kjlan}p. ${gl_bai}Eudemons Parlu server opening script" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}Script update" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14217,7 +14217,7 @@ read -e -p "Please enter your selection:" choice case $choice in 1) linux_info ;; 2) clear ; send_stats "System update" ; linux_update ;; - 3) clear ; send_stats "System Cleanup" ; linux_clean ;; + 3) clear ; send_stats "System cleanup" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; 6) linux_docker ;; @@ -14232,7 +14232,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu server opening script" ; cd ~ + p) send_stats "Eudemons Parlu server opening script" ; cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh exit ;; @@ -14249,15 +14249,15 @@ k_info() { send_stats "k command reference use case" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "The following is the k command reference use case:" +echo "The following is a reference use case for the k command:" echo "Start script k" echo "Install software package k install nano wget | k add nano wget | k Install nano wget" echo "Uninstall the package k remove nano wget | k del nano wget | k uninstall nano wget | k Uninstall nano wget" echo "Update system k update | k update" echo "Clean system garbage k clean | k clean" -echo "Reinstall the system panel k dd | k Reinstall" +echo "Reinstall the system panel k dd | k reinstall" echo "bbr3 control panel k bbr3 | k bbrv3" -echo "Kernel Tuning Panel k nhyh | k kernel optimization" +echo "Kernel Tuning Panel k nhyh | k Kernel Optimization" echo "Set virtual memory k swap 2048" echo "Set virtual time zone k time Asia/Shanghai | k time zone Asia/Shanghai" echo "System Recycling Bin k trash | k hsz | k Recycling Bin" @@ -14265,13 +14265,13 @@ echo "System backup function k backup | k bf | k backup" echo "ssh remote connection tool k ssh | k remote connection" echo "rsync remote synchronization tool k rsync | k remote synchronization" echo "Hard disk management tool k disk | k hard disk management" -echo "Intranet penetration (server side) k frps" +echo "Intranet penetration (server) k frps" echo "Intranet penetration (client) k frpc" echo "Software start k start sshd | k start sshd" echo "Software stop k stop sshd | k stop sshd" echo "Software restart k restart sshd | k restart sshd" echo "Check software status k status sshd | k status sshd" -echo "Software boot k enable docker | k autostart docke | k startup docker" +echo "k enable docker | k autostart docker | k enable docker when booting the software" echo "Domain name certificate application k ssl" echo "Domain name certificate expiration query k ssl ps" echo "docker management plane k docker" @@ -14281,7 +14281,7 @@ echo "docker image management k docker img |k docker image" echo "LDNMP site management k web" echo "LDNMP cache cleanup k web cache" echo "Install WordPress k wp |k wordpress |k wp xxx.com" -echo "Install the reverse proxy k fd |k rp |k anti-generation |k fd xxx.com" +echo "Install reverse proxy k fd |k rp |k reverse proxy |k fd xxx.com" echo "Install load balancing k loadbalance |k load balancing" echo "Firewall panel k fhq |k firewall" echo "Open port k dkdk 8080 |k Open port 8080" @@ -14290,14 +14290,14 @@ echo "Release IP k fxip 127.0.0.0/8 |k Release IP 127.0.0.0/8" echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" echo "Command favorites k fav | k command favorites" echo "App Market Management k app" -echo "Application number quick management k app 26 | k app 1panel | k app npm" +echo "Quick management of application numbers k app 26 | k app 1panel | k app npm" echo "Display system information k info" } if [ "$#" -eq 0 ]; then - # If there are no parameters, run interactive logic + # Without arguments, run interactive logic kejilion_sh else # If there are parameters, execute the corresponding function @@ -14429,7 +14429,7 @@ else status|状态) shift - send_stats "Software status view" + send_stats "Check software status" status "$@" ;; start|启动) @@ -14439,7 +14439,7 @@ else ;; stop|停止) shift - send_stats "Software pause" + send_stats "software pause" stop "$@" ;; restart|重启) @@ -14450,18 +14450,18 @@ else enable|autostart|开机启动) shift - send_stats "Software boots up" + send_stats "Software starts automatically when booting" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "Check the certificate status" + send_stats "View certificate status" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "Quickly apply for a certificate" + send_stats "Apply for a certificate quickly" elif [ -n "$1" ]; then add_ssl "$1" send_stats "Quickly apply for a certificate" @@ -14509,7 +14509,7 @@ else app) shift - send_stats "Apply $@" + send_stats "Apply$@" linux_panel "$@" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index f3f6a02e1..a96968ff1 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 関数の埋もポイント情報を収集し、現在のスクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、ユーザーが使用する関数名を記録する関数。彼らは絶対に機密情報を伴わない、安心してください!私を信じてください! -# なぜこの関数を設計する必要があるのですか?目的は、ユーザーが使用する機能をよりよく理解し、関数をさらに最適化して、ユーザーのニーズを満たすより多くの関数を起動することです。 -# 全文の場合、send_stats関数の呼び出し場所、透明性、オープンソースを検索できます。懸念がある場合は、使用を拒否できます。 +# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! +# なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# ユーザーに条件に同意するように促します +# ユーザーに規約への同意を求めるプロンプトを表示する UserLicenseAgreement() { clear echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" - echo "スクリプトを初めて使用して、ユーザーライセンス契約を読んで同意してください。" + echo "初めてスクリプトを使用する場合は、ユーザー使用許諾契約を読み、同意してください。" echo "ユーザー使用許諾契約: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "上記の条件に同意しますか? (y/n):" user_input + read -r -p "上記の条件に同意しますか? (y/n):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "ライセンスの同意" + 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 "許可の拒否" + send_stats "許可が拒否されました" clear exit fi @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "パッケージパラメータが指定されていません!" + echo "パッケージパラメーターは提供されていません!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}インストール$package...${gl_bai}" + echo -e "${gl_huang}インストール中$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -220,11 +220,11 @@ check_disk_space() { local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') if [ "$available_space_mb" -lt "$required_space_mb" ]; then - echo -e "${gl_huang}ヒント:${gl_bai}ディスクスペースが不十分です!" - echo "現在利用可能なスペース:$((available_space_mb/1024))g" + echo -e "${gl_huang}ヒント:${gl_bai}ディスク容量が足りません!" + echo "現在の利用可能なスペース: $((available_space_mb/1024))G" echo "最小需要スペース:${required_gb}G" - echo "インストールは継続できません。ディスクスペースを掃除して、もう一度お試しください。" - send_stats "ディスクスペースが不十分です" + echo "インストールを続行できません。ディスク容量をクリアして、再試行してください。" + send_stats "ディスク容量が足りない" break_end kejilion fi @@ -238,7 +238,7 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "パッケージパラメータが指定されていません!" return 1 fi @@ -261,14 +261,14 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "不明なパッケージマネージャー!" + echo "不明なパッケージマネージャーです!" return 1 fi done } -# さまざまなディストリビューションに適したユニバーサル systemctl 関数 +# さまざまな分布に適したUniversal SystemCTL関数 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -297,17 +297,17 @@ start() { if [ $? -eq 0 ]; then echo "$1サービスが開始されました。" else - echo "エラー:開始$1サービスは失敗しました。" + echo "エラー: 開始$1サービスが失敗しました。" fi } -# サービスを停止します +# サービスを停止する stop() { systemctl stop "$1" if [ $? -eq 0 ]; then echo "$1サービスは停止しました。" else - echo "エラー:停止します$1サービスは失敗しました。" + echo "エラー: 停止$1サービスに失敗しました。" fi } @@ -315,9 +315,9 @@ stop() { status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1サービスステータスが表示されます。" + echo "$1サービスのステータスが表示されます。" else - echo "エラー:表示できません$1サービスステータス。" + echo "エラー: 表示できません$1サービスステータス。" fi } @@ -506,12 +506,12 @@ while true; do echo "Dockerコンテナリスト" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "コンテナ操作" + echo "コンテナの運用" echo "------------------------" - echo "1. 新しいコンテナを作成する" + echo "1.新しいコンテナを作成します" echo "------------------------" echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" - echo "3.指定された容器を停止します7。すべての容器を停止します" + echo "3. 指定したコンテナを停止します。 7. すべてのコンテナを停止します。" echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" echo "------------------------" @@ -525,27 +525,27 @@ while true; do read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新しいコンテナを作成します" - read -e -p "作成コマンドを入力してください:" dockername + send_stats "新しいコンテナを作成する" + read -e -p "作成コマンドを入力してください:" dockername $dockername ;; 2) - send_stats "指定された容器を起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + send_stats "指定したコンテナを起動する" + read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker start $dockername ;; 3) - send_stats "指定された容器を停止します" + send_stats "指定したコンテナを停止する" read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker stop $dockername ;; 4) send_stats "指定したコンテナを削除します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker rm -f $dockername ;; 5) - send_stats "指定された容器を再起動します" + send_stats "指定したコンテナを再起動します" read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername docker restart $dockername ;; @@ -582,13 +582,13 @@ while true; do break_end ;; 12) - send_stats "コンテナログを表示します" + send_stats "コンテナログの表示" read -e -p "コンテナ名を入力してください:" dockername docker logs $dockername break_end ;; 13) - send_stats "コンテナネットワークを表示します" + send_stats "コンテナネットワークを表示する" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -606,7 +606,7 @@ while true; do break_end ;; 14) - send_stats "コンテナの占有を表示します" + send_stats "コンテナ占有率の表示" docker stats --no-stream break_end ;; @@ -623,7 +623,7 @@ while true; do 16) send_stats "コンテナポートアクセスをブロックします" - read -e -p "コンテナ名を入力してください:" docker_name + read -e -p "コンテナ名を入力してください:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -643,37 +643,37 @@ docker_image() { while true; do clear send_stats "Docker画像管理" - echo "Docker画像リスト" + echo "Dockerイメージリスト" docker image ls echo "" echo "ミラー操作" echo "------------------------" - echo "1.指定された画像を取得する3。指定された画像を削除します" - echo "2。指定された画像4を更新します。すべての画像を削除します" + echo "1. 指定した画像を取得 3. 指定した画像を削除" + echo "2. 指定した画像を更新 4. すべての画像を削除" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + 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}" + echo -e "${gl_huang}画像の取得:$name${gl_bai}" docker pull $name done ;; 2) send_stats "画像を更新します" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + read -e -p "イメージ名を入力してください (複数のイメージ名はスペースで区切ってください):" imagenames for name in $imagenames; do - echo -e "${gl_huang}更新された画像:$name${gl_bai}" + echo -e "${gl_huang}画像の更新:$name${gl_bai}" docker pull $name done ;; 3) send_stats "画像の削除" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + read -e -p "イメージ名を入力してください (複数のイメージ名はスペースで区切ってください):" imagenames for name in $imagenames; do docker rmi -f $name done @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -756,7 +756,7 @@ install_crontab() { service cron start ;; *) - echo "サポートされていない分布:$ID" + echo "サポートされていないディストリビューション:$ID" return ;; esac @@ -777,18 +777,18 @@ docker_ipv6_on() { 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を使用して、構成ファイルの更新を処理します + # jq を使用して構成ファイルの更新を処理する local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") # 現在の構成にすでに ipv6 設定があるかどうかを確認します local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 構成を更新し、IPv6を有効にします + # 構成を更新してIPv6を有効にする if [[ "$CURRENT_IPV6" == "false" ]]; then UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {ipv6: true, "fixed-cidr-v6": "2001:db8:1::/64"}') else @@ -814,20 +814,20 @@ docker_ipv6_off() { # 構成ファイルが存在するかどうかを確認します if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}設定ファイルが存在しません${gl_bai}" + 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ステータスを確認してください + # 現在のIPv6ステータスを確認する local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # 元の構成と新しい構成を比較する + # 元の構成と新しい構成を比較します if [[ "$CURRENT_IPV6" == "false" ]]; then echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}" else @@ -879,7 +879,7 @@ open_port() { 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 @@ -895,7 +895,7 @@ open_port() { done save_iptables_rules - send_stats "ポートが開かれました" + send_stats "ポートがオープンされました" } @@ -913,7 +913,7 @@ close_port() { 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 @@ -924,7 +924,7 @@ close_port() { fi done - # 既存のルールを削除する(ある場合) + # 既存のルール (存在する場合) を削除します。 iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null @@ -933,21 +933,21 @@ close_port() { iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "ポートは閉じた" + send_stats "ポートが閉じられています" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + echo "少なくとも 1 つの IP アドレスまたは IP セグメントを入力してください" return 1 fi install iptables for ip in "${ips[@]}"; do - # 既存のブロッキングルールを削除します + # 既存のブロック ルールを削除する iptables -D INPUT -s $ip -j DROP 2>/dev/null # 許可ルールを追加します @@ -958,7 +958,7 @@ allow_ip() { done save_iptables_rules - send_stats "IPをリリースしました" + send_stats "リリースされたIP" } block_ip() { @@ -982,7 +982,7 @@ block_ip() { done save_iptables_rules - send_stats "IPブロック" + send_stats "IPがブロックされました" } @@ -1002,10 +1002,10 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS防御をオンにします" + send_stats "DDoS 防御をオンにする" } -# 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 @@ -1017,14 +1017,14 @@ disable_ddos_defense() { 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防御をオフにします" + send_stats "DDoS 防御をオフにする" } -# 国家IPルールを管理する機能 +# 国内の知財ルールを管理する機能 manage_country_rules() { local action="$1" shift # 去掉第一个参数,剩下的全是国家代码 @@ -1042,7 +1042,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" continue fi @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー:ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" continue fi @@ -1090,7 +1090,7 @@ manage_country_rules() { ;; *) - echo "使用法:manage_country_rules {block | lock | block} " + echo "使用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1119,19 +1119,19 @@ iptables_panel() { echo "ファイアウォール管理" echo "------------------------" echo "1.指定されたポート2を開きます。指定されたポートを閉じます" - echo "3. すべてのポートを開く 4. すべてのポートを閉じる" + echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" echo "------------------------" - echo "5。IPホワイトリスト6。IPブラックリスト" + echo "5. IP ホワイトリスト 6. IP ブラックリスト" echo "7.指定されたIPをクリアします" echo "------------------------" - echo "11. ping 12を許可します。Pingを無効にします" + echo "11. PING を許可する 12. PING を無効にする" echo "------------------------" - echo "13。DDOS防衛を開始14。DDOS防衛をオフにします" + echo "13. DDOS 防御を開始します。 14. DDOS 防御をオフにします。" echo "------------------------" echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" echo "17.指定国でのIP制限をリリースします" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -1141,12 +1141,12 @@ iptables_panel() { send_stats "指定したポートを開く" ;; 2) - read -e -p "閉じたポート番号を入力してください:" c_port + read -e -p "閉じられたポート番号を入力してください:" c_port close_port $c_port - send_stats "指定されたポートを閉じます" + send_stats "指定したポートを閉じる" ;; 3) - # すべてのポートを開きます + # すべてのポートを開く current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1185,12 +1185,12 @@ iptables_panel() { ;; 6) # IPブラックリスト - read -e -p "ブロックされたIPまたはIPセグメントを入力してください:" c_ip + read -e -p "ブロックされた IP または IP 範囲を入力してください:" c_ip block_ip $c_ip ;; 7) - # 指定されたIPをクリアします - read -e -p "クリアされたIPを入力してください:" d_ip + # 指定した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 @@ -1208,7 +1208,7 @@ iptables_panel() { 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 "pingを無効にします" + send_stats "PINGを無効にする" ;; 13) enable_ddos_defense @@ -1220,7 +1220,7 @@ iptables_panel() { 15) read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code manage_country_rules block $country_code - send_stats "許可された国$country_codeIP" + send_stats "国を許可する$country_codeIP" ;; 16) read -e -p "許可されている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code @@ -1229,7 +1229,7 @@ iptables_panel() { ;; 17) - read -e -p "クリアされた国コードを入力してください(複数の国コードは、CN US JPなどのスペースで区切ることができます):" country_code + read -e -p "クリアされた国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules unblock $country_code send_stats "国をきれいにします$country_codeIP" ;; @@ -1260,7 +1260,7 @@ add_swap() { mkswap -f "$partition" done - # /swapfile が使用されていないことを確認してください + # /swapfileが使用されなくなったことを確認してください swapoff /swapfile # 古い /swapfileを削除します @@ -1307,7 +1307,7 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginxバージョンを取得します + # 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}" @@ -1317,11 +1317,11 @@ ldnmp_v() { 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バージョンを取得します + # 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バージョンを取得します + # 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}" @@ -1334,7 +1334,7 @@ ldnmp_v() { 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 @@ -1392,7 +1392,7 @@ install_ldnmp() { clear - echo "LDNMP環境がインストールされている" + echo "LDNMP環境がインストールされています" echo "------------------------" ldnmp_v @@ -1452,9 +1452,9 @@ install_ssltls_text() { echo -e "${gl_huang}$yuming秘密のキー情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" - echo -e "${gl_huang}証明書ストレージパス${gl_bai}" - echo "公開鍵:/etc/letsencrypt/live/$yuming/fullchain.pem" - echo "秘密鍵:/etc/letsencrypt/live/$yuming/privkey.pem" + echo -e "${gl_huang}証明書の保存パス${gl_bai}" + echo "公開キー: /etc/letsencrypt/live/$yuming/fullchain.pem" + echo "秘密鍵: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1519,16 +1519,16 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "ドメイン名証明書の成功したアプリケーション" + send_stats "ドメイン名証明書の申請が成功しました" else - send_stats "ドメイン名証明書のアプリケーションは失敗しました" - echo -e "${gl_hong}知らせ:${gl_bai}証明書申請が失敗しました。次の考えられる理由を確認して、もう一度やり直してください。" + send_stats "ドメイン名証明書の申請に失敗しました" + echo -e "${gl_hong}知らせ:${gl_bai}証明書の申請に失敗しました。次の考えられる理由を確認して、再試行してください。" echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" - echo -e "3.ネットワーク構成の問題cloudflareワープやその他の仮想ネットワークを使用する場合は、一時的にシャットダウンしてください" - echo -e "4。ファイアウォールの制限orポート80/443が開かれているかどうかを確認して、検証がアクセス可能であることを確認してください" + echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" + echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" - echo -e "6.国内登録制限domainドメイン名が中国本土で登録されているかどうかを確認してください" + echo -e "6. 国内登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかをご確認ください。" break_end clear echo "もう一度展開してみてください$webname" @@ -1551,7 +1551,7 @@ fi add_yuming() { ip_address - echo -e "まず、ドメイン名をローカル IP に解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming } @@ -1617,7 +1617,7 @@ nginx_upgrade() { docker restart $ldnmp_pods > /dev/null 2>&1 send_stats "更新します$ldnmp_pods" - echo "更新します${ldnmp_pods}仕上げる" + echo "更新する${ldnmp_pods}仕上げる" } @@ -1657,13 +1657,13 @@ cf_purge_cache() { # ゾーン_idsを配列に変換します ZONE_IDS=($ZONE_IDS) else - # キャッシュをクリーニングするかどうかをユーザーに促します - read -e -p "CloudFlareのキャッシュをきれいにする必要がありますか? (y/n):" answer + # キャッシュをクリアするかどうかをユーザーに確認する + read -e -p "Cloudflareのキャッシュをクリアする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF情報が保存されます$CONFIG_FILE、後でCF情報を変更できます" - read -e -p "API_TOKENを入力してください:" API_TOKEN + echo "CF情報が保存されます$CONFIG_FILECF 情報は後で変更できます。" + read -e -p "API_TOKEN を入力してください:" API_TOKEN read -e -p "CFユーザ​​ー名を入力してください:" EMAIL - read -e -p "ゾーン_id(スペースで区切られた複数)を入力してください。" -a ZONE_IDS + read -e -p "zone_id を入力してください (複数の場合はスペースで区切ります):" -a ZONE_IDS mkdir -p /home/web/config/ echo "$API_TOKEN $EMAIL ${ZONE_IDS[*]}" > "$CONFIG_FILE" @@ -1672,7 +1672,7 @@ cf_purge_cache() { # 各ZONE_IDをループして、Clear Cacheコマンドを実行します for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "zone_id のキャッシュをクリアします:$ZONE_ID" + echo "ゾーン_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" \ @@ -1696,10 +1696,10 @@ web_cache() { web_del() { - send_stats "サイトデータを削除します" + send_stats "サイトデータを削除する" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "サイトデータを削除するには、ドメイン名を入力してください(複数のドメイン名がスペースで区切られています):" yuming_list + read -e -p "サイト データを削除するには、ドメイン名を入力してください (複数のドメイン名はスペースで区切ります)。" yuming_list if [[ -z "$yuming_list" ]]; then return fi @@ -1716,7 +1716,7 @@ web_del() { 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 @@ -1733,14 +1733,14 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # モードパラメーターに従ってWAFをオンまたはオフにすることにしました + # モードパラメータに従って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を閉じる:コメントを追加します + # 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 @@ -1796,11 +1796,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 古い定義を削除する sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1823,7 +1823,7 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 古い定義を削除します + # 古い定義を削除する sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" @@ -1851,7 +1851,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotliをオンにする:コメントを削除します + # Brotli をオンにする: コメントを削除する sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1865,7 +1865,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる: コメントを追加 + # Brotliを閉じる:コメントを追加します sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1885,7 +1885,7 @@ nginx_br() { return 1 fi - # nginx イメージを確認し、それに応じて処理します + # nginx画像を確認し、状況に応じてそれらを処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1942,7 +1942,7 @@ nginx_zstd() { return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # nginx イメージを確認し、それに応じて処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1993,19 +1993,19 @@ web_security() { echo "------------------------" echo "1.防衛プログラムをインストールします" echo "------------------------" - echo "5。SSHインターセプトレコードを表示6。ウェブサイト傍受記録を見る" - echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" + echo "5。SSHインターセプトレコード6を表示6。ウェブサイト傍受記録を見る" + echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" + echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" echo "------------------------" - echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" + echo "21。CloudFlareモード22。5秒シールドの高負荷" echo "------------------------" - echo "31。WAF32をオンにしてください。WAFをオフにします" - echo "33。DDOS防衛をオンにする34。DDOS防衛をオフにする" + echo "31. WAF をオンにする 32. WAF をオフにする" + echo "33. DDOS 防御をオンにする 34. DDOS 防御をオフにする" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 防御プログラムをアンインストールする" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" sub_choice case $sub_choice in @@ -2088,10 +2088,10 @@ web_security() { ;; 21) - send_stats "CloudFlareモード" + send_stats "クラウドフレアモード" echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" echo "https://dash.cloudflare.com/login" - read -e -p "CFアカウント番号を入力します:" cfuser + read -e -p "CF の口座番号を入力してください:" cfuser read -e -p "CF のグローバル API キーを入力します。" cftoken wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default11.conf @@ -2107,20 +2107,20 @@ web_security() { sed -i "s/APIKEY00000/$cftoken/g" /etc/fail2ban/action.d/cloudflare-docker.conf f2b_status - echo "CloudFlareモードは、CFバックグラウンド、サイトセキュリティイベントでインターセプトレコードを表示するように構成されています" + echo "Cloudflare モードが設定されており、傍受記録は cf バックグラウンド、site-security-events で表示できます。" ;; 22) send_stats "5秒シールドでの高負荷" - echo -e "${gl_huang}ウェブサイトは5分ごとに自動的に検出されます。高負荷が検出されると、シールドが自動的にオンになり、低負荷が5秒間自動的にオフになります。${gl_bai}" + echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメーターを取得します:" echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" - echo -e "CFバックグラウンドドメイン名の概要ページの右下に移動して${gl_huang}エリアID${gl_bai}" + echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CFアカウント番号を入力します:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください:" cftoken + read -e -p "CF の口座番号を入力してください:" cfuser + read -e -p "CFのグローバルAPIキーを入力してください。" cftoken read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID cd ~ @@ -2140,7 +2140,7 @@ web_security() { (crontab -l 2>/dev/null; echo "$cron_job") | crontab - echo "高負荷自動シールドオープニングスクリプトが追加されました" else - echo "自動シールドスクリプトはすでに存在しています、それを追加する必要はありません" + echo "自動シールド開放スクリプトはすでに存在するため、追加する必要はありません" fi ;; @@ -2154,7 +2154,7 @@ web_security() { 32) nginx_waf off echo "サイトWAFは閉鎖されています" - send_stats "サイトWAFは閉鎖されています" + send_stats "サイト WAF がダウンしています" ;; 33) @@ -2179,7 +2179,7 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 現在のworker_processes設定値を取得します +# 現在のworker_processesの設定値を取得します current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') # 値に応じてモード情報を設定します @@ -2198,21 +2198,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTDが有効になっていてコメントされていないかどうかを確認します(ZSTDで行全体が開始されます;) + # zstd がオンでコメントが解除されているかどうかを確認します (行全体が zstd on で始まります)。 if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotliが有効であり、コメントされていないかどうかを確認してください + # Brotliが有効になっており、コメントされていないかどうかを確認してください if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # GZIPが有効になっており、コメントされていないかどうかを確認してください + # gzip が有効になっていてコメントが解除されているかどうかを確認します if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2229,22 +2229,22 @@ web_optimization() { check_nginx_compression clear send_stats "LDNMP環境を最適化します" - echo -e "LDNMP環境を最適化します${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + echo -e "LDNMP環境の最適化${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1。標準モード2。高性能モード(推奨2H4g以上)" + echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" echo "------------------------" echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" - echo "5。BR圧縮をオンにします6。BR圧縮をオフにします" - echo "7。ZSTD圧縮をオンにします8。ZSTD圧縮をオフにします" + echo "5. br 圧縮をオンにする 6. br 圧縮をオフにする" + echo "7. zstd 圧縮をオンにする 8. zstd 圧縮をオフにする" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) send_stats "サイト標準モード" - # nginxチューニング + # 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 @@ -2254,7 +2254,7 @@ web_optimization() { docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini rm -rf /home/optimized_php.ini - # PHPチューニング + # 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 @@ -2266,7 +2266,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2282,7 +2282,7 @@ web_optimization() { ;; 2) - send_stats "サイトの高性能モード" + send_stats "サイトハイパフォーマンスモード" # nginxチューニング sed -i 's/worker_connections.*/worker_connections 20480;/' /home/web/nginx.conf @@ -2294,7 +2294,7 @@ web_optimization() { docker cp /home/optimized_php.ini php74:/usr/local/etc/php/conf.d/optimized_php.ini rm -rf /home/optimized_php.ini - # PHPチューニング + # 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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境は、高性能モードに設定されています" + echo "LDNMP 環境が高パフォーマンス モードに設定されている" ;; 3) @@ -2376,7 +2376,7 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then -# check_docker = "$ {gl_lv} $ {gl_bai}インストール" +# check_docker="${gl_lv} は ${gl_bai} をインストールしました" # else # check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" # fi @@ -2424,19 +2424,19 @@ check_docker_image_update() { 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から画像公開時間を取得します @@ -2487,19 +2487,19 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # 检查并放行本地网络 127.0.0.0/8 + # ローカルネットワーク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 - # 他のすべてのIPSを確認してブロックします + # 他のすべての 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を確認してリリースします + # 指定した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 @@ -2525,7 +2525,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # コンテナのIPアドレスを取得する local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2535,17 +2535,17 @@ clear_container_rules() { install iptables - # 他のすべてのIPをブロックするルールを明確にします + # 他のすべての 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を許可するルールをクリアします + # 指定された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 を許可するルールをクリアします。 + # ローカルネットワークをリリースするためのルールをクリア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 @@ -2559,12 +2559,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 指定されたIPをリリースするためのルールをクリアします + # 指定した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 + # ローカルネットワーク 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 @@ -2575,7 +2575,7 @@ clear_container_rules() { fi - echo "IP+ポートはサービスにアクセスすることが許可されています" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2589,8 +2589,8 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" - echo "使用法:block_host_port <ポート番号> <承認IP>" + echo "エラー: アクセスを許可するには、ポート番号と IP を入力してください。" + echo "使用法: block_host_port <ポート番号> <許可された IP>" return 1 fi @@ -2602,7 +2602,7 @@ block_host_port() { iptables -I INPUT -p tcp --dport "$port" -j DROP fi - # 指定されたIPアクセスを許可します + # 指定した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 @@ -2616,7 +2616,7 @@ block_host_port() { - # 他のすべてのIPアクセスを拒否しました + # 他のすべての IP からのアクセスを拒否する if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi @@ -2626,7 +2626,7 @@ block_host_port() { 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 @@ -2648,15 +2648,15 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー: アクセスを許可するには、ポート番号と IP を入力してください。" - echo "使用法:CLEAR_HOST_PORT_RULES <ポート番号> <認定IP>" + echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "使用法: clear_host_port_rules <ポート番号> <許可された IP>" return 1 fi install iptables - # 他のすべてのIPアクセスをブロックするルールをクリアします + # 他のすべての IP からのアクセスをブロックするルールをクリアします if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi @@ -2672,12 +2672,12 @@ clear_host_port_rules() { fi - # 他のすべてのIPアクセスをブロックするルールをクリアします + # 他のすべての 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 @@ -2791,7 +2791,7 @@ while true; do echo "" $docker_use $docker_passwd - send_stats "更新します$docker_name" + send_stats "更新する$docker_name" ;; 3) docker rm -f "$docker_name" @@ -2800,8 +2800,8 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" - send_stats "アンインストール$docker_name" + echo "アプリがアンインストールされました" + send_stats "アンインストールする$docker_name" ;; 5) @@ -2818,12 +2818,12 @@ while true; do ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "IPアクセスを許可する${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "IPアクセスをブロックする${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2862,8 +2862,8 @@ docker_app_plus() { echo "------------------------" echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5. ドメイン名アクセスを追加します。 6. ドメイン名アクセスを削除します。" - echo "7. IP+ポートアクセスを許可します。 8. IP+ポートアクセスをブロックします。" + echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" + echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -2872,7 +2872,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,8 +2895,8 @@ docker_app_plus() { ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}ドメイン名アクセス設定" + send_stats "${docker_name}ドメイン名アクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" @@ -2910,7 +2910,7 @@ docker_app_plus() { clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックする${docker_name}" + send_stats "IPアクセスをブロックします${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -2995,7 +2995,7 @@ tmux_run_d() { local base_name="tmuxd" local tmuxd_ID=1 -# セッションが存在するかどうかを確認する関数 +# セッションが存在するかどうかを確認する機能 session_exists() { tmux has-session -t $1 2>/dev/null } @@ -3110,7 +3110,7 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP環境を再インストールできません" + send_stats "LDNMP環境を再度インストールできません" echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" break_end linux_ldnmp @@ -3138,10 +3138,10 @@ install_ldnmp nginx_install_all() { cd ~ -send_stats "Nginx環境をインストールします" +send_stats "nginx環境をインストールする" root_use clear -echo -e "${gl_huang}nginxはインストールされていません、nginx環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}nginx がインストールされていません。nginx 環境のインストールを開始してください...${gl_bai}" check_disk_space 1 /home check_port install_dependency @@ -3152,7 +3152,7 @@ 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 "nginxがインストールされました" echo -e "現在のバージョン:${gl_huang}v$nginx_version${gl_bai}" echo "" @@ -3164,7 +3164,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "最初に LDNMP 環境をインストールしてください" + send_stats "LDNMP環境を最初にインストールしてください" ldnmp_install_all fi @@ -3185,7 +3185,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "あなたの$webname建てられた!" + echo "あなたの$webname建てられました!" echo "https://$yuming" echo "------------------------" echo "$webnameインストール情報は次のとおりです。" @@ -3207,7 +3207,7 @@ ldnmp_wp() { webname="WordPress" yuming="${1:-}" send_stats "インストール$webname" - echo "導入を開始する$webname" + echo "展開を開始します$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3281,7 +3281,7 @@ ldnmp_Proxy_backend() { reverseproxy_port="${2:-}" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3340,7 +3340,7 @@ ldnmp_web_status() { local db_output="${gl_lv}${db_count}${gl_bai}" clear - send_stats "LDNMPサイト管理" + send_stats "LDNMP サイト管理" echo "LDNMP環境" echo "------------------------" ldnmp_v @@ -3374,11 +3374,11 @@ ldnmp_web_status() { echo "------------------------" echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" - echo "5.アクセスログを表示6。エラーログを表示します" - echo "7.グローバル構成の編集8。サイト構成の編集" + echo "5. アクセスログの表示 6. エラーログの表示" + echo "7. グローバル構成の編集 8. サイト構成の編集" echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" echo "------------------------" - echo "20.指定されたサイトデータを削除します" + echo "20. 指定したサイトデータを削除する" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -3386,7 +3386,7 @@ ldnmp_web_status() { case $sub_choice in 1) send_stats "ドメイン名証明書を申請します" - read -e -p "ドメイン名を入力してください:" yuming + 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 @@ -3395,8 +3395,8 @@ ldnmp_web_status() { ;; 2) - send_stats "サイトドメイン名を変更します" - echo -e "${gl_hong}強くお勧めします:${gl_bai}最初にサイトデータ全体をバックアップしてから、サイトドメイン名を変更します!" + send_stats "サイトのドメイン名を変更する" + echo -e "${gl_hong}強くお勧めします:${gl_bai}まずサイト全体のデータをバックアップしてから、サイトのドメイン名を変更してください。" read -e -p "古いドメイン名を入力してください:" oddyuming read -e -p "新しいドメイン名を入力してください:" yuming install_certbot @@ -3421,7 +3421,7 @@ ldnmp_web_status() { done done - # Web サイトのディレクトリの置き換え + # ウェブサイトディレクトリの交換 mv /home/web/html/$oddyuming /home/web/html/$yuming find /home/web/html/$yuming -type f -exec sed -i "s/$odd_dbname/$dbname/g" {} + @@ -3443,9 +3443,9 @@ ldnmp_web_status() { ;; 4) send_stats "関連するサイトを作成します" - echo -e "アクセスのための既存のサイトの新しいドメイン名を関連付ける" - read -e -p "既存のドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスします" + read -e -p "既存のドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status @@ -3469,7 +3469,7 @@ ldnmp_web_status() { break_end ;; 7) - send_stats "グローバル構成の編集" + send_stats "グローバル構成を編集します" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload @@ -3477,7 +3477,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください。" yuming + read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3487,7 +3487,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "サイトデータを表示します" + send_stats "サイトデータの表示" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3523,16 +3523,16 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}最近では人気のある強力な運用および保守管理パネルです。" + echo "${panelname}人気の強力な運用保守管理盤です。" echo "公式サイト紹介:$panelurl " echo "" echo "------------------------" - echo "1。インストール2。管理3。アンインストール" + echo "1. インストール 2. 管理 3. アンインストール" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case $choice in 1) check_disk_space 1 @@ -3599,7 +3599,7 @@ donlond_frp() { generate_frps_config() { send_stats "FRPサーバーをインストールする" - # ランダムポートと資格情報を生成します + # ランダムなポートと認証情報を生成する local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 出力生成情報 + # 生成された情報を出力する ip_address echo "------------------------" echo "クライアントの展開に必要なパラメーター" @@ -3641,7 +3641,7 @@ EOF configure_frpc() { send_stats "FRPクライアントをインストールします" - read -e -p "外部ネットワークドッキングIPを入力してください:" server_addr + read -e -p "外部ネットワークのドッキング IP を入力してください:" server_addr read -e -p "外部ネットワーク ドッキング トークンを入力してください:" token echo @@ -3662,17 +3662,17 @@ EOF } add_forwarding_service() { - send_stats "FRPイントラネットサービスを追加します" + send_stats "FRPイントラネットサービスを追加" # ユーザーにサービス名と転送情報を入力するように促します read -e -p "サービス名を入力してください:" service_name - read -e -p "転送タイプ(TCP/UDP)を入力してください[デフォルトTCPを入力]:" service_type + read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp を入力する]:" service_type local service_type=${service_type:-tcp} - read -e -p "イントラネットIPを入力してください[デフォルト127.0.0.1を入力]:" local_ip + read -e -p "イントラネット IP を入力してください [Enter キーを押すときのデフォルトは 127.0.0.1]:" local_ip local local_ip=${local_ip:-127.0.0.1} - read -e -p "イントラネットポートを入力してください:" local_port + read -e -p "イントラネット ポートを入力してください:" local_port read -e -p "外部ネットワーク ポートを入力してください:" remote_port - # ユーザー入力を構成ファイルに書き込みます + # ユーザー入力を構成ファイルに書き込む cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 出力生成情報 - echo "仕える$service_nameFRPC.TOMLに正常に追加されました" + # 生成された情報を出力する + echo "仕える$service_namefrpc.toml に正常に追加されました" docker restart frpc @@ -3696,7 +3696,7 @@ EOF delete_forwarding_service() { send_stats "FRPイントラネットサービスを削除します" # ユーザーに削除する必要があるサービス名を入力するように促します - read -e -p "削除する必要があるサービス名を入力してください:" service_name + read -e -p "削除するサービス名を入力してください:" service_name # SEDを使用して、サービスとその関連構成を削除します sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml echo "仕える$service_nameFRPC.TOMLから削除されました" @@ -3730,7 +3730,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # サービス情報がある場合は、新しいサービスを処理する前に現在のサービスを印刷します + # サービス情報がすでに存在する場合は、新しいサービスを処理する前に現在のサービスを出力します。 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3785,17 +3785,17 @@ list_forwarding_services() { -# FRPサーバーポートを取得します +# 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以外のポートがあるかどうかを確認してください + # 8055/8056以外のポートがあるか確認する local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3808,14 +3808,14 @@ generate_access_urls() { if [ "$has_valid_ports" = true ]; then echo "FRPサービス外部アクセスアドレス:" - # IPv4アドレスを処理します + # IPv4 アドレスの処理 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # IPv6 アドレスが存在する場合は処理します + # IPv6アドレスを処理する(存在する場合) if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3860,9 +3860,9 @@ frps_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRPサーバー$check_frp $update_status" - echo "FRPイントラネット侵入サービス環境を構築して、パブリックIPなしでインターネットにデバイスを公開する" + echo "FRPイントラネットペネトレーションサービス環境を構築し、パブリックIPを持たないデバイスをインターネットに公開" echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo "ビデオチュートリアル: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" if [ -d "/home/frp/" ]; then check_docker_app_ip frps_main_ports @@ -3871,9 +3871,9 @@ frps_panel() { echo "------------------------" echo "1。インストール2。更新3。アンインストール" echo "------------------------" - echo "5。イントラネットサービスのドメイン名アクセス6。ドメイン名アクセスを削除する" + echo "5. イントラネット サービスのドメイン名アクセス 6. ドメイン名アクセスの削除" echo "------------------------" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "7. IP+ポートアクセスを許可します。 8. IP+ポートアクセスをブロックします。" echo "------------------------" echo "00. サービスステータスを更新します。 0. 前のメニューに戻ります。" echo "------------------------" @@ -3906,30 +3906,30 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" ;; 5) - echo "ドメイン名アクセスへの逆イントラネット侵入サービス" + echo "ドメイン名アクセスへのイントラネット侵入サービスのリバース" send_stats "FRP外部ドメイン名へのアクセス" add_yuming - read -e -p "イントラネット侵入サービス ポートを入力してください:" frps_port + read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "ドメイン名の形式 example.com (https:// なし)" web_del ;; 7) - send_stats "IPアクセスを許可する" + send_stats "IPアクセスを許可します" read -e -p "リリースするポートを入力してください:" frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; 8) send_stats "IPアクセスをブロックします" - echo "アンチジェネレーションドメイン名にアクセスした場合は、この関数を使用して、より安全なIP+ポートアクセスをブロックします。" + echo "ドメイン名アクセスを反転している場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全です。" read -e -p "ブロックする必要があるポートを入力してください。" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -3958,7 +3958,7 @@ frpc_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRPクライアント$check_frp $update_status" - echo "サーバーでドッキングした後、ドッキングした後、インターネットへのアクセスにイントラネット侵入サービスを作成できます" + echo "サーバーに接続します。接続後、インターネットにアクセスするためのイントラネット侵入サービスを作成できます。" echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" echo "------------------------" @@ -3968,13 +3968,13 @@ frpc_panel() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. インストール 2. アップデート 3. アンインストール" echo "------------------------" echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) install jq grep ss @@ -4049,26 +4049,26 @@ yt_menu_pro() { fi clear - send_stats "YT-DLPダウンロードツール" + 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 -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 "ダウンロードされたビデオリスト:" + ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(まだありません)" echo "-------------------------" echo "1。インストール2。更新3。アンインストール" echo "-------------------------" - echo "5。シングルビデオダウンロード6。バッチビデオダウンロード7。カスタムパラメーターダウンロード" - echo "8。mp3オーディオ9としてダウンロードします。ビデオディレクトリ10を削除します。クッキー管理(開発中)" + echo "5. 単一ビデオのダウンロード 6. バッチビデオのダウンロード 7. カスタムパラメータのダウンロード" + echo "8. MP3 オーディオとしてダウンロード 9. ビデオ ディレクトリを削除 10. Cookie 管理 (開発中)" echo "-------------------------" - echo "0. 前のメニューに戻る" + echo "0。前のメニューに戻ります" echo "-------------------------" read -e -p "オプション番号を入力してください:" choice case $choice in 1) - send_stats "YT-DLPのインストール..." + send_stats "yt-dlp をインストールしています..." echo "YT-DLPのインストール..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp @@ -4086,15 +4086,15 @@ yt_menu_pro() { echo "更新が完了しました。任意のキーを押して続行します..." read ;; 3) - send_stats "yt-dlpのアンインストール..." - echo "yt-dlpのアンインストール..." + send_stats "yt-dlp をアンインストールしています..." + echo "yt-dlp をアンインストールしています..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アンインストールが完了しました。続行するには任意のキーを押してください..." + echo "アンインストールが完了しました。任意のキーを押して続行します..." read ;; 5) - send_stats "単一のビデオダウンロード" + send_stats "単一のビデオのダウンロード" read -e -p "ビデオリンクを入力してください:" url yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ @@ -4104,13 +4104,13 @@ yt_menu_pro() { --no-overwrites --no-post-overwrites "$url" read -e -p "ダウンロードが完了したら、任意のキーを押して続行します..." ;; 6) - send_stats "バッチビデオのダウンロード" + 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.0&from_spmid=666.25.Episode.0" > "$URL_FILE" + echo -e "# 複数のビデオ リンク アドレスを入力します\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "バッチダウンロードを開始します..." + echo "今すぐバッチダウンロードを開始してください..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4118,7 +4118,7 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "バッチのダウンロードが完了し、任意のキーを押して続行します..." ;; + read -e -p "バッチダウンロードが完了しました。続行するには任意のキーを押してください..." ;; 7) send_stats "カスタムビデオのダウンロード" read -e -p "完全なYT-DLPパラメーター(YT-DLPを除く)を入力してください。" custom @@ -4128,7 +4128,7 @@ yt_menu_pro() { --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "実行が完了したら、キーを押して続行します..." ;; + read -e -p "実行が完了しました。続行するには任意のキーを押してください..." ;; 8) send_stats "MP3ダウンロード" read -e -p "ビデオリンクを入力してください:" url @@ -4138,11 +4138,11 @@ yt_menu_pro() { --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites "$url" - read -e -p "オーディオのダウンロードが完了しました、任意のキーを押して続行します..." ;; + read -e -p "音声のダウンロードが完了しました。続行するには任意のキーを押してください..." ;; 9) send_stats "ビデオを削除します" - read -e -p "削除ビデオの名前を入力してください:" rmdir + read -e -p "削除されたビデオの名前を入力してください:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4178,7 +4178,7 @@ set_timedate() { -# DPKG割り込みの問題を修正します +# dpkgの中断問題を修正 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4206,7 +4206,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "不明なパッケージマネージャー!" + echo "不明なパッケージマネージャーです!" return fi } @@ -4214,7 +4214,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}システムのクリーンアップ...${gl_bai}" + echo -e "${gl_huang}システムクリーニング中...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4243,7 +4243,7 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "パッケージマネージャーのキャッシュをクリーンアップ..." apk cache clean echo "システムログを削除してください..." rm -rf /var/log/* @@ -4267,15 +4267,15 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "システムログを削除してください..." + echo "システムログを削除します..." rm -rf /var/log/* echo "一時ファイルを削除します..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "未使用の依存関係をクリーンアップ..." + echo "未使用の依存関係をクリーンアップします..." pkg autoremove -y - echo "パッケージマネージャーのキャッシュを掃除します..." + echo "パッケージマネージャーのキャッシュをクリーンアップ..." pkg clean -y echo "システムログを削除してください..." rm -rf /var/log/* @@ -4283,7 +4283,7 @@ linux_clean() { rm -rf /tmp/* else - echo "不明なパッケージマネージャー!" + echo "不明なパッケージマネージャーです!" return fi return @@ -4342,11 +4342,11 @@ while true; do 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 "3. DNS 設定を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "選択肢を入力してください:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4369,7 +4369,7 @@ while true; do chattr -i /etc/resolv.conf nano /etc/resolv.conf chattr +i /etc/resolv.conf - send_stats "DNS構成を手動で編集します" + send_stats "DNS 構成を手動で編集する" ;; *) break @@ -4392,13 +4392,13 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # PasswordAuthenticationが見つかった場合は、はいに設定します + # 見つかった場合は、PasswordAuthentication が Yes に設定されます 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はyesに設定されています + # 見つかった場合、PubkeyAuthentication は Yes に設定されます 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/' \ @@ -4406,7 +4406,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthenticationもPubKeyAuthenticationが一致しない場合は、デフォルト値を設定します + # PasswordAuthentication も 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" @@ -4430,7 +4430,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSHポートは次のように変更されています。$new_port" + echo "SSH ポートは次のように変更されました。$new_port" sleep 1 @@ -4448,7 +4448,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "秘密鍵情報が生成されました。必ずコピーして保存してください。として保存できます${gl_huang}${ipv4_address}_ssh.key${gl_bai}将来のSSHログイン用のファイル" + echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}今後の SSH ログイン用のファイル" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4470,7 +4470,7 @@ import_sshkey() { read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}エラー:公開キーのコンテンツは入力されませんでした。${gl_bai}" + echo -e "${gl_hong}エラー: 公開キーの内容が入力されていません。${gl_bai}" return 1 fi @@ -4488,7 +4488,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}公開キーが正常にインポートされ、ルート秘密キーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}公開キーは正常にインポートされ、ROOT 秘密キーのログインが有効になり、ROOT パスワードのログインが閉じられました。再接続が有効になります。${gl_bai}" } @@ -4503,14 +4503,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を使用するには、root ユーザーが実行する必要があります。" && break_end && kejilion } @@ -4527,16 +4527,16 @@ dd_xitong() { } dd_xitong_1() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}最初のパスワード:${gl_huang}LeitboGi0ro${gl_bai}初期ポート:${gl_huang}22${gl_bai}" - echo -e "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 @@ -4551,14 +4551,14 @@ dd_xitong() { dd_xitong_4() { echo -e "再インストール後の初期ユーザー名:${gl_huang}Administrator${gl_bai}最初のパスワード:${gl_huang}123@@@${gl_bai}初期ポート:${gl_huang}3389${gl_bai}" - echo -e "続行するには任意のキーを押してください..." + echo -e "任意のキーを押して続行します..." read -n 1 -s -r -p "" dd_xitong_bin456789 } while true; do root_use - echo "システムを再インストールします" + echo "システムを再インストールする" echo "--------------------------------" echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " @@ -4584,14 +4584,14 @@ dd_xitong() { echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in 1) - send_stats "Debian 13を再インストールします" + send_stats "debian13を再インストールする" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4599,21 +4599,21 @@ dd_xitong() { ;; 2) - send_stats "Debian 12を再インストールします" + send_stats "debian12を再インストールする" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "Debian 11を再インストールします" + send_stats "debian11を再インストールする" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "Debian 10を再インストールします" + send_stats "debian10を再インストールする" dd_xitong_1 bash InstallNET.sh -debian 10 reboot @@ -4627,21 +4627,21 @@ dd_xitong() { exit ;; 12) - send_stats "Ubuntu 22.04を再インストールします" + send_stats "ubuntu 22.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot exit ;; 13) - send_stats "Ubuntu 20.04を再インストールします" + send_stats "ubuntu 20.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "Ubuntu 18.04を再インストールします" + send_stats "ubuntu 18.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4650,7 +4650,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10を再インストールします" + send_stats "Rockylinux10を再インストールする" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4658,7 +4658,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9を再インストールします" + send_stats "Rockylinux9 を再インストールする" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4674,7 +4674,7 @@ dd_xitong() { ;; 24) - send_stats "alma9を再インストールします" + send_stats "alma9を再インストールする" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4682,7 +4682,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10を再インストールします" + send_stats "oracle10を再インストールする" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4690,7 +4690,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9を再インストールします" + send_stats "oracle9を再インストールする" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4698,7 +4698,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42を再インストールします" + send_stats "fedora42を再インストールする" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4706,7 +4706,7 @@ dd_xitong() { ;; 28) - send_stats "Fedora41を再インストールします" + send_stats "fedora41を再インストールする" dd_xitong_3 bash reinstall.sh fedora 41 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールします" + send_stats "アルパインを再インストールする" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "OpenSuseを再インストールします" + send_stats "opensuse を再インストールする" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4770,7 +4770,7 @@ dd_xitong() { ;; 36) - send_stats "飛ぶ牛をリロードします" + send_stats "Feiniu を再インストールする" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "Windows11を再インストールします" + send_stats "Windows 11を再インストールする" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4787,14 +4787,14 @@ dd_xitong() { 42) dd_xitong_2 - send_stats "Windows 10を再インストールします" + send_stats "Windows 10を再インストールする" bash InstallNET.sh -windows 10 -lang "cn" reboot exit ;; 43) - send_stats "Windows 7を再インストールします" + send_stats "Windows7を再インストールする" 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 @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "Windows Server 19を再インストールします" + send_stats "Windowsサーバー19を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2019 -lang "cn" reboot @@ -4862,7 +4862,7 @@ bbrv3() { echo "" echo "カーネル管理" echo "------------------------" - echo "1。BBRV3カーネルを更新する2。BBRV3カーネルをアンインストールします" + echo "1。BBRV3カーネルを更新します2。BBRV3カーネルをアンインストールします" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4876,7 +4876,7 @@ bbrv3() { # 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:リポジトリを追加します + # ステップ 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+') @@ -4885,7 +4885,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmodカーネルが更新されました。再起動後に有効になります" + echo "XanMod カーネルが更新されました。再起動後に有効になります" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4895,7 +4895,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod カーネルがアンインストールされました。再起動後に有効になります" + echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" server_reboot ;; @@ -4908,13 +4908,13 @@ bbrv3() { else clear - echo "BBR3加速度をセットアップします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv14k421x7bs?t=0.1" + echo "BBR3アクセラレーションの設定" + echo "ビデオ紹介: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "Debian/Ubuntuのみをサポートします" - echo "データをバックアップしてください。Linuxカーネルをアップグレードできるようになります。" + echo "データをバックアップしてください。Linux カーネルをアップグレードして BBR3 を有効にします。" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) @@ -4922,12 +4922,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "現在の環境はそれをサポートせず、DebianとUbuntuシステムのみをサポートしています" + echo "現在の環境では対応しておりません。 Debian および Ubuntu システムのみがサポートされています。" break_end linux_Settings fi else - echo "オペレーティングシステムの種類を決定できません" + echo "オペレーティング システムの種類を特定できません" break_end linux_Settings fi @@ -4938,7 +4938,7 @@ bbrv3() { # 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:リポジトリを追加します + # ステップ 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+') @@ -4968,7 +4968,7 @@ bbrv3() { elrepo_install() { - # Elrepo GPG公開キーをインポートします + # ELRepo GPG 公開キーをインポートする echo "Elrepo GPG公開キーをインポートしてください..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # システムバージョンを検出します @@ -4976,13 +4976,13 @@ elrepo_install() { 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" + echo "サポートされていないオペレーティング システム:$os_name" break_end linux_Settings fi # 検出されたオペレーティングシステム情報を印刷します echo "検出されたオペレーティングシステム:$os_name $os_version" - # システムのバージョンに応じて、対応する ELRepo ウェアハウス構成をインストールします。 + # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする if [[ "$os_version" == 8 ]]; then echo "Elrepoリポジトリ構成(バージョン8)をインストールしてください..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm @@ -4997,8 +4997,8 @@ elrepo_install() { break_end linux_Settings fi - # Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールします - echo "Elrepoカーネルリポジトリを有効にし、最新のメインラインカーネルをインストールしてください..." + # ELRepo カーネル リポジトリを有効にし、最新のメインライン カーネルをインストールします。 + echo "ELRepo カーネル リポジトリを有効にし、最新のメインライン カーネルをインストールします..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" @@ -5015,14 +5015,14 @@ elrepo() { clear kernel_version=$(uname -r) echo "Elrepo Kernelをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "現在のカーネル バージョン:$kernel_version" echo "" echo "カーネル管理" echo "------------------------" - echo "1. Elrepo Kernel 2を更新します。ElrepoKernelをアンインストールします" + echo "1. elrepo カーネルを更新します。 2. elrepo カーネルをアンインストールします。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" sub_choice @@ -5052,19 +5052,19 @@ elrepo() { else clear - echo "データをバックアップしてください、そしてあなたのためにLinuxカーネルをアップグレードします" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "データをバックアップしてください。Linux カーネルをアップグレードします。" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hatカーネルをアップグレードします" + send_stats "Red Hat カーネルをアップグレードする" server_reboot ;; [Nn]) @@ -5082,7 +5082,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}ウイルスデータベースを更新してください...${gl_bai}" + echo -e "${gl_huang}ウイルスデータベースを更新しています...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5098,7 +5098,7 @@ clamav_scan() { echo -e "${gl_huang}スキャンディレクトリ$@...${gl_bai}" - # マウントパラメーターを構築します + # ビルドマウントパラメータ local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " @@ -5113,7 +5113,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Dockerコマンドを実行します + # Dockerコマンドを実行する docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5123,7 +5123,7 @@ clamav_scan() { 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}ファイルで見つかったキーワードを検索して、ウイルスの場所を確認する${gl_bai}" + echo -e "${gl_lv}ウイルスがある場合は、お願いします${gl_huang}scan.log${gl_lv}ファイル内で FOUND キーワードを検索して、ウイルスの場所を確認します。${gl_bai}" } @@ -5138,17 +5138,17 @@ clamav() { send_stats "ウイルススキャン管理" while true; do clear - echo "クラマブウイルススキャンツール" - echo "ビデオ紹介: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "Clamav ウイルス スキャン ツール" + echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" echo "------------------------" - echo "これは、主にさまざまな種類のマルウェアを検出および除去するために使用されるオープンソースのウイルス対策ソフトウェアツールです。" - 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 "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) send_stats "フルディスクスキャン" @@ -5169,7 +5169,7 @@ clamav() { ;; 3) send_stats "カスタムディレクトリスキャン" - read -e -p "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5219,7 +5219,7 @@ optimize_high_performance() { 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 @@ -5227,7 +5227,7 @@ optimize_high_performance() { } -# バランスモード最適化機能 +# イコライゼーションモード最適化関数 optimize_balanced() { echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" @@ -5300,7 +5300,7 @@ restore_defaults() { echo -e "${gl_lv}CPU設定を復元します...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}他の最適化を復元します...${gl_bai}" + echo -e "${gl_lv}他の最適化を元に戻します...${gl_bai}" # 透明な巨大ページを復元する echo always > /sys/kernel/mm/transparent_hugepage/enabled # numaバランスを復元します @@ -5310,9 +5310,9 @@ restore_defaults() { -# ウェブサイトの構築最適化機能 +# Webサイト構築最適化機能 optimize_web_server() { - echo -e "${gl_lv}ウェブサイトの構築最適化モードに切り替えます...${gl_bai}" + echo -e "${gl_lv}ウェブサイト構築最適化モードに切り替えます...${gl_bai}" echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 @@ -5343,7 +5343,7 @@ optimize_web_server() { 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 @@ -5358,17 +5358,17 @@ Kernel_optimize() { clear send_stats "Linuxカーネルチューニング管理" echo "Linuxシステムにおけるカーネルパラメーターの最適化" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "さまざまなシステムパラメーターチューニングモードが提供され、ユーザーは独自の使用シナリオに従って選択および切り替えることができます。" - echo -e "${gl_huang}ヒント:${gl_bai}生産環境では注意して使用してください!" + echo "さまざまなシステムパラメータチューニングモードを提供し、ユーザーは独自の使用シナリオに応じて切り替えることができます。" + echo -e "${gl_huang}ヒント:${gl_bai}本番環境では注意して使用してください。" echo "--------------------" - echo "1.高性能最適化モード:システムパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU設定を最適化します。" + echo "1. ハイパフォーマンス最適化モード: システムのパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU 設定を最適化します。" echo "2。バランスの取れた最適化モード:毎日の使用に適したパフォーマンスとリソース消費のバランス。" - echo "3.ウェブサイトの最適化モード:Webサイトサーバーを最適化して、接続処理機能、応答速度、全体的なパフォーマンスを並行します。" - echo "4。ライブブロードキャスト最適化モード:ライブブロードキャストストリーミングの特別なニーズを最適化して、遅延を減らし、伝送パフォーマンスを向上させます。" + echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" + echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" - echo "6.デフォルト設定を復元します:システム設定をデフォルトの構成に復元します。" + echo "6. デフォルト設定の復元: システム設定をデフォルト構成に復元します。" echo "--------------------" echo "0。前のメニューに戻ります" echo "--------------------" @@ -5411,7 +5411,7 @@ Kernel_optimize() { cd ~ clear restore_defaults - send_stats "デフォルト設定を復元します" + send_stats "デフォルト設定を復元する" ;; *) break @@ -5447,7 +5447,7 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されました。$langSSHの再接続が有効になります。${gl_bai}" hash -r break_end ;; @@ -5457,7 +5457,7 @@ update_locale() { ;; esac else - echo "サポートされていないシステム、システムタイプは認識できません。" + echo "サポートされていないシステムです。システムの種類を識別できません。" break_end fi } @@ -5472,24 +5472,24 @@ while true; do clear echo "現在のシステム言語:$LANG" echo "------------------------" - echo "1。英語2。簡素化された中国語3。伝統的な中国語" + echo "1. 英語 2. 簡体字中国語 3. 繁体字中国語" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "あなたの選択を入力してください:" choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えます" + send_stats "英語に切り替えて" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "簡素化された中国人に切り替えます" + send_stats "簡体字中国語に切り替える" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" - send_stats "伝統的な中国人に切り替えます" + send_stats "繁体字中国語に切り替える" ;; *) break @@ -5525,7 +5525,7 @@ shell_bianse() { send_stats "コマンドラインの美化ツール" while true; do clear - echo "コマンドラインの美化ツール" + 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}#" @@ -5582,7 +5582,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "システムのごみ箱" + send_stats "システムリサイクルステーション" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5598,16 +5598,16 @@ linux_trash() { clear echo -e "現在のリサイクルビン${trash_status}" - echo -e "有効になった後、RMによって削除されたファイルは、最初にリサイクルビンに入り、重要なファイルの誤った削除を防ぎます!" + echo -e "有効にすると、重要なファイルを誤って削除することを防ぐために、rm によって削除されたファイルは最初にごみ箱に入れられます。" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" echo "------------------------" - echo "1. ごみ箱を有効にする 2. ごみ箱を閉じる" + echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" echo "3。コンテンツを復元4。リサイクルビンをクリアします" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -5632,7 +5632,7 @@ linux_trash() { mv "$TRASH_DIR/$file_to_restore" "$HOME/" echo "$file_to_restoreホームディレクトリに復元されました。" else - echo "ファイルは存在しません。" + echo "ファイルが存在しません。" fi ;; 4) @@ -5656,11 +5656,11 @@ bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/ # バックアップを作成します create_backup() { - send_stats "バックアップを作成します" + send_stats "バックアップの作成" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # ユーザーにバックアップディレクトリを入力するように求めます - echo "バックアップ例を作成します:" + # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する + echo "バックアップの作成例:" echo "- 単一のディレクトリをバックアップします: /var /www" echo "- バックアップ複数のディレクトリ: /etc /home /var /log" echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" @@ -5674,11 +5674,11 @@ create_backup() { "/home" # 用户数据 ) else - # ユーザーが入力したディレクトリをスペースごとに配列に分離します + # ユーザーが配列に入力したディレクトリをスペースで区切ります。 IFS=' ' read -r -a BACKUP_PATHS <<< "$input" fi - # バックアップファイルプレフィックスを生成します + # バックアップ ファイルのプレフィックスを生成する local PREFIX="" for path in "${BACKUP_PATHS[@]}"; do # ディレクトリ名を抽出し、スラッシュを削除します @@ -5689,77 +5689,77 @@ create_backup() { # 最後のアンダースコアを削除します local PREFIX=${PREFIX%_} - # バックアップファイル名を生成します + # バックアップファイル名の生成 local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" # ユーザーが選択したディレクトリを印刷します - echo "選択したバックアップディレクトリは次のとおりです。" + echo "選択したバックアップ ディレクトリは次のとおりです。" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done # バックアップの作成 - echo "バックアップを作成します$BACKUP_NAME..." + echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # コマンドが成功しているかどうかを確認してください + # コマンドが成功したかどうかを確認する if [ $? -eq 0 ]; then - echo "バックアップは正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" + echo "バックアップが正常に作成されました:$BACKUP_DIR/$BACKUP_NAME" else - echo "バックアップの作成に失敗しました!" + echo "バックアップの作成に失敗しました!" exit 1 fi } -# バックアップを復元します +# バックアップを復元する restore_backup() { - send_stats "バックアップを復元します" + send_stats "バックアップを復元する" # 復元するバックアップを選択します read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME - # バックアップファイルが存在するか確認する + # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then echo "バックアップファイルは存在しません!" exit 1 fi - echo "バックアップの復元$BACKUP_NAME..." + echo "バックアップの回復$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then echo "バックアップと復元を正常に!" else - echo "バックアップリカバリに失敗しました!" + echo "バックアップリカバリが失敗しました!" exit 1 fi } # バックアップをリストします list_backups() { - echo "利用可能なバックアップ:" + echo "利用可能なバックアップ:" ls -1 "$BACKUP_DIR" } -# バックアップを削除します +# バックアップの削除 delete_backup() { - send_stats "バックアップを削除します" + send_stats "バックアップの削除" - read -e -p "削除するバックアップ ファイル名を入力してください:" BACKUP_NAME + read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME # バックアップファイルが存在するかどうかを確認します if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "バックアップファイルが存在しません!" exit 1 fi - # バックアップを削除します + # バックアップの削除 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then echo "バックアップは正常に削除されました!" else - echo "バックアップの削除が失敗しました!" + echo "バックアップの削除に失敗しました!" exit 1 fi } @@ -5775,7 +5775,7 @@ linux_backup() { echo "------------------------" list_backups echo "------------------------" - echo "1.バックアップを作成する2。バックアップを復元3。バックアップを削除します" + echo "1. バックアップの作成 2. バックアップの復元 3. バックアップの削除" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -5798,9 +5798,9 @@ linux_backup() { -# 接続リストを表示します +# 接続リストを表示 list_connections() { - echo "接続の保存:" + echo "保存された接続:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" @@ -5809,23 +5809,23 @@ list_connections() { # 新しい接続を追加します add_connection() { - send_stats "新しい接続を追加します" - echo "新しい接続を作成する例:" - echo "- 接続名:my_server" - echo "- IPアドレス:192.168.1.100" + send_stats "新しい接続を追加" + echo "新しい接続を作成する例:" + echo "- 接続名: my_server" + echo "- IP アドレス: 192.168.1.100" echo "- ユーザー名:root" echo "- ポート:22" echo "------------------------" - read -e -p "接続名を入力してください:" name + read -e -p "接続名を入力してください:" name read -e -p "IPアドレスを入力してください:" ip read -e -p "ユーザー名(デフォルト:root)を入力してください:" user local user=${user:-root} # 如果用户未输入,则使用默认值 root read -e -p "ポート番号を入力してください(デフォルト:22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "認証方法を選択してください:" - echo "1。パスワード" - echo "2。キー" + echo "認証方法を選択してください:" + echo "1. パスワード" + echo "2. キー" read -e -p "選択(1/2)を入力してください:" auth_choice case $auth_choice in @@ -5834,7 +5834,7 @@ add_connection() { echo # 换行 ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + echo "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" local password_or_key="" while IFS= read -r line; do # 入力が空で、キーコンテンツにすでに開始が含まれている場合、入力は終了します @@ -5856,13 +5856,13 @@ add_connection() { fi ;; *) - echo "無効な選択!" + echo "無効な選択です!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "接続が保存されます!" + echo "接続が保存されました!" } @@ -5874,7 +5874,7 @@ delete_connection() { local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続​​は見つかりませんでした。" + echo "エラー: 対応する接続​​が見つかりません。" return fi @@ -5889,10 +5889,10 @@ delete_connection() { echo "接続が削除されました!" } -# 接続を使用します +# 接続を使用する use_connection() { send_stats "接続を使用します" - read -e -p "使用するには、接続番号を入力してください。" num + read -e -p "使用する接続番号を入力してください:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then @@ -5902,31 +5902,31 @@ use_connection() { IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "接続$name ($ip)..." + 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.ターゲットサーバーがキーを使用してログインできるかどうか。" + echo "2. キー ファイルのアクセス許可は正しいか (600 である必要があります)。" + echo "3. ターゲットサーバーがキーを使用したログインを許可するかどうか。" fi else - # パスワードで接続します + # パスワードを使用して接続する if ! command -v sshpass &> /dev/null; then - echo "エラー:SSHPassはインストールされていません。最初にSSHPassをインストールしてください。" - echo "インストール方法:" + 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 "接続に失敗しました!以下の点をご確認ください。" + echo "1. ユーザー名とパスワードは正しいですか?" echo "2。ターゲットサーバーがパスワードログインを許可するかどうか。" - echo "3.ターゲットサーバーのSSHサービスが正常に実行されているかどうか。" + echo "3. 対象サーバのSSHサービスが正常に動作しているか。" fi fi } @@ -5938,7 +5938,7 @@ ssh_manager() { CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 構成ファイルとキーディレクトリが存在するかどうかを確認し、それが存在しない場合は、それを作成します + # 設定ファイルとキーディレクトリが存在するかどうかを確認し、存在しない場合は作成します。 if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5954,9 +5954,9 @@ ssh_manager() { echo "SSHを介して他のLinuxシステムに接続できます" echo "------------------------" list_connections - echo "1.新しい接続を作成する2。接続を使用する3。接続を削除します" + echo "1. 新しい接続を作成します。 2. 接続を使用します。 3. 接続を削除します。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" choice case $choice in @@ -5964,7 +5964,7 @@ ssh_manager() { 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac done } @@ -5980,7 +5980,7 @@ ssh_manager() { -# 利用可能なハードディスクパーティションをリストします +# 利用可能なハードディスクのパーティションをリストする list_partitions() { echo "利用可能なハードドライブのパーティション:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" @@ -5988,22 +5988,22 @@ list_partitions() { # パーティションをマウントします mount_partition() { - send_stats "パーティションをマウントする" - read -e -p "マウントするパーティション名を入力してください(たとえば、SDA1):" 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 "パーティションはすでに取り付けられています!" + echo "パーティションが取り付けられました!" return fi - # マウントポイントを作成します + # マウントポイントの作成 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" @@ -6023,7 +6023,7 @@ unmount_partition() { send_stats "パーティションをアンインストールします" read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION - # パーティションが既にマウントされているかどうかを確認してください + # パーティションがマウントされているかどうかを確認する MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then echo "パーティションはマウントされていません!" @@ -6050,11 +6050,11 @@ list_mounted_partitions() { # フォーマットパーティション format_partition() { send_stats "フォーマットパーティション" - read -e -p "パーティション名を入力してフォーマット(たとえば、SDA1):" PARTITION + read -e -p "フォーマットするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認します if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "パーティションが存在しません!" return fi @@ -6064,13 +6064,13 @@ format_partition() { return fi - # ファイルシステムタイプを選択します - echo "ファイル システムのタイプを選択してください:" + # ファイルシステムの種類を選択してください + echo "ファイルシステムタイプを選択してください:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "選択を入力してください:" FS_CHOICE + read -e -p "選択肢を入力してください:" FS_CHOICE case $FS_CHOICE in 1) FS_TYPE="ext4" ;; @@ -6080,37 +6080,37 @@ format_partition() { *) echo "無効な選択!"; return ;; esac - # フォーマットを確認します - read -e -p "フォーマットパーティション /dev /$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM + # フォーマットの確認 + 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 "パーティションのフォーマットが失敗しました!" + echo "パーティションのフォーマットに失敗しました!" fi } -# パーティションステータスを確認します +# パーティションのステータスを確認する check_partition() { - send_stats "パーティションステータスを確認します" - read -e -p "パーティション名を入力して確認してください(たとえばSDA1):" PARTITION + send_stats "パーティションのステータスを確認する" + read -e -p "確認するパーティション名を入力してください (例: sda1):" PARTITION - # パーティションが存在するかどうかを確認します + # パーティションが存在するかどうかを確認する if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then echo "パーティションは存在しません!" return fi # パーティションステータスを確認します - echo "パーティション /dev /$PARTITION状態:" + echo "パーティション /dev/ を確認してください$PARTITION状態:" fsck "/dev/$PARTITION" } @@ -6124,12 +6124,12 @@ disk_manager() { echo "------------------------" list_partitions echo "------------------------" - echo "1。パーティションをマウント2。パーティションをアンインストールする3。マウントされたパーティションを表示" - echo "4。パーティション5をフォーマットします。パーティションステータスを確認します" + echo "1. パーティションをマウントします。 2. パーティションをアンマウントします。 3. マウントされたパーティションを表示します。" + echo "4. パーティションをフォーマットします。 5. パーティションのステータスを確認します。" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case $choice in 1) mount_partition ;; 2) unmount_partition ;; @@ -6145,7 +6145,7 @@ disk_manager() { -# タスクリストを表示します +# タスクリストを表示 list_tasks() { echo "保存された同期タスク:" echo "---------------------------------" @@ -6155,24 +6155,24 @@ list_tasks() { # 新しいタスクを追加します add_task() { - send_stats "新しい同期タスクを追加します" - echo "新しい同期タスクを作成する例:" - echo "- タスク名:backup_www" + send_stats "新しい同期タスクを追加する" + echo "新しい同期タスクの作成例:" + echo "- タスク名:backup_www" echo "- ローカルディレクトリ: /var /www" echo "- リモートアドレス:user@192.168.1.100" - echo "- リモートディレクトリ: /バックアップ /www" + echo "- リモートディレクトリ: /backup/www" echo "- ポート番号 (デフォルトは 22)" echo "---------------------------------" - read -e -p "タスク名を入力してください:" name - read -e -p "ローカルディレクトリを入力してください:" local_path - read -e -p "リモートディレクトリを入力してください:" remote_path + 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 + read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port port=${port:-22} echo "認証方法を選択してください:" echo "1。パスワード" - echo "2。キー" + echo "2. キー" read -e -p "(1/2)を選択してください:" auth_choice case $auth_choice in @@ -6195,7 +6195,7 @@ add_task() { 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" @@ -6203,20 +6203,20 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "無効なキーコンテンツ!" + echo "キーの内容が無効です!" return fi ;; *) - echo "無効な選択!" + echo "無効な選択です!" return ;; esac - echo "同期モードを選択してください:" - echo "1。標準モード(-AVZ)" + echo "同期モードを選択してください:" + echo "1. 標準モード (-avz)" echo "2。ターゲットファイル(-avz - delete)を削除します" - read -e -p "(1/2)を選択してください:" mode + read -e -p "(1/2) を選択してください:" mode case $mode in 1) options="-avz" ;; 2) options="-avz --delete" ;; @@ -6230,36 +6230,36 @@ add_task() { echo "ミッションが保存されました!" } -# タスクを削除します +# タスクの削除 delete_task() { - send_stats "同期タスクを削除します" + send_stats "同期タスクの削除" read -e -p "削除するには、タスク番号を入力してください。" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:対応するタスクは見つかりませんでした。" + 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 "削除されたタスク!" + echo "タスクが削除されました!" } run_task() { - send_stats "同期タスクを実行します" + send_stats "同期タスクを実行する" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # パラメーターを分析します + # パラメータを解析する local direction="push" # 默认是推送到远端 local num @@ -6270,14 +6270,14 @@ run_task() { num="$1" fi - # 着信タスク番号がない場合は、ユーザーに入力するように促します + # タスク番号が渡されない場合、ユーザーは入力を求められます。 if [[ -z "$num" ]]; then - read -e -p "実行するタスク番号を入力してください:" num + read -e -p "実行するタスク番号を入力してください:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "エラー:タスクは見つかりませんでした!" + echo "エラー: タスクが見つかりませんでした。" return fi @@ -6285,7 +6285,7 @@ run_task() { # 同期の方向に従ってソースとターゲットのパスを調整します if [[ "$direction" == "pull" ]]; then - echo "ローカルへのプルと同期:$remote:$local_path -> $remote_path" + echo "同期をローカルに引く:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else @@ -6299,8 +6299,8 @@ run_task() { if [[ "$auth_method" == "password" ]]; then if ! command -v sshpass &> /dev/null; then - echo "エラー:SSHPassはインストールされていません。最初にSSHPassをインストールしてください。" - echo "インストール方法:" + echo "エラー: sshpass がインストールされていません。最初に sshpass をインストールしてください。" + echo "インストール方法:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" return @@ -6314,7 +6314,7 @@ run_task() { fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:キーファイルのアクセス許可が正しくなく、修理されています..." + echo "警告:キーファイルの権限が正しくなく、修理されています..." chmod 600 "$password_or_key" fi @@ -6325,10 +6325,10 @@ run_task() { echo "同期は完了です!" else echo "同期は失敗しました!以下を確認してください。" - echo "1。ネットワーク接続は正常ですか?" + echo "1. ネットワーク接続は正常ですか?" echo "2。リモートホストにアクセスできますか?" echo "3。認証情報は正しいですか?" - echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" + echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" fi } @@ -6337,15 +6337,15 @@ run_task() { schedule_task() { send_stats "同期タイミングタスクを追加します" - read -e -p "定期的に同期するには、タスク番号を入力してください。" num + read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "エラー:有効なタスク番号を入力してください!" return fi - echo "時限実行間隔を選択してください:" - echo "1)1時間に1回実行します" - echo "2)1日1回実行します" + echo "スケジュールされた実行間隔を選択してください:" + echo "1) 1時間に1回実行" + echo "2) 1日1回実行" echo "3)週に1回実行します" read -e -p "オプションを入力してください(1/2/3):" interval @@ -6361,18 +6361,18 @@ schedule_task() { 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" + echo "スケジュールされたタスクが作成されました:$cron_job" } -# スケジュールされたタスクを表示します +# スケジュールされたタスクを表示する view_tasks() { echo "現在のタイミングタスク:" echo "---------------------------------" @@ -6382,15 +6382,15 @@ view_tasks() { # タイミングタスクを削除します delete_task_schedule() { - send_stats "同期タイミングタスクを削除します" + send_stats "同期のスケジュールされたタスクを削除する" read -e -p "削除するには、タスク番号を入力してください。" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "エラー: 有効なタスク番号を入力してください。" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "削除されたタスク番号$numスケジュールされたタスク" + echo "削除されたタスク番号$numタイミングタスク" } @@ -6408,11 +6408,11 @@ rsync_manager() { echo view_tasks echo - echo "1.新しいタスクを作成します2。タスクを削除します" + echo "1. 新しいタスクを作成します。 2. タスクを削除します。" echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6。タイミングタスクを削除します" + echo "5.タイミングタスクを作成6.タイミングタスクを削除します" echo "---------------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "---------------------------------" read -e -p "選択を入力してください:" choice case $choice in @@ -6423,7 +6423,7 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac read -e -p "Enterを押して続行します..." done @@ -6492,22 +6492,22 @@ linux_info() { 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}Linuxバージョン:${gl_bai}$kernel_version" + echo -e "${gl_kjlan}ホスト名:${gl_bai}$hostname" + echo -e "${gl_kjlan}システムバージョン:${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux バージョン:${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_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}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}$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}ハードドライブの使用状況:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}受け取った合計:${gl_bai}$rx" echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" @@ -6520,11 +6520,11 @@ linux_info() { 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}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 -e "${gl_kjlan}実行時間:${gl_bai}$runtime" echo @@ -6540,25 +6540,25 @@ linux_tools() { # 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}sudo スーパー管理者特権ツール${gl_kjlan}4. ${gl_bai}Socat Communication Connection Tool" - echo -e "${gl_kjlan}5. ${gl_bai}HTOPシステム監視ツール${gl_kjlan}6. ${gl_bai}IFTOPネットワークトラフィック監視ツール" - echo -e "${gl_kjlan}7. ${gl_bai}ジップzip圧縮減圧ツールを解凍します${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" + 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}SUDOスーパー管理許可ツール${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}unzip ZIP圧縮・解凍ツール${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live Streamingツールをエンコードする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}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}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}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}" @@ -6571,15 +6571,15 @@ linux_tools() { clear echo "ツールがインストールされており、使用方法は次のとおりです。" curl --help - send_stats "カールをインストールします" + send_stats "カールをインストールする" ;; 2) clear install wget clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" wget --help - send_stats "WGETをインストールします" + send_stats "wgetをインストールする" ;; 3) clear @@ -6593,16 +6593,16 @@ linux_tools() { clear install socat clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" socat -h - send_stats "SOCATをインストールします" + send_stats "socatをインストールする" ;; 5) clear install htop clear htop - send_stats "HTOPをインストールします" + send_stats "htopをインストールする" ;; 6) clear @@ -6615,9 +6615,9 @@ linux_tools() { clear install unzip clear - echo "ツールはインストールされており、次のように使用されます。" + echo "ツールがインストールされており、使用方法は次のとおりです。" unzip - send_stats "unzipをインストールします" + send_stats "Unzipをインストールします" ;; 8) clear @@ -6625,23 +6625,23 @@ linux_tools() { clear echo "ツールがインストールされており、使用方法は次のとおりです。" tar --help - send_stats "タールをインストールします" + send_stats "tarをインストールする" ;; 9) clear install tmux clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" tmux --help - send_stats "tmuxをインストールします" + send_stats "tmuxをインストールする" ;; 10) clear install ffmpeg clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" ffmpeg --help - send_stats "ffmpegをインストールします" + send_stats "FFMPEGをインストールします" ;; 11) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "BTOPをインストールします" + send_stats "btopをインストールする" ;; 12) clear @@ -6676,7 +6676,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZFをインストールします" + send_stats "fzfをインストールする" ;; 15) clear @@ -6720,14 +6720,14 @@ linux_tools() { install sl clear sl - send_stats "SLをインストールします" + send_stats "SLをインストールする" ;; 26) clear install bastet clear bastet - send_stats "バステットをインストールします" + send_stats "バステトをインストールする" ;; 27) clear @@ -6741,7 +6741,7 @@ linux_tools() { install ninvaders clear ninvaders - send_stats "Ninvadersをインストールします" + send_stats "ニンベーダーをインストールする" ;; 31) @@ -6759,13 +6759,13 @@ linux_tools() { 33) clear - send_stats "すべてをアンインストールします" + 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 + read -e -p "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" installname install $installname send_stats "指定されたソフトウェアをインストールします" ;; @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -6806,16 +6806,16 @@ linux_bbr() { echo "" echo "BBR管理" echo "------------------------" - echo "1。BBRV3 2をオンにします。BBRV3(再起動)をオフにします" + echo "1. BBRv3 をオンにする 2. BBRv3 をオフにする (再起動します)" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択肢を入力してください:" sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) bbr_on - send_stats "AlpineはBBR3を有効にします" + send_stats "アルパインがBBR3をオープン" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,7 +6857,7 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - echo -e "${BLUE}現在のバックアップリスト:${NC}" + echo -e "${BLUE}現在のバックアップ リスト:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし" } @@ -6884,7 +6884,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}コンテナは見つかりません${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}コンテナが見つかりません${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6892,7 +6892,7 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "#自動的に生成された復元スクリプト" >> "$RESTORE_SCRIPT" + echo "# 自動生成された復元スクリプト" >> "$RESTORE_SCRIPT" # パッケージ化されたプロジェクトのパスを記録して、パッケージの重複を避ける declare -A PACKED_COMPOSE_PATHS=() @@ -6903,15 +6903,15 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cはい、Docker-Composeコンテナ${NC}" + echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -e -p "Compose Directoryは検出されません。手動でパスを入力してください。" project_dir + read -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" project_dir fi - # Composeプロジェクトがパッケージ化されている場合は、スキップしてください + # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" continue @@ -6924,16 +6924,16 @@ docker_ssh_migration() { echo "#docker-compose Recovery:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}プロジェクトを作成する[$project_name]パック:${project_dir}${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name]パック:${project_dir}${NC}" else - echo -e "${RED}docker-compose.ymlが見つかりません、このコンテナをスキップしてください...${NC}" + echo -e "${RED}docker-compose.yml が見つからないため、このコンテナをスキップします...${NC}" fi else # 通常のコンテナバックアップボリューム local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "梱包ロール:$path" + echo "梱包体積:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done @@ -6963,14 +6963,14 @@ docker_ssh_migration() { # /home /dockerのすべてのファイルをバックアップします(サブディレクトリを除く) if [ -d "/home/docker" ]; then - echo -e "${BLUE}/home /dockerの下のファイルをバックアップ...${NC}" + echo -e "${BLUE}/home/docker 下のファイルをバックアップします...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home /dockerの下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}バックアップが完了しました:${BACKUP_DIR}${NC}" - echo -e "${GREEN}利用可能な復元スクリプト:${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}バックアップが完了しました:${BACKUP_DIR}${NC}" + echo -e "${GREEN}利用可能な復元スクリプト:${RESTORE_SCRIPT}${NC}" } @@ -6981,15 +6981,15 @@ docker_ssh_migration() { restore_docker() { send_stats "Dockerの復元" - read -e -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR + read -e -p "復元するバックアップ ディレクトリを入力してください:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } - echo -e "${BLUE}復元操作を開始します...${NC}" + echo -e "${BLUE}復元操作を開始しています...${NC}" install tar jq gzip install_docker - # ------------------------------ + # --------- Compose プロジェクトの復元を優先します --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then @@ -7010,27 +7010,27 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}プロジェクトの作成 [$project_name]減圧:$original_path${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name] は次のように抽出されました。$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}プロジェクトの作成 [$project_name]復元が完了しました!${NC}" + echo -e "${GREEN}プロジェクトを作成する[$project_name】レストア完了!${NC}" fi done - # ------------------------------ + # --------- 通常のコンテナの復元を続行 --------- echo -e "${BLUE}通常のDockerコンテナを確認して復元します...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}コンテナの処理:$container${NC}" + echo -e "${GREEN}処理容器:$container${NC}" - # 容器が既に存在し、実行中かどうかを確認してください + # コンテナがすでに存在し、実行されているかどうかを確認します if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container]走っています、復元をスキップします...${NC}" + echo -e "${YELLOW}容器 [$container] すでに実行中のため、復元をスキップしています...${NC}" continue fi @@ -7051,7 +7051,7 @@ docker_ssh_migration() { ENV_ARGS="$ENV_ARGS -e \"$e\"" done - # ボリュームマッピング +ボリュームデータリカバリ + # ボリュームマッピング + ボリュームデータリカバリ VOL_ARGS="" mapfile -t VOLS < <(jq -r '.[0].Mounts[] | "\(.Source):\(.Destination)"' "$json") for v in "${VOLS[@]}"; do @@ -7062,19 +7062,19 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "ボリュームデータの回復:$VOL_SRC" + echo "ボリュームデータを復元します。$VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done - # 既存のが実行されていないコンテナを削除します + # 既存だが実行されていないコンテナを削除する if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container]存在しますが、実行していません。古いコンテナを削除してください...${NC}" + echo -e "${YELLOW}容器 [$container]存在しますが、実行していない、古いコンテナを削除してください...${NC}" docker rm -f "$container" fi - # コンテナの起動 - echo "restoreコマンドを実行します:docker run -d - name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + # コンテナを起動します + echo "復元コマンドを実行します: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done @@ -7082,12 +7082,12 @@ docker_ssh_migration() { # /home /dockerの下でファイルを復元します if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}/home /dockerの下でファイルを復元します...${NC}" + echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / echo -e "${GREEN}/home/docker 下のファイルが復元されました${NC}" else - echo -e "${YELLOW}/home /dockerの下のファイルのバックアップは見つかりませんでした、スキップ...${NC}" + echo -e "${YELLOW}/home/docker の下にあるファイルのバックアップが見つかりませんでした。スキップしています...${NC}" fi @@ -7098,14 +7098,14 @@ docker_ssh_migration() { # 移動します # ---------------------------- migrate_docker() { - send_stats "Dockerの移行" + send_stats "Docker の移行" install jq read -e -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } - read -e -p "ターゲットサーバーIP:" TARGET_IP - read -e -p "ターゲットサーバーSSHユーザー名:" TARGET_USER - read -e -p "ターゲットサーバーSSHポート[デフォルト22]:" TARGET_PORT + read -e -p "ターゲットサーバーIP:" TARGET_IP + read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" @@ -7123,8 +7123,8 @@ docker_ssh_migration() { # ---------------------------- delete_backup() { send_stats "Dockerバックアップファイルの削除" - read -e -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + read -e -p "削除するバックアップ ディレクトリを入力してください:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" } @@ -7133,7 +7133,7 @@ docker_ssh_migration() { # メインメニュー # ---------------------------- main_menu() { - send_stats "Dockerバックアップの移行と復元" + send_stats "Docker バックアップ 移行 復元" while true; do clear echo "------------------------" @@ -7142,10 +7142,10 @@ docker_ssh_migration() { list_backups echo -e "" echo "------------------------" - echo -e "1。Dockerプロジェクトをバックアップします" - echo -e "2。Dockerプロジェクトを移行します" + echo -e "1. Docker プロジェクトをバックアップする" + echo -e "2. Docker プロジェクトを移行する" echo -e "3. Dockerプロジェクトを復元します" - echo -e "4. Dockerプロジェクトのバックアップファイルを削除します" + echo -e "4. Dockerプロジェクトのバックアップファイルを削除する" echo "------------------------" echo -e "0。前のメニューに戻ります" echo "------------------------" @@ -7177,14 +7177,14 @@ linux_docker() { echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker環境のインストールと更新${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${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}Dockerコンテナ管理${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}4. ${gl_bai}Docker画像管理" + echo -e "${gl_kjlan}4. ${gl_bai}Dockerイメージ管理" echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" - echo -e "${gl_kjlan}6. ${gl_bai}Dockerボリューム管理" + echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}7. ${gl_bai}清潔な役に立たないドッカーコンテナとミラーネットワークデータボリューム" echo -e "${gl_kjlan}------------------------" @@ -7192,14 +7192,14 @@ linux_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}12. ${gl_bai}Docker-ipv6 アクセスをオフにする" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}Docker環境のバックアップ/移行/復元" + echo -e "${gl_kjlan}19. ${gl_bai}バックアップ/移行/復元Docker環境" echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールする" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) @@ -7215,8 +7215,8 @@ linux_docker() { 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 "Dockerグローバルステータス" - echo "Dockerバージョン" + send_stats "ドッカーのグローバルステータス" + echo "Docker のバージョン" docker -v docker compose version @@ -7227,10 +7227,10 @@ linux_docker() { echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Docker ボリューム:${gl_lv}$volume_count${gl_bai}" + echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7270,14 +7270,14 @@ linux_docker() { done echo "" - echo "ネットワーク運用" + echo "ネットワーク操作" echo "------------------------" - echo "1.ネットワークを作成します" + echo "1. ネットワークを作成する" echo "2。インターネットに参加してください" - echo "3. ネットワークを終了します" + echo "3。ネットワークを終了します" echo "4.ネットワークを削除します" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" sub_choice @@ -7290,16 +7290,16 @@ linux_docker() { 2) send_stats "インターネットに参加してください" read -e -p "ネットワーク名に参加してください:" dockernetwork - read -e -p "これらのコンテナはネットワークに追加されます(複数のコンテナ名はスペースで区切られています):" dockernames + 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 + send_stats "ネットワークに参加する" + read -e -p "出口ネットワーク名:" dockernetwork + read -e -p "これらのコンテナはネットワークから終了します (複数のコンテナ名はスペースで区切ってください)。" dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除します" - read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork + send_stats "ネットワークを削除する" + read -e -p "削除するネットワーク名を入力してください:" dockernetwork docker network rm $dockernetwork ;; @@ -7329,17 +7329,17 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1.新しいボリュームを作成します" + echo "1. 新しいボリュームを作成します" echo "2。指定されたボリュームを削除します" echo "3.すべてのボリュームを削除します" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) - send_stats "新しいボリュームを作成する" + send_stats "新しいボリュームを作成します" read -e -p "新しいボリューム名を設定します:" dockerjuan docker volume create $dockerjuan @@ -7363,7 +7363,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -7376,7 +7376,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker のクリーンアップ" + send_stats "Dockerクリーニング" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7385,7 +7385,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "Docker V6が開いています" + send_stats "Docker v6 がオン" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 閉じる" + send_stats "Docker V6レベル" docker_ipv6_off ;; @@ -7424,7 +7424,7 @@ linux_docker() { 20) clear - send_stats "Dockerアンインストール" + send_stats "Docker のアンインストール" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7436,7 +7436,7 @@ linux_docker() { [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -7445,7 +7445,7 @@ linux_docker() { kejilion ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -7462,14 +7462,14 @@ linux_test() { while true; do clear - # send_stats「テストスクリプトコレクション」 + # send_stats "テストスクリプト集" echo -e "テストスクリプトコレクション" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}IPおよびロック解除ステータス検出" + echo -e "${gl_kjlan}IPおよびロック解除ステータスの検出" echo -e "${gl_kjlan}1. ${gl_bai}CHATGPTはステータス検出のロックを解除します" - echo -e "${gl_kjlan}2. ${gl_bai}リージョンストリーミングメディアのロック解除テスト" + echo -e "${gl_kjlan}2. ${gl_bai}リージョンストリーミングメディアロック解除テスト" echo -e "${gl_kjlan}3. ${gl_bai}YeahWUストリーミングメディアのロック解除検出" - echo -e "${gl_kjlan}4. ${gl_bai}xykt IP 品質チェック スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}ネットワーク速度測定" @@ -7477,29 +7477,29 @@ linux_test() { echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" echo -e "${gl_kjlan}13. ${gl_bai}超高速トリプルネットワーク速度テスト" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" - echo -e "${gl_kjlan}15. ${gl_bai}Nxtraceは、IPバックホールテストスクリプトを指定します" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3ネットワークラインテスト" - echo -e "${gl_kjlan}17. ${gl_bai}I-ABC多機能速度テストスクリプト" - echo -e "${gl_kjlan}18. ${gl_bai}ネットワーク品質の高品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace は IP バックホール テスト スクリプトを指定します" + echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 3つのネットワーク回線テスト" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc 多機能速度テスト スクリプト" + echo -e "${gl_kjlan}18. ${gl_bai}Networt Network品質の身体診断スクリプト${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}icu/gb5 CPU パフォーマンステストスクリプト" + echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPUパフォーマンステストスクリプト" 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}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${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) clear - send_stats "CHATGPTはステータス検出のロックを解除します" + send_stats "ChatGPTロック解除状態検出" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) @@ -7509,7 +7509,7 @@ linux_test() { ;; 3) clear - send_stats "YeahWUストリーミングメディアのロック解除検出" + send_stats "Yeawu ストリーミング メディアのロック解除の検出" install wget wget -qO- ${gh_proxy}github.com/yeahwu/check/raw/main/check.sh | bash ;; @@ -7522,7 +7522,7 @@ linux_test() { 11) clear - send_stats "BestTrace 3ネットワークバックホール遅延ルーティングテスト" + send_stats "besttrace トリプル ネットワーク バックホール遅延ルーティング テスト" install wget wget -qO- git.io/besttrace | bash ;; @@ -7538,30 +7538,30 @@ linux_test() { ;; 14) clear - send_stats "nxtrace高速バックホールテストスクリプト" + send_stats "nxtrace 高速バックホール テスト スクリプト" curl nxtrace.org/nt |bash nexttrace --fast-trace --tcp ;; 15) clear - send_stats "Nxtraceは、IPバックホールテストスクリプトを指定します" + send_stats "nxtrace は IP バックホール テスト スクリプトを指定します" echo "参照できるIPのリスト" echo "------------------------" echo "北京テレコム:219.141.136.12" - echo "北京ユニコム:202.106.50.1" + 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 "広州電信: 58.60.188.222" + echo "上海電信: 202.96.209.133" + echo "上海ユニコム: 210.22.97.1" + echo "上海モバイル: 211.136.112.200" + echo "広州の通信:58.60.188.222" echo "広州ユニコム:210.21.196.6" - echo "広州モバイル:120.196.165.24" + echo "広州モバイル: 120.196.165.24" echo "成都電信: 61.139.2.69" - echo "成都ユニコム:119.6.6.6" + echo "成都チャイナユニコム: 119.6.6.6" echo "成都モバイル: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 "湖南ユニコム: 42.48.16.100" + echo "湖南省モバイル: 39.134.254.6" echo "------------------------" read -e -p "指定されたIPを入力してください:" testip @@ -7595,7 +7595,7 @@ linux_test() { ;; 22) clear - send_stats "IICU/GB5 CPUパフォーマンステストスクリプト" + send_stats "icu/gb5 CPU パフォーマンステストスクリプト" check_swap bash <(curl -sL bash.icu/gb5) ;; @@ -7635,15 +7635,15 @@ linux_Oracle() { send_stats "Oracle Cloud Scriptコレクション" echo -e "Oracle Cloud Scriptコレクション" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}アイドルマシンアクティブスクリプトをインストールします" + 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}3. ${gl_bai}DD 再インストール システム スクリプト" + echo -e "${gl_kjlan}4. ${gl_bai}探偵R起動スクリプト" + echo -e "${gl_kjlan}5. ${gl_bai}ROOTパスワードログインモードを有効にする" echo -e "${gl_kjlan}6. ${gl_bai}IPv6回復ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択を入力してください:" sub_choice @@ -7651,7 +7651,7 @@ linux_Oracle() { 1) clear echo "アクティブスクリプト:CPUが10-20%を占めるメモリは20%を占めています" - read -e -p "インストールしてもよろしいですか? (はい/いいえ):" choice + read -e -p "必ずインストールしますか? (y/n):" choice case "$choice" in [Yy]) @@ -7663,20 +7663,20 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # ユーザーにCPUコアの数と占有率の数を入力するように促し、入力した場合はデフォルト値を使用します。 + # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 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 + 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 + read -e -p "メモリの使用率を入力してください[デフォルト:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # Dockerコンテナを実行します + # Dockerコンテナを実行する docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7691,7 +7691,7 @@ linux_Oracle() { ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -7699,7 +7699,7 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloudはアクティブスクリプトをアンインストールします" + send_stats "Oracle Cloudアンインストール・アクティブ・スクリプト" ;; 3) @@ -7707,12 +7707,12 @@ linux_Oracle() { echo "システムを再インストールします" echo "--------------------------------" echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - read -e -p "必ず続行しますか? (y/n):" choice + read -e -p "必ず続けますか? (y/n):" choice case "$choice" in [Yy]) while true; do - read -e -p "再インストールするシステムを選択してください: 1. Debian12 | 2.Ubuntu20.04:" sys_choice + read -e -p "再インストールするシステムを選択してください:1。Debian12| 2。Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7724,7 +7724,7 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "選択の無効な、再入力してください。" + echo "選択が無効です。再入力してください。" ;; esac done @@ -7745,7 +7745,7 @@ linux_Oracle() { 4) clear - send_stats "探偵r開始スクリプト" + send_stats "探偵R起動スクリプト" bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) @@ -7834,29 +7834,29 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp webサイトビルディング" - echo -e "${gl_huang}LDNMP Webサイトビルディング" + # send_stats "LDNMP Web サイトの構築" + echo -e "${gl_huang}LDNMP Web サイトの構築" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールします${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールします${gl_huang}★${gl_bai}" + echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールする${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールします${gl_huang}★${gl_bai}" echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" - echo -e "${gl_huang}5. ${gl_bai}Apple CMSフィルムとテレビ局をインストールします${gl_huang}6. ${gl_bai}ユニコーンデジタルカードネットワークをインストールします" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum Webサイトをインストールします${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" - echo -e "${gl_huang}9. ${gl_bai}LinkStack共有リンクプラットフォームをインストールします${gl_huang}20. ${gl_bai}動的サイトをカスタマイズします" + echo -e "${gl_huang}5. ${gl_bai}Apple CMS ムービーおよび TV ステーションをインストールする${gl_huang}6. ${gl_bai}Unicorn デジタル カード ネットワークをインストールする" + echo -e "${gl_huang}7. ${gl_bai}flarumフォーラムWebサイトをインストールする${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" + 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}21. ${gl_bai}nginxのみをインストールする${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}サイトリダイレクト" echo -e "${gl_huang}23. ${gl_bai}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" - echo -e "${gl_huang}25. ${gl_bai}Bitwardenパスワード管理プラットフォームをインストールします${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" - echo -e "${gl_huang}27. ${gl_bai}AIペイントプロンプトワードジェネレーターをインストールします${gl_huang}28. ${gl_bai}サイトの逆プロキシロードバランス" + echo -e "${gl_huang}25. ${gl_bai}Bitwarden パスワード管理プラットフォームをインストールする${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" + echo -e "${gl_huang}27. ${gl_bai}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}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}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}0. ${gl_bai}メインメニューに戻ります" echo -e "${gl_huang}------------------------${gl_bai}" read -e -p "選択を入力してください:" sub_choice @@ -7875,7 +7875,7 @@ linux_ldnmp() { # ディスクフォーラム webname="Discuz论坛" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,7 +7898,7 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" + echo "データベースアドレス: mysql" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -7909,10 +7909,10 @@ linux_ldnmp() { 4) clear - # Kedao Cloudデスクトップ + # Kedao クラウド デスクトップ webname="可道云桌面" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,10 +7934,10 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "データベースアドレス:mysql" + echo "データベースアドレス: mysql" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" + echo "データベース名:$dbname" echo "Redisホスト:Redis" ;; @@ -7947,7 +7947,7 @@ linux_ldnmp() { # Apple CMS webname="苹果CMS" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,21 +7973,21 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" + echo "データベースアドレス: mysql" + echo "データベースポート: 3306" echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベース接頭辞: mac_" + echo "データベースプレフィックス:mac_" echo "------------------------" - echo "インストールが成功した後、バックグラウンドアドレスにログインします" + echo "インストールが成功したら、バックエンド アドレスにログインします。" echo "https://$yuming/vip.php" ;; 6) clear - # 一本足のカウントカード + # 一本足のナンバーカード webname="独脚数卡" send_stats "インストール$webname" echo "展開を開始します$webname" @@ -8012,7 +8012,7 @@ linux_ldnmp() { ldnmp_web_on echo "データベースアドレス:mysql" - echo "データベースポート:3306" + echo "データベースポート: 3306" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -8021,14 +8021,14 @@ linux_ldnmp() { echo "redis パスワード: デフォルトでは入力されていません" echo "Redisポート:6379" echo "" - echo "ウェブサイトURL:https://$yuming" + echo "ウェブサイトURL:https://$yuming" echo "バックグラウンドログインパス: /admin" echo "------------------------" - echo "ユーザー名:admin" - echo "パスワード:管理者" + echo "ユーザー名: 管理者" + echo "パスワード: 管理者" echo "------------------------" - echo "ログインするときに右上隅に赤いerror0が表示される場合は、次のコマンドを使用してください。" - echo "また、ユニコーン番号カードがとても面倒で、そのような問題があることに非常に腹を立てています!" + echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" + echo "私も、なぜユニコーンナンバーカードがこれほど面倒で問題が多いのか、非常に腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8075,9 +8075,9 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "テーブルプレフィックス:flarum_" echo "管理者情報は自分で設定されます" @@ -8113,7 +8113,7 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースプレフィックス:typecho_" + echo "データベース接頭辞: typecho_" echo "データベースアドレス:mysql" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -8155,7 +8155,7 @@ linux_ldnmp() { echo "データベースアドレス:mysql" echo "データベースポート:3306" echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" ;; @@ -8163,7 +8163,7 @@ linux_ldnmp() { clear webname="PHP动态站点" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8183,7 +8183,7 @@ linux_ldnmp() { echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" echo "-------------" echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,12 +8193,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.phpが配置されているパス" + 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 "(/home/web/html/に似たindex.phpのパスを入力してください$yuming/wordpress/): " index_lujing + read -e -p "(/home/web/html/ のような、index.php へのパスを入力してください)$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 @@ -8206,7 +8206,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}3/6${gl_bai}] PHPバージョンを選択してください" echo "-------------" - read -e -p "1。PHPの最新バージョン| 2。Php7.4:" pho_v + 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 @@ -8217,7 +8217,7 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "選択の無効な、再入力してください。" + echo "選択が無効です。再入力してください。" ;; esac @@ -8225,7 +8225,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}4/6${gl_bai}] 指定された拡張機能をインストールします" echo "-------------" - echo "インストールされた拡張機能" + echo "インストールされている拡張機能" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8235,16 +8235,16 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}5/6${gl_bai}]サイト構成を編集します" + echo -e "[${gl_huang}5/6${gl_bai}] サイト構成を編集する" echo "-------------" - 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 -e "[${gl_huang}6/6${gl_bai}] データベース管理" echo "-------------" read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db case $use_db in @@ -8252,8 +8252,8 @@ linux_ldnmp() { echo ;; 2) - echo "データベースのバックアップは、.GZ-endコンプレッションパッケージである必要があります。 Pagoda/1panelのバックアップデータのインポートをサポートするために、/home/directoryに入れてください。" - read -e -p "ダウンロードリンクを入力して、バックアップデータをリモートでダウンロードすることもできます。 Enterを直接押して、リモートダウンロードをスキップします:" url_download_db + echo "データベースのバックアップは、.gz で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" + read -e -p "ダウンロード リンクを入力してバックアップ データをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8263,7 +8263,7 @@ linux_ldnmp() { 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 "データベースインポートテーブルデータ" + echo "データベースにインポートされたテーブルデータ" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql echo "データベースのインポートが完了しました" @@ -8279,11 +8279,11 @@ linux_ldnmp() { ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "テーブルの接頭辞:$prefix" - echo "管理者ログイン情報は自分で設定されます" + echo "管理者のログイン情報は自分で設定します" ;; @@ -8297,9 +8297,9 @@ linux_ldnmp() { clear webname="站点重定向" send_stats "インストール$webname" - echo "導入を開始する$webname" + echo "展開を開始します$webname" add_yuming - read -e -p "ジャンプドメイン名を入力してください:" reverseproxy + read -e -p "リダイレクト ドメイン名を入力してください:" reverseproxy nginx_install_status install_ssltls certs_status @@ -8333,10 +8333,10 @@ linux_ldnmp() { clear webname="反向代理-域名" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" - read -e -p "抗ジェネレーションドメイン名を入力してください。" fandai_yuming + read -e -p "リバース プロキシ ドメイン名を入力してください:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8451,8 +8451,8 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリの下" - read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download + echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8467,7 +8467,7 @@ linux_ldnmp() { # find "$(realpath .)" -name "index.html" -print find "$(realpath .)" -name "index.html" -print | xargs -I {} dirname {} - read -e -p "(/home/web/html/に似たindex.htmlへのパスを入力してください$yuming/index/): " index_lujing + read -e -p "(/home/web/html/ のような、index.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 @@ -8495,7 +8495,7 @@ linux_ldnmp() { send_stats "LDNMP環境バックアップ" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ中$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do @@ -8505,10 +8505,10 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "リモートサーバーIPを入力してください:" remote_ip - read -e -p "ターゲットサーバーSSHポート[デフォルト22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" + echo "エラー: リモート サーバーの IP を入力してください。" continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8518,7 +8518,7 @@ linux_ldnmp() { scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" else - echo "転送されるファイルは見つかりませんでした。" + echo "転送するファイルが見つかりませんでした。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac done @@ -8534,7 +8534,7 @@ linux_ldnmp() { 33) clear - send_stats "タイミングのリモートバックアップ" + send_stats "スケジュールされたリモートバックアップ" read -e -p "リモートサーバーIPを入力してください:" useip read -e -p "リモートサーバーのパスワードを入力してください:" usepasswd @@ -8557,7 +8557,7 @@ linux_ldnmp() { ;; 2) check_crontab_installed - read -e -p "毎日のバックアップの時間を選択します(時間、0-23):" hour + read -e -p "毎日のバックアップ時間 (時間、0 ~ 23) を選択します。" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8583,7 +8583,7 @@ linux_ldnmp() { linux_ldnmp fi - # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージが使用されます。 + # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージを使用します if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8602,7 +8602,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "圧縮パッケージが見つかりませんでした。" + echo "圧縮パッケージは見つかりませんでした。" fi ;; @@ -8620,11 +8620,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP環境を更新します" + send_stats "LDNMP環境を更新する" echo "LDNMP環境を更新します" echo "------------------------" ldnmp_v - echo "コンポーネントの新しいバージョンを発見します" + echo "新しいバージョンのコンポーネントが見つかりました" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8644,13 +8644,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1。更新nginx2。mysql3を更新します。php4を更新します。redisを更新します" + echo "1. nginx を更新します。 2. mysql を更新します。 3. php を更新します。 4. redis を更新します。" echo "------------------------" echo "5。完全な環境を更新します" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8659,7 +8659,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "入力してください${ldnmp_pods}バージョン番号 (例: 8.0 8.3 8.4 9.0) (Enter キーを押して最新バージョンを取得します):" version + read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version local version=${version:-latest} cd /home/web/ @@ -8670,13 +8670,13 @@ linux_ldnmp() { 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" + 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 + read -e -p "入力してください${ldnmp_pods}バージョン番号 (例: 7.4 8.0 8.1 8.2 8.3) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8710,7 +8710,7 @@ linux_ldnmp() { 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}仕上げる" + echo "更新します${ldnmp_pods}仕上げる" ;; 4) @@ -8729,7 +8729,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "LDNMP環境の完全アップデート" + send_stats "LDNMP環境を完全に更新します" cd /home/web/ docker compose down --rmi all @@ -8755,7 +8755,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP環境をアンインストールします" + send_stats "LDNMP環境をアンインストールする" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8804,7 +8804,7 @@ while true; do local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # ループで色を設定します + # ループで色を設定する for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8814,72 +8814,72 @@ while true; do done echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1パネルの新世代管理パネル${gl_kjlan}4. ${color4}nginxproxymanagerビジュアルパネル" + echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" - echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" - echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}Rocketchatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" + echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendaoプロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" + echo -e "${gl_kjlan}11. ${color11}ZenTao プロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" - echo -e "${gl_kjlan}15. ${color15}Emby Multimedia Management System${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${color17}AdGuardhomeアドウェア${gl_kjlan}18. ${color18}Onlyofficeオンラインオフィス OFFICE" - echo -e "${gl_kjlan}19. ${color19}サンダープールWAFファイアウォールパネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" + echo -e "${gl_kjlan}15. ${color15}emby マルチメディア管理システム${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" + echo -e "${gl_kjlan}17. ${color17}Adguardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" + echo -e "${gl_kjlan}19. ${color19}Leichi WAF ファイアウォール パネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}vscode webバージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" + echo -e "${gl_kjlan}21. ${color21}VScode Web バージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Today スケジュールされたタスク管理フレームワーク" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Managementパネル${gl_kjlan}28. ${color28}librespeed速度テストツール" - echo -e "${gl_kjlan}29. ${color29}searxng集約検索サイト${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}フォトプリズムプライベートアルバムシステム" + echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}27. ${color27}Dockge コンテナ スタック管理パネル${gl_kjlan}28. ${color28}LibreSpeed 速度テストツール" + echo -e "${gl_kjlan}29. ${color29}searxng 集約検索ステーション${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrismプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDFツールコレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Shareファイル共有プラットフォーム" - echo -e "${gl_kjlan}35. ${color35}友達のミニマリストのサークル${gl_kjlan}36. ${color36}LobeChatAIチャットアグリゲーションサイト" - echo -e "${gl_kjlan}37. ${color37}MyIPツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}WebSH WebバージョンSSH接続ツール" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF ツール コレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Share ファイル共有プラットフォーム" + echo -e "${gl_kjlan}35. ${color35}ミニマリストの友達の輪${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}37. ${color37}MyIP ツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" + echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}webssh Web版 SSH接続ツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" - echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}Rustdeskリモートデスク(リレー)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHubアクセラレーションステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk リモート デスクトップ (リレー)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHub加速ステーション${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVEチキンパネル${gl_kjlan}52. ${color52}dPanelコンテナ管理パネル" - echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMH ホスト Web サイト構築管理パネル" + echo -e "${gl_kjlan}51. ${color51}PVEオープンチックパネル${gl_kjlan}52. ${color52}DPanel コンテナ管理パネル" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify Big Model Knowledge Base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi Big Model Asset Management${gl_kjlan}60. ${color60}Jumpserverオープンソースバス剤マシン" + echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify 大規模モデルのナレッジ ベース${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI 大規模モデル資産管理${gl_kjlan}60. ${color60}JumpServer オープンソース要塞マシン" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}Ragflow Big Model Knowledge Base" - echo -e "${gl_kjlan}63. ${color63}OpenWebui自己ホストAIプラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" - echo -e "${gl_kjlan}65. ${color65}N8Nオートメーションワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLPビデオダウンロードツール" - echo -e "${gl_kjlan}67. ${color67}DDNS-GOダイナミックDNS管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinsSL証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGOファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" + echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}RAGFlow 大規模モデルのナレッジ ベース" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" + echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" + echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidromeプライベートミュージックサーバー${gl_kjlan}72. ${color72}Bitwardenパスワードマネージャー${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MOONTVプライベート映画" + echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" - echo -e "${gl_kjlan}77. ${color77}サンダーオフラインダウンロードツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszelサーバーの監視${gl_kjlan}80. ${color80}Linkwardenブックマーク管理" + echo -e "${gl_kjlan}77. ${color77}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" + echo -e "${gl_kjlan}79. ${color79}Beszel サーバーの監視${gl_kjlan}80. ${color80}リンクワーデンのブックマーク管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeetビデオ会議${gl_kjlan}82. ${color82}GPT-Load High-Performance AI透明プロキシ" - echo -e "${gl_kjlan}83. ${color83}コマリサーバー監視ツール${gl_kjlan}84. ${color84}Wallos個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}Jellyfinメディア管理システム" - echo -e "${gl_kjlan}87. ${color87}synctvムービーウォッチングアーティファクト${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" + echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos Personal Financial Management Tools" + echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー" - echo -e "${gl_kjlan}93. ${color93}DUFS Minimalist Static File Server${gl_kjlan}94. ${color94}ゴープ高速ダウンロードツール" - echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム${gl_kjlan}96. ${color96}2Fauth自己ホストの2段階検証装置" - echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン${gl_kjlan}100. ${color100}同期ポイントツーポイントファイル同期ツール" + echo -e "${gl_kjlan}93. ${color93}Dufs のミニマリスト静的ファイル サーバー${gl_kjlan}94. ${color94}Gopeed高速ダウンロードツール" + echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム${gl_kjlan}96. ${color96}2FAuth セルフホスト型 2 段階認証システム" + echo -e "${gl_kjlan}97. ${color97}WireGuard ネットワーキング (サーバー)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン${gl_kjlan}100. ${color100}Syncthing ピアツーピア ファイル同期ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AIビデオ生成ツール${gl_kjlan}102. ${color102}VoceChatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}101. ${color101}AI動画生成ツール${gl_kjlan}102. ${color102}VoceChatマルチプレイヤーオンラインチャットシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" + echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice fi case $sub_choice in @@ -9032,7 +9032,7 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザー名を設定します:" admin read -e -p "ログインユーザーパスワードを設定します。" admin_password docker run -d \ --name=webtop-ubuntu \ @@ -9075,8 +9075,8 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezhaの監視$check_docker $update_status" - echo "オープンソース、軽量で使いやすいサーバーの監視と操作およびメンテナンスツール" + echo -e "ネザモニタリング$check_docker $update_status" + echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -9086,7 +9086,7 @@ while true; do echo "------------------------" echo "1。使用します" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "あなたの選択を入力してください:" choice @@ -9155,9 +9155,9 @@ while true; do check_docker_image_update $docker_name clear - echo -e "郵便局サービス$check_docker $update_status" - echo "Poste.ioはオープンソースメールサーバーソリューションです。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + echo -e "郵便サービス$check_docker $update_status" + echo "poste.io はオープンソースのメール サーバー ソリューションです。" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" echo "ポート検出" @@ -9172,14 +9172,14 @@ while true; do if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) - echo "アクセスアドレス:" + echo "訪問先住所:" echo "https://$yuming" fi echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. インストール 2. アップデート 3. アンインストール" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "あなたの選択を入力してください:" choice @@ -9221,7 +9221,7 @@ while true; do add_app_id clear - echo "poste.ioがインストールされました" + echo "Poste.ioがインストールされています" echo "------------------------" echo "次のアドレスを使用してposte.ioにアクセスできます。" echo "https://$yuming" @@ -9303,7 +9303,7 @@ while true; do 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がインストールされています" + echo "rocket.chat がインストールされました" check_docker_app_ip } @@ -9313,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -9397,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -9556,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "雷のプールを作る" + send_stats "サンダープールを構築します" local app_id="19" local docker_name=safeline-mgt @@ -9573,11 +9573,11 @@ while true; do echo "" echo "------------------------" - echo "1。インストール2。更新3。パスワードのリセット4。アンインストール" + echo "1. インストール 2. アップデート 3. パスワードのリセット 4. アンインストール" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -9611,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "デフォルトのインストールディレクトリである場合、プロジェクトはアンインストールされました。インストールディレクトリをカスタマイズする場合は、インストールディレクトリにアクセスして自分で実行する必要があります。" + echo "デフォルトのインストール ディレクトリにいる場合、プロジェクトはすでにアンインストールされています。インストール ディレクトリをカスタマイズする場合は、インストール ディレクトリに移動して自分で実行する必要があります。" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -10019,7 +10019,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="公式ウェブサイトの紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10072,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoyaファミリーバケット" + send_stats "シャオヤファミリーバケツ" clear install_docker check_disk_space 1 @@ -10276,7 +10276,7 @@ while true; do prometheus_install clear ip_address - echo "インストール完了" + echo "インストール" check_docker_app_ip echo "最初のユーザー名とパスワードは次のとおりです" } @@ -10383,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVEチキン" + send_stats "PVE オープンひよこ" 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 ;; @@ -10503,7 +10503,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10518,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10546,7 +10546,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10569,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10657,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10673,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "アプリがアンインストールされました" + echo "アプリはアンインストールされています" } docker_app_plus @@ -10969,8 +10969,8 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "ログインユーザー名を設定します:" admin - read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーのパスワードを設定します。" admin_password read -e -p "承認コードを入力してください:" shouquanma @@ -10987,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11001,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11075,7 +11075,7 @@ while true; do docker_rum() { read -e -p "ログインユーザー名を設定します:" app_use - read -e -p "ログインパスワードの設定:" app_passwd + read -e -p "ログインパスワードを設定します:" app_passwd docker run -d \ --name xunlei \ @@ -11172,7 +11172,7 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 公式のDocker-ComposeおよびEnvファイルをダウンロードします + # 公式の docker-compose および env ファイルをダウンロードする curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" @@ -11191,7 +11191,7 @@ while true; do sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # コンテナを起動します + # コンテナの起動 docker compose up -d clear @@ -11272,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11290,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "設定${docker_name}SK-159KEJILIONYYDS163などのログインキー(SKターニング文字と数字の組み合わせ):" app_passwd + read -e -p "設定${docker_name}ログイン キー (sk- で始まる文字と数字の組み合わせ) 例: sk-159kejilionyyds163:" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11620,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11709,8 +11709,8 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" app_use - read -e -p "ログインパスワードの設定:" app_passwd + read -e -p "ログインユーザー名を設定します:" app_use + read -e -p "ログインパスワードを設定します:" app_passwd docker run -d \ --name ${docker_name} \ @@ -11812,7 +11812,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11826,7 +11826,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "アプリがアンインストールされました" + echo "アプリはアンインストールされています" } docker_app_plus @@ -11844,7 +11844,7 @@ while true; do docker_rum() { - read -e -p "ネットワークを形成するためにクライアントの数を入力してください(デフォルト5):" COUNT + read -e -p "ネットワーク内のクライアントの数を入力してください (デフォルトは 5):" COUNT COUNT=${COUNT:-5} read -e -p "WireGuardセグメントを入力してください(デフォルト10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} @@ -11923,10 +11923,10 @@ while true; do echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}すべての出力は各クライアントによって提供されます。使用方法は次のとおりです。${gl_bai}" + echo -e "${gl_lv}${COUNT}各クライアントのすべての出力を構成します。利用方法は以下の通りです。${gl_bai}" echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}" echo -e "${gl_lv}2。Windowsクライアントをダウンロードし、構成コードをコピーしてネットワークに接続します。${gl_bai}" - echo -e "${gl_lv}3。Linuxはスクリプトを使用してWGクライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}" + echo -e "${gl_lv}3. スクリプトを使用して Linux に WG クライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}" echo -e "${gl_lv}公式クライアントのダウンロード方法:https://www.wireguard.com/install/${gl_bai}" break_end @@ -11958,9 +11958,9 @@ while true; do # ディレクトリを作成する(存在しない場合) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアントの構成を貼り付け、Enterを2回連続で押して保存してください。" + echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" - # 変数を初期化します + # 変数を初期化する input="" empty_line_count=0 @@ -11980,7 +11980,7 @@ while true; do # 構成ファイルに書き込みます echo "$input" > "$CONFIG_FILE" - echo "クライアントの構成が保存されています$CONFIG_FILE" + echo "クライアント設定の保存場所$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12028,7 +12028,7 @@ while true; do read -e -p "CPUコアの数を設定します(デフォルト2):" CPU_CORES local CPU_CORES=${CPU_CORES:-2} - read -e -p "メモリサイズを設定します(デフォルト4G):" RAM_SIZE + read -e -p "メモリ サイズを設定します (デフォルトは 4G):" RAM_SIZE local RAM_SIZE=${RAM_SIZE:-4} mkdir -p /home/docker/dsm @@ -12059,7 +12059,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -12114,7 +12114,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -12129,7 +12129,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -12138,7 +12138,7 @@ while true; do - 102) + 102|vocechat) local app_id="102" local docker_name="vocechat-server" @@ -12168,24 +12168,24 @@ while true; do b) clear - send_stats "すべてのアプリケーションバックアップ" + send_stats "すべてのアプリケーションのバックアップ" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ$backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ中$backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "バックアップファイルが作成されました: /$backup_filename" + echo "バックアップファイルが作成されました: /$backup_filename" read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice case "$choice" in [Yy]) read -e -p "リモートサーバーIPを入力してください:" remote_ip - read -e -p "ターゲットサーバーSSHポート[デフォルト22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" + echo "エラー: リモート サーバーの IP を入力してください。" continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -12193,14 +12193,14 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "ファイルは、リモートサーバー/ルートディレクトリに転送されました。" + echo "ファイルはリモート サーバー/ルート ディレクトリに転送されます。" else - echo "転送されるファイルは見つかりませんでした。" + echo "転送するファイルが見つかりませんでした。" fi break ;; *) - echo "注:現在、バックアップにはDockerプロジェクトのみが含まれており、Pagodaや1PanelなどのWebサイトビルディングパネルのデータバックアップは含まれていません。" + echo "注: 現在のバックアップには Docker プロジェクトのみが含まれており、Pagoda や 1panel などの Web サイト構築パネルのデータ バックアップは含まれていません。" break ;; esac @@ -12211,18 +12211,18 @@ while true; do r) root_use send_stats "すべてのアプリケーションが復元されます" - echo "利用可能なアプリバックアップ" + echo "利用可能なアプリのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "入力して最新のバックアップを復元し、バックアップファイル名を入力して指定されたバックアップを復元し、0を入力して終了します。" filename + read -e -p "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、0 を入力して終了します。" filename if [ "$filename" == "0" ]; then break_end linux_panel fi - # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージを使用します + # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージが使用されます。 if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi @@ -12257,8 +12257,8 @@ linux_work() { clear send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" - echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" + echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" echo -e "${gl_kjlan}------------------------" echo "現在既存のワークスペースのリスト" @@ -12270,20 +12270,20 @@ linux_work() { echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" echo -e "${gl_kjlan}4. ${gl_bai}作業エリア 4" echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo. 5" - echo -e "${gl_kjlan}6. ${gl_bai}ワークスペースNo. 6" - echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo. 7" + echo -e "${gl_kjlan}6. ${gl_bai}作業エリア6" + echo -e "${gl_kjlan}7. ${gl_bai}作業エリア 7" echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" - echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo. 9" + echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo.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}22. ${gl_bai}ワークスペースの作成/入力" echo -e "${gl_kjlan}23. ${gl_bai}バックグラウンドワークスペースにコマンドを注入します" - echo -e "${gl_kjlan}24. ${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 + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -12299,14 +12299,14 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 4) @@ -12320,7 +12320,7 @@ linux_work() { clear install tmux local SESSION_NAME="work5" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 6) @@ -12341,14 +12341,14 @@ linux_work() { clear install tmux local SESSION_NAME="work8" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 10) @@ -12369,9 +12369,9 @@ linux_work() { fi send_stats "SSH常駐モード" echo -e "SSH常駐モード${tmux_sshd_status}" - echo "SSH接続が有効になった後、レジデントモードに直接入力し、以前の作業状態に戻ります。" + echo "SSH 接続を開いた後、直接常駐モードに入り、前の動作状態に直接戻ります。" echo "------------------------" - echo "1。2をオンにします。オフにします" + echo "1. オン 2. オフ" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -12397,7 +12397,7 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME + read -e -p "作成または入力したワークスペースの名前を入力してください (1001 kj001 work1 など)。" SESSION_NAME tmux_run send_stats "カスタムワークスペース" ;; @@ -12406,13 +12406,13 @@ linux_work() { 23) read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd tmux_run_d - send_stats "バックグラウンドワークスペースにコマンドを注入します" + send_stats "バックグラウンドワークスペースにコマンドを挿入する" ;; 24) read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "ワークスペースを削除します" + send_stats "ワークスペースの削除" ;; 0) @@ -12449,41 +12449,41 @@ linux_Settings() { 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}指定されたバージョンのPythonをインストールします" - 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}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}ルートアカウントを無効にして新しいアカウントを作成します${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}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ボットシステムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSHの高リスクの脆弱性を修正します" + 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}ROOT秘密鍵ログインモード" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot システムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSH の高リスク脆弱性を修正" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${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}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}37. ${gl_bai}コマンドラインの履歴${gl_kjlan}38. ${gl_bai}rsync リモート同期ツール" echo -e "${gl_kjlan}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}メッセージボード${gl_kjlan}66. ${gl_bai}ワンストップシステムの最適化${gl_huang}★${gl_bai}" + 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 + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "ショートカットキーを入力してください(出口に0を入力してください):" kuaijiejian + read -e -p "ショートカット キーを入力してください (終了するには 0 を入力してください):" kuaijiejian if [ "$kuaijiejian" == "0" ]; then break_end linux_Settings @@ -12491,7 +12491,7 @@ linux_Settings() { 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 "スクリプトのショートカットキーが設定されています" + send_stats "スクリプトのショートカットキーが設定されました" break_end linux_Settings done @@ -12499,30 +12499,30 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定します" + send_stats "ログインパスワードを設定する" echo "ログインパスワードを設定します" passwd ;; 3) root_use - send_stats "ルートパスワードモード" + send_stats "rootパスワードモード" add_sshpasswd ;; 4) root_use send_stats "Pyバージョン管理" - echo "Pythonバージョン管理" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + echo "Pythonのバージョン管理" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" + echo -e "現在のPythonのバージョン番号:${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バージョン番号を入力します(Enter 0からExit):" py_new_v + read -e -p "インストールするpythonバージョン番号を入力します(0を入力して終了します):" py_new_v if [[ "$py_new_v" == "0" ]]; then @@ -12588,14 +12588,14 @@ EOF rm -rf $(pyenv root)/cache/* local VERSION=$(python -V 2>&1 | awk '{print $2}') - echo -e "現在のPythonバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "スクリプトPYバージョン切り替え" + echo -e "現在のPythonのバージョン番号:${gl_huang}$VERSION${gl_bai}" + send_stats "スイッチスクリプトPyバージョン" ;; 5) root_use - send_stats "オープンポート" + send_stats "ポートを開く" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 echo "すべてのポートが開いています" @@ -12603,25 +12603,25 @@ EOF ;; 6) root_use - send_stats "SSHポートを変更します" + send_stats "SSHポートを変更する" while true; do clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 現在のSSHポート番号をお読みください + # 現在の 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 -e "現在の SSH ポート番号は次のとおりです。${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "ポート番号が1〜65535の範囲の数字(0を入力して終了)" + 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ポートが変更されました" @@ -12635,8 +12635,8 @@ EOF break_end fi else - echo "入力が無効です。番号を入力してください。" - send_stats "無効なSSHポート入力" + echo "入力が無効です。数値を入力してください。" + send_stats "無効な SSH ポートが入力されました" break_end fi done @@ -12655,8 +12655,8 @@ EOF ;; 9) root_use - send_stats "新しいユーザーはルートを無効にします" - read -e -p "新しいユーザー名を入力してください (終了するには 0 を入力してください):" new_username + send_stats "新規ユーザーの root を無効にする" + read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12671,7 +12671,7 @@ EOF passwd -l root - echo "操作が完了しました。" + echo "操作は完了です。" ;; @@ -12680,42 +12680,42 @@ EOF send_stats "V4/V6の優先度を設定します" while true; do clear - echo "V4/V6の優先度を設定します" + echo "v4/v6 の優先順位を設定する" echo "------------------------" if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; then - echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" else - echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" fi echo "" echo "------------------------" echo "1. IPv4 が先 2. IPv6 が先 3. IPv6 修復ツール" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "優先ネットワークを選択します。" choice + read -e -p "優先ネットワークを選択してください:" choice case $choice in 1) grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf echo "IPv4優先に切り替えました" - send_stats "IPv4の優先度に切り替えました" + send_stats "IPv4優先に切り替えました" ;; 2) rm -f /etc/gai.conf - echo "IPv6の優先度に切り替えました" - send_stats "IPv6の優先度に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" - send_stats "IPv6修正" + echo "この機能は jhb によって提供されています。ありがとう!" + send_stats "IPv6修復" ;; *) @@ -12733,15 +12733,15 @@ EOF 12) root_use - send_stats "仮想メモリを設定します" + send_stats "仮想メモリを設定する" while true; do clear - echo "仮想メモリを設定します" + 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 -e "現在の仮想メモリ:${gl_huang}$swap_info${gl_bai}" echo "------------------------" echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" echo "------------------------" @@ -12798,29 +12798,29 @@ EOF echo "------------------------" echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" echo "------------------------" - echo "3.最高の権限を与える4。最高の権限をキャンセルします" + echo "3. 最高の権限を付与する 4. 最高の権限を削除する" echo "------------------------" - echo "5.アカウントを削除します" + echo "5. アカウントを削除する" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + 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 "操作が完了しました。" + echo "操作は完了です。" ;; 2) - # ユーザーに新しいユーザー名を入力するように求めます - read -e -p "新しいユーザー名を入力してください:" new_username + # ユーザーに新しいユーザー名の入力を求める + read -e -p "新しいユーザー名を入力してください:" new_username # 新しいユーザーを作成し、パスワードを設定します useradd -m -s /bin/bash "$new_username" @@ -12835,21 +12835,21 @@ EOF ;; 3) - read -e -p "ユーザー名を入力してください:" username + read -e -p "ユーザー名を入力してください:" username # 新規ユーザーのsudo許可を付与します echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "ユーザー名を入力してください:" username - # sudoersファイルからユーザーのsudoアクセス許可を削除します + read -e -p "ユーザー名を入力してください:" username + # sudoers ファイルからユーザーの sudo 権限を削除する sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) read -e -p "削除するユーザー名を入力してください:" username - # ユーザーとそのホームディレクトリを削除します + # ユーザーとそのホームディレクトリを削除する userdel -r "$username" ;; @@ -12863,7 +12863,7 @@ EOF 14) clear send_stats "ユーザー情報ジェネレーター" - echo "ランダムユーザー名" + echo "ランダムなユーザー名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" @@ -12876,7 +12876,7 @@ EOF 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つのランダムユーザー名を生成します + # 5 つのランダムなユーザー名を生成する for i in {1..5}; do local first_name_index=$((RANDOM % ${#first_names[@]})) local last_name_index=$((RANDOM % ${#last_names[@]})) @@ -12885,7 +12885,7 @@ EOF done echo "" - echo "ランダムな UUID" + echo "ランダムuuid" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) @@ -12893,7 +12893,7 @@ EOF done echo "" - echo "16ビットランダムパスワード" + echo "16桁のランダムなパスワード" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) @@ -12913,10 +12913,10 @@ EOF 15) root_use - send_stats "タイムゾーンを変更します" + send_stats "タイムゾーンを変更する" while true; do clear - echo "システム時間情報" + echo "システム時刻情報" # 現在のシステムタイムゾーンを取得します local timezone=$(current_timezone) @@ -12925,34 +12925,34 @@ EOF local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示します - echo "現在のシステムタイムゾーン:$timezone" - echo "現在のシステム時間:$current_time" + echo "現在のシステムのタイムゾーン:$timezone" + echo "現在のシステム時間:$current_time" echo "" echo "タイムゾーンの切り替え" echo "------------------------" echo "アジア" - echo "1。中国の上海時間2。中国の香港時間" + echo "1. 中国上海時間 2. 中国香港時間" echo "3。日本の東京時間4。韓国のソウル時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" echo "9。タイのバンコクでの時間" echo "------------------------" echo "ヨーロッパ" - echo "11。英国のロンドン時間12。パリの時間フランスの時間" - echo "13。ベルリン時代、ドイツ14。モスクワ・タイム、ロシア" + echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" + echo "13。ベルリン・タイム、ドイツ14。モスクワ・タイム、ロシア" echo "15。オランダのユトレヒト時間16。スペインでのマドリード時間" echo "------------------------" echo "アメリカ" - echo "21。WesternTime22。東部時間" - echo "23。カナダ時間24。メキシコの時間" + echo "21. 米国西部時間 22. 米国東部時間" + echo "23. カナダ時間 24. メキシコ時間" echo "25. ブラジル時間 26. アルゼンチン時間" echo "------------------------" echo "31. UTC 世界標準時" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -12995,14 +12995,14 @@ EOF 18) root_use - send_stats "ホスト名の変更" + send_stats "ホスト名を変更します" while true; do clear local current_hostname=$(uname -n) - echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" + echo -e "現在のホスト名:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "新しいホスト名を入力してください(出口に0を入力してください):" new_hostname + read -e -p "新しいホスト名を入力してください (終了するには 0 を入力してください):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine @@ -13039,14 +13039,14 @@ EOF 19) root_use - send_stats "システムの更新ソースを変更します" + send_stats "システムアップデートソースを変更する" clear echo "更新ソース領域を選択します" - echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" + echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" echo "------------------------" - echo "1。中国本土[デフォルト]2。中国本土[教育ネットワーク]3。海外地域" + echo "1. 中国本土 [デフォルト] 2. 中国本土 [教育ネットワーク] 3. 海外地域" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "あなたの選択を入力してください:" choice @@ -13077,25 +13077,25 @@ EOF clear check_crontab_installed clear - echo "タイミングされたタスクリスト" + echo "スケジュールされたタスクのリスト" crontab -l echo "" echo "動作します" echo "------------------------" - echo "1.タイミングタスクの追加2。タイミングタスクを削除する3。タイミングタスクの編集" + echo "1. スケジュールされたタスクを追加します。 2. スケジュールされたタスクを削除します。 3. スケジュールされたタスクを編集します。" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択肢を入力してください:" sub_choice + read -e -p "選択を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "新しいタスクについては、実行コマンドを入力してください。" newquest + read -e -p "新しいタスクの実行コマンドを入力してください:" newquest echo "------------------------" - echo "1。毎月のタスク2。毎週のタスク" - echo "3. 毎日のタスク 4. 時間ごとのタスク" + echo "1. 月次タスク 2. 週次タスク" + echo "3。毎日のタスク4。時間ごとのタスク" echo "------------------------" - read -e -p "選択肢を入力してください:" dingshi + read -e -p "選択を入力してください:" dingshi case $dingshi in 1) @@ -13103,22 +13103,22 @@ EOF (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) - read -e -p "タスクを実行するためにどの週を選択しますか? (0-6、0は日曜日を表します):" weekday + 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 + read -e -p "毎日、そのタスクを実行する時刻を選択しますか? (時、0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "タスクを実行する時間を入力してください。 (分、0 ~ 60):" minute + read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "時限タスクを追加します" + send_stats "タイムされたタスクを追加します" ;; 2) read -e -p "削除する必要があるキーワードを入力してください。" kquest @@ -13139,11 +13139,11 @@ EOF 21) root_use - send_stats "ローカルホストの解析" + send_stats "ローカルホストの解決" while true; do clear echo "ネイティブホストのペルシングリスト" - echo "ここに解析の一致を追加すると、動的な解析はもはや使用されなくなります" + echo "ここに解析一致を追加すると、動的解析は使用されなくなります" cat /etc/hosts echo "" echo "操作する" @@ -13152,7 +13152,7 @@ EOF echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "選択肢を入力してください:" host_dns case $host_dns in 1) @@ -13162,9 +13162,9 @@ EOF ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "削除する必要がある解析済みコンテンツのキーワードを入力してください:" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "ローカルホストの解析と削除" + send_stats "ローカルホストの解決と削除" ;; *) break # 跳出循环,退出菜单 @@ -13183,16 +13183,16 @@ EOF echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 防御プログラムをインストールする" echo "------------------------" - echo "2. SSH インターセプト記録の表示" + echo "2。SSH傍受記録を表示します" echo "3。リアルタイムログ監視" echo "------------------------" echo "9.防衛プログラムをアンインストールします" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -13214,7 +13214,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 防御プログラムがアンインストールされました" + echo "Fail2Ban防衛プログラムがアンインストールされています" break ;; *) @@ -13231,31 +13231,31 @@ EOF while true; do clear echo "電流制限シャットダウン機能" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" output_status - echo -e "${gl_kjlan}受け取った合計:${gl_bai}$rx" - echo -e "${gl_kjlan}送信合計:${gl_bai}$tx" + echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" + echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" - # Limiting_Shut_down.sh ファイルが存在するかどうかを確認します + # limiting_shut_down.shファイルが存在するかどうかを確認してください if [ -f ~/Limiting_Shut_down.sh ]; then - # しきい値_gbの値を取得する + # threshold_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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません${gl_bai}" fi echo echo "------------------------------------------------" echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" echo "------------------------" - echo "1。現在の制限シャットダウン関数をオンにします2。現在の制限シャットダウン機能を無効にします" + echo "1. 電流制限シャットダウン機能を有効にする 2. 電流制限シャットダウン機能を無効にする" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択を入力してください:" Limiting @@ -13263,11 +13263,11 @@ EOF 1) # 新しい仮想メモリサイズを入力します echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" - read -e -p "着信トラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" rx_threshold_gb + read -e -p "受信トラフィックのしきい値を入力してください (単位は G、デフォルトは 100G):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "アウトバウンドトラフィックのしきい値を入力してください(ユニットはG、デフォルトは100gです):" tx_threshold_gb + read -e -p "送信トラフィックのしきい値を入力してください (単位は G、デフォルトは 100G):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "トラフィックリセット日を入力してください(デフォルトのリセットは、毎月1日目にリセットされます):" cz_day + read -e -p "トラフィックのリセット日を入力してください (デフォルトは毎月 1 日にリセットされます)。" cz_day cz_day=${cz_day:-1} cd ~ @@ -13288,7 +13288,7 @@ EOF crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - crontab -l | grep -v 'reboot' | crontab - rm ~/Limiting_Shut_down.sh - echo "現在の制限シャットダウン関数はオフになっています" + echo "電流制限シャットダウン機能がオフになる" ;; *) break @@ -13305,11 +13305,11 @@ EOF while true; do clear echo "ルート秘密キーログインモード" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" - echo "キーペアが生成され、SSHログインのより安全な方法" + echo "キーペアが生成され、SSH 経由でログインするためのより安全な方法になります。" echo "------------------------" - echo "1.新しいキーを生成する2。既存のキーをインポートする3。ネイティブキーを表示します" + echo "1. 新しいキーを生成します。 2. 既存のキーをインポートします。 3. ローカルキーを表示します。" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" @@ -13317,7 +13317,7 @@ EOF case $host_dns in 1) - send_stats "新しいキーを生成する" + send_stats "新しいキーを生成します" add_sshkey break_end @@ -13350,18 +13350,18 @@ EOF 25) root_use - send_stats "電報警報" - echo "TG-BOTモニタリングと早期警告機能" - echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty" + send_stats "電報警告" + echo "TG-bot監視・早期警告機能" + echo "動画紹介:https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。" + echo "ローカル CPU、メモリ、ハードディスク、トラフィック、SSH ログインのリアルタイム監視とアラートを実現するには、tg robot API とアラートを受信するユーザー ID を設定する必要があります。" echo "しきい値に達した後、ユーザーはユーザーに送信されます" - echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}" - read -e -p "必ず続行しますか? (y/n):" choice + echo -e "${gl_hui}- 通信量についてはサーバーを再起動すると再計算されます -${gl_bai}" + read -e -p "必ず続けますか? (y/n):" choice case "$choice" in [Yy]) - send_stats "電報警告が有効になっています" + send_stats "テレグラム警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -13394,7 +13394,7 @@ EOF source ~/.profile clear - echo "TG-BOT早期警告システムが開始されました" + echo "TG-bot早期警戒システムが作動しました" echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" ;; [Nn]) @@ -13475,7 +13475,7 @@ EOF 41) clear - send_stats "メッセージボード" + send_stats "掲示板" echo "公式のメッセージ技術委員会ライオンをご覧ください。スクリプトについて何かアイデアがある場合は、メッセージを残してコミュニケーションをとってください!" echo "https://board.kejilion.pro" echo "パスワード:kejilion.sh" @@ -13485,33 +13485,33 @@ EOF root_use send_stats "ワンストップチューニング" - echo "ワンストップシステムの最適化" + echo "ワンストップのシステムチューニング" 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 "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 "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 "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。Linuxシステムのカーネルパラメーター最適化に切り替えます${gl_huang}バランスの取れた最適化モード${gl_bai}" + echo -e "10. Linux システムのカーネル パラメータの最適化が次のように切り替わります。${gl_huang}バランスのとれた最適化モード${gl_bai}" echo "------------------------------------------------" - read -e -p "ワンクリックメンテナンスは必ずありますか? (y/n):" choice + read -e -p "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + 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 -e "[${gl_lv}OK${gl_bai}】2/10。システムのジャンクファイルをクリーンアップする" echo "------------------------------------------------" add_swap 1024 @@ -13520,17 +13520,17 @@ EOF echo "------------------------------------------------" local new_port=5522 new_ssh_port - echo -e "[${gl_lv}OK${gl_bai}] 4/10。 SSHポート番号をに設定します${gl_huang}5522${gl_bai}" + 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 -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 -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 -e "[${gl_lv}OK${gl_bai}】7/10。タイムゾーンを次のように設定します${gl_huang}上海${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13557,7 +13557,7 @@ EOF echo "------------------------------------------------" optimize_balanced - echo -e "[${gl_lv}OK${gl_bai}] 10/10。 Linuxシステムのカーネルパラメーターの最適化" + echo -e "[${gl_lv}OK${gl_bai}】10/10。 Linuxシステムのカーネルパラメータの最適化" echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" ;; @@ -13565,7 +13565,7 @@ EOF echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac @@ -13590,23 +13590,23 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" + echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" - echo -e "現在のステータス:$status_message" + echo -e "現在のステータス:$status_message" echo "--------------------" echo "1。コレクションをオンにします" - echo "2。コレクションを閉じます" + echo "2. コレクションを閉じる" echo "--------------------" echo "0。前のメニューに戻ります" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + 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 "コレクションが有効になっています" + echo "収集が開始されました" send_stats "プライバシーとセキュリティコレクションが有効になっています" ;; 2) @@ -13614,7 +13614,7 @@ EOF 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 "プライバシーとセキュリティは収集のために閉鎖されています" + send_stats "プライバシーとセキュリティの収集がオフになっています" ;; *) break @@ -13630,11 +13630,11 @@ EOF 102) clear - send_stats "テックライオンスクリプトをアンインストールします" + send_stats "Tech Lion スクリプトをアンインストールする" echo "Tech Lion スクリプトをアンインストールする" echo "------------------------------------------------" - echo "kejilion スクリプトは、他の機能に影響を与えることなく完全にアンインストールされます。" - read -e -p "必ず続行しますか? (y/n):" choice + echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" + read -e -p "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) @@ -13661,7 +13661,7 @@ EOF ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -13695,18 +13695,18 @@ linux_file() { echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" echo "15.ファイルを削除します" echo "------------------------" - echo "21。ファイルディレクトリの圧縮22。UNZIPファイルディレクトリ23。ファイルディレクトリの移動24。ファイルディレクトリをコピーする" + echo "21. ファイル ディレクトリの圧縮 22. ファイル ディレクトリの解凍 23. ファイル ディレクトリの移動 24. ファイル ディレクトリのコピー" echo "25。ファイルを別のサーバーに渡します" echo "------------------------" echo "0。前のメニューに戻ります" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "選択肢を入力してください:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "ディレクトリ名を入力してください:" dirname + read -e -p "ディレクトリ名を入力してください:" dirname cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" - send_stats "ディレクトリに移動します" + send_stats "ディレクトリを入力してください" ;; 2) # 创建目录 read -e -p "作成するにはディレクトリ名を入力してください。" dirname @@ -13715,9 +13715,9 @@ linux_file() { ;; 3) # 修改目录权限 read -e -p "ディレクトリ名を入力してください:" dirname - read -e -p "許可を入力してください(755など):" perm + read -e -p "許可(755など)を入力してください。" perm chmod "$perm" "$dirname" && echo "権限が変更されました" || echo "変更に失敗しました" - send_stats "ディレクトリ権限を変更します" + send_stats "ディレクトリの権限を変更する" ;; 4) # 重命名目录 read -e -p "現在のディレクトリ名を入力してください:" current_name @@ -13736,8 +13736,8 @@ linux_file() { ;; 11) # 创建文件 read -e -p "作成するにはファイル名を入力してください。" filename - touch "$filename" && echo "作成されたファイル" || echo "作成に失敗しました" - send_stats "ファイルを作成します" + touch "$filename" && echo "ファイルが作成されました" || echo "作成に失敗しました" + send_stats "ファイルの作成" ;; 12) # 编辑文件 read -e -p "編集するにはファイル名を入力してください:" filename @@ -13748,22 +13748,22 @@ linux_file() { 13) # 修改文件权限 read -e -p "ファイル名を入力してください:" filename read -e -p "権限を入力してください (例: 755):" perm - chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました" + 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 "ファイルの名前を変更します" + read -e -p "新しいファイル名を入力してください:" new_name + mv "$current_name" "$new_name" && echo "ファイル名が変更されました" || echo "名前の変更に失敗しました" + send_stats "ファイル名の変更" ;; 15) # 删除文件 - read -e -p "削除するには、ファイル名を入力してください。" filename + read -e -p "削除するファイル名を入力してください:" filename rm -f "$filename" && echo "削除されたファイル" || echo "削除が失敗しました" - send_stats "ファイルを削除します" + send_stats "ファイルの削除" ;; 21) # 压缩文件/目录 - read -e -p "圧縮するファイル/ディレクトリ名を入力してください:" name + read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name install tar tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" send_stats "圧縮ファイル/ディレクトリ" @@ -13771,7 +13771,7 @@ linux_file() { 22) # 解压文件/目录 read -e -p "ファイル名(.tar.gz)を入力してください:" filename install tar - tar -xzvf "$filename" && echo "減圧$filename" || echo "減圧が失敗しました" + tar -xzvf "$filename" && echo "解凍された$filename" || echo "解凍に失敗しました" send_stats "ファイル/ディレクトリを解凍します" ;; @@ -13785,78 +13785,78 @@ linux_file() { read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" + echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" continue fi - mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリが移動されました$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" - send_stats "ファイルまたはディレクトリを移動します" + mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリの移動先$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" + send_stats "ファイルまたはディレクトリを移動する" ;; 24) # 复制文件目录 - read -e -p "コピーするファイルまたはディレクトリのパスを入力してください:" src_path + read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path if [ ! -e "$src_path" ]; then echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました: ファイルまたはディレクトリが存在しません" + send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then - echo "エラー:ターゲットパスを入力してください。" + echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" continue fi # -Rオプションを使用して、ディレクトリを再帰的にコピーします - cp -r "$src_path" "$dest_path" && echo "ファイルまたはディレクトリがコピーされています$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" - send_stats "ファイルまたはディレクトリをコピーします" + cp -r "$src_path" "$dest_path" && echo "コピー先のファイルまたはディレクトリ$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" + send_stats "ファイルまたはディレクトリをコピーする" ;; 25) # 传送文件至远端服务器 - read -e -p "転送されるファイルパスを入力してください。" file_to_transfer + read -e -p "転送するファイル パスを入力してください:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then echo "エラー:ファイルは存在しません。" send_stats "ファイルの転送に失敗しました:ファイルは存在しません" continue fi - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "リモートサーバーのIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then - echo "エラー:リモートサーバーIPを入力してください。" - send_stats "ファイル転送に失敗しました: リモート サーバー IP が入力されていません" + echo "エラー: リモート サーバーの IP を入力してください。" + send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" continue fi - read -e -p "リモートサーバーのユーザー名(デフォルトルート)を入力してください。" remote_user + read -e -p "リモート サーバーのユーザー名 (デフォルトの root) を入力してください:" remote_user remote_user=${remote_user:-root} - read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password + read -e -p "リモートサーバーのパスワードを入力してください:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "エラー:リモートサーバーのパスワードを入力してください。" + echo "エラー: リモート サーバーのパスワードを入力してください。" send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" continue fi - read -e -p "ログインポートを入力してください(デフォルト22):" remote_port + 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を使用してファイルを転送する scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}スクリプトは最新バージョンに更新されました!${gl_huang}v$sh_v_new${gl_bai}" + echo -e "${gl_lv}スクリプトが最新バージョンに更新されました。${gl_huang}v$sh_v_new${gl_bai}" send_stats "スクリプトは最新です$sh_v_new" break_end ~/kejilion.sh @@ -14157,15 +14157,15 @@ while true; do (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 "自動スクリプトの更新をオンにします" + 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 "スクリプト自動更新を閉じます" + echo -e "${gl_lv}自動更新はオフになっています${gl_bai}" + send_stats "スクリプトの自動更新をオフにする" break_end ;; *) @@ -14187,24 +14187,24 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "テクノロジーライオンスクリプトツールボックスv$sh_v" +echo -e "テクノロジー ライオン スクリプト ツールボックス 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}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}Docker管理" echo -e "${gl_kjlan}7. ${gl_bai}ワープ管理" -echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプトコレクション" -echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloud Scriptコレクション" -echo -e "${gl_huang}10. ${gl_bai}LDNMP Webサイトビルディング" +echo -e "${gl_kjlan}8. ${gl_bai}テストスクリプト集" +echo -e "${gl_kjlan}9. ${gl_bai}Oracle Cloudスクリプト・コレクション" +echo -e "${gl_huang}10. ${gl_bai}LDNMP Web サイトの構築" 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}15. ${gl_bai}広告コラム" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu Serverオープニングスクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14216,12 +14216,12 @@ read -e -p "選択を入力してください:" choice case $choice in 1) linux_info ;; - 2) clear ; send_stats "システムアップデート" ; linux_update ;; + 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 + 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 ;; @@ -14248,49 +14248,49 @@ done k_info() { send_stats "Kコマンド参照ユースケース" echo "-------------------" -echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" +echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、Kコマンドリファレンスユースケースです。" echo "スクリプトkを開始します" -echo "ソフトウェアパッケージkをインストールしますnano wgetをインストールします| k nano wgetを追加| K nano wgetをインストールします" +echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" echo "システムKアップデートを更新| Kアップデート" -echo "クリーンシステムガベージkクリーン| kきれい" +echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルk dd |を再インストールしますk再インストール" echo "BBR3コントロールパネルK BBR3 | K BBRV3" echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" echo "仮想メモリ k スワップを設定 2048" -echo "仮想タイムゾーンKタイムアジア/上海|を設定しますKタイムゾーンアジア/上海" -echo "システムリサイクルビンKトラッシュ| K HSZ | Kリサイクルビン" -echo "システムバックアップ関数Kバックアップ| k bf | Kバックアップ" +echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" +echo "システムごみ箱のゴミ箱 | k hz | k ごみ箱" +echo "システムバックアップ機能 kバックアップ | k bf | k バックアップ" echo "SSHリモート接続ツールK SSH | Kリモート接続" -echo "rsyncリモート同期ツールk rsync | Kリモート同期" -echo "ハードディスク管理ツールKディスク| Kハードディスク管理" -echo "イントラネット浸透(サーバー側)K FRP" -echo "イントラネット浸透(クライアント)K FRPC" -echo "ソフトウェアStart K Start SSHD | k sshdを開始します" +echo "rsync リモート同期ツール k rsync | k リモート同期" +echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" +echo "イントラネット普及率 (サーバー) k frps" +echo "イントラネット浸透率 (クライアント) k frpc" +echo "ソフトウェア起動 k start sshd | sshdを起動します" echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" echo "ソフトウェア再起動k再起動sshd | k再起動sshd" -echo "ソフトウェアステータスビューKステータスSSHD | KステータスSSHD" -echo "ソフトウェアブートk dockerを有効にする| K AutoStart Docke | Kスタートアップドッカー" -echo "ドメイン名証明書アプリケーション k ssl" -echo "ドメイン名証明書の有効期限クエリK SSL PS" -echo "Docker Management Plane K Docker" +echo "ソフトウェアのステータスを確認します。 k ステータス sshd | kステータスsshd" +echo "k ドッカーを有効にする | k 自動開始ドッカー | k ソフトウェアの起動時に Docker を有効にする" +echo "ドメイン名証明書アプリケーションK SSL" +echo "ドメイン名証明書の有効期限のクエリ k ssl ps" +echo "docker 管理プレーン k docker" echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" echo "Docker Container Management K Docker PS | K Dockerコンテナ" echo "Docker Image Management K Docker IMG | K Docker画像" echo "LDNMP サイト管理 k Web" -echo "LDNMPキャッシュクリーンアップK Webキャッシュ" +echo "LDNMP キャッシュのクリーニング k Web キャッシュ" echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" -echo "ロードバランスkロードバランス| kロードバランシングをインストールします" -echo "ファイアウォールパネルk fhq | kファイアウォール" -echo "オープンポートK DKDK 8080 | Kオープンポート8080" -echo "ポートK GBDK 7800を閉じる| kポート7800を閉じます" +echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" +echo "ファイアウォール パネル k fhq |k ファイアウォール" +echo "ポートを開きます 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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" -echo "コマンドお気に入りk fav | Kコマンドのお気に入り" +echo "コマンド お気に入り k お気に入り | k コマンドのお気に入り" echo "アプリ市場管理Kアプリ" -echo "アプリケーション番号クイックマネジメントKアプリ26 | Kアプリ1Panel | KアプリNPM" +echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" echo "システム情報を表示 k info" } @@ -14300,7 +14300,7 @@ if [ "$#" -eq 0 ]; then # パラメーターがない場合は、インタラクティブロジックを実行します kejilion_sh else - # パラメーターがある場合は、対応する関数を実行します + # パラメータがある場合は、対応する関数を実行します case $1 in install|add|安装) shift @@ -14309,7 +14309,7 @@ else ;; remove|del|uninstall|卸载) shift - send_stats "ソフトウェアをアンインストールします" + send_stats "ソフトウェアのアンインストール" remove "$@" ;; update|更新) @@ -14375,13 +14375,13 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "仮想メモリをすばやく設定します" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンをすばやく設定します" + send_stats "タイムゾーンを素早く設定" set_timedate "$@" ;; @@ -14450,14 +14450,14 @@ else enable|autostart|开机启动) shift - send_stats "ソフトウェアが起動します" + send_stats "起動時にソフトウェアが自動的に起動します" enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "証明書のステータスを確認してください" + send_stats "証明書ステータスの表示" ssl_ps elif [ -z "$1" ]; then add_ssl @@ -14478,7 +14478,7 @@ else install_docker ;; ps|容器) - send_stats "クイックコンテナ管理" + send_stats "迅速なコンテナ管理" docker_ps ;; img|镜像) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 9c65414f3..4bffecd80 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -34,7 +34,7 @@ quanju_canshu -# 명령을 실행할 함수를 정의합니다 +# 명령을 실행하는 함수 정의 run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요! +# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. # 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. @@ -114,11 +114,11 @@ CheckFirstRun_false() { # 사용자에게 이용 약관에 동의하라는 메시지 UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Tech Lion Script Toolbox에 오신 것을 환영합니다${gl_bai}" + echo -e "${gl_kjlan}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${gl_bai}" echo "스크립트를 처음 사용하면 사용자 라이센스 계약을 읽고 동의하십시오." - echo "사용자 라이센스 계약 : https://blog.kejilion.pro/user-license-agreement/" + echo "사용자 라이센스 계약: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" - read -r -p "위의 용어에 동의하십니까? (Y/N) :" user_input + read -r -p "위의 약관에 동의하십니까? (예/아니요):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then @@ -170,13 +170,13 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "패키지 매개 변수는 제공되지 않습니다!" + echo "패키지 매개변수가 제공되지 않았습니다!" return 1 fi for package in "$@"; do if ! command -v "$package" &>/dev/null; then - echo -e "${gl_huang}설치$package...${gl_bai}" + echo -e "${gl_huang}설치 중$package...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update dnf install -y epel-release @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "알 수없는 패키지 관리자!" + echo "알 수 없는 패키지 관리자입니다!" return 1 fi fi @@ -220,11 +220,11 @@ check_disk_space() { local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') if [ "$available_space_mb" -lt "$required_space_mb" ]; then - echo -e "${gl_huang}힌트:${gl_bai}불충분 한 디스크 공간!" + echo -e "${gl_huang}힌트:${gl_bai}디스크 공간이 부족합니다!" echo "현재 사용 가능한 공간: $((available_space_mb/1024))G" echo "최소 수요 공간 :${required_gb}G" - echo "설치를 계속할 수 없습니다. 디스크 공간을 청소하고 다시 시도하십시오." - send_stats "디스크 공간이 부족합니다." + echo "설치를 계속할 수 없습니다. 디스크 공간을 비운 후 다시 시도하십시오." + send_stats "불충분 한 디스크 공간" break_end kejilion fi @@ -238,12 +238,12 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "패키지 매개변수가 제공되지 않았습니다!" + echo "패키지 매개 변수는 제공되지 않습니다!" return 1 fi for package in "$@"; do - echo -e "${gl_huang}제거$package...${gl_bai}" + 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 @@ -268,7 +268,7 @@ remove() { } -# 다양한 분포에 적합한 범용 SystemCTL 기능 +# 다양한 배포판에 적합한 범용 systemctl 기능 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -297,7 +297,7 @@ start() { if [ $? -eq 0 ]; then echo "$1서비스가 시작되었습니다." else - echo "오류 : 시작$1서비스가 실패했습니다." + echo "오류: 시작$1서비스가 실패했습니다." fi } @@ -305,7 +305,7 @@ start() { stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1서비스가 중단되었습니다." + echo "$1서비스가 중지되었습니다." else echo "오류 : 중지$1서비스가 실패했습니다." fi @@ -427,7 +427,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}도커 환경 설치 중...${gl_bai}" + echo -e "${gl_huang}Docker 환경 설치 ...${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 @@ -506,37 +506,37 @@ while true; do echo "도커 컨테이너 목록" docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" - echo "컨테이너 작동" + echo "컨테이너 운영" echo "------------------------" echo "1. 새 컨테이너를 만듭니다" echo "------------------------" - echo "2. 지정된 컨테이너를 시작하십시오. 6. 모든 컨테이너를 시작하십시오" - echo "3. 지정된 컨테이너를 중지하십시오. 7. 모든 컨테이너를 중지하십시오" + echo "2. 지정된 컨테이너 시작 6. 모든 컨테이너 시작" + echo "3. 지정된 컨테이너를 중지합니다. 7. 모든 컨테이너를 중지합니다." echo "4. 지정된 컨테이너 삭제 8. 모든 컨테이너 삭제" echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" echo "------------------------" - echo "11. 지정된 컨테이너를 입력합니다. 12. 컨테이너 로그를 봅니다." - echo "13. 컨테이너 네트워크보기 14. 컨테이너 점유보기" + echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" + echo "13. 컨테이너 네트워크 확인 14. 컨테이너 점유율 확인" echo "------------------------" echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) - send_stats "새 컨테이너를 만듭니다" + send_stats "새 컨테이너 만들기" read -e -p "창조 명령을 입력하십시오 :" dockername $dockername ;; 2) send_stats "지정된 컨테이너를 시작하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + read -e -p "컨테이너 이름을 입력하세요(여러 컨테이너 이름을 공백으로 구분하세요)." dockername docker start $dockername ;; 3) - send_stats "지정된 컨테이너를 중지하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "지정된 컨테이너 중지" + read -e -p "컨테이너 이름을 입력하세요(여러 컨테이너 이름을 공백으로 구분하세요)." dockername docker stop $dockername ;; 4) @@ -546,7 +546,7 @@ while true; do ;; 5) send_stats "지정된 컨테이너를 다시 시작하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + read -e -p "컨테이너 이름을 입력하세요(여러 컨테이너 이름을 공백으로 구분하세요)." dockername docker restart $dockername ;; 6) @@ -554,11 +554,11 @@ while true; do docker start $(docker ps -a -q) ;; 7) - send_stats "모든 컨테이너를 중지하십시오" + send_stats "모든 컨테이너 중지" docker stop $(docker ps -q) ;; 8) - send_stats "모든 컨테이너를 삭제하십시오" + send_stats "모든 컨테이너 삭제" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -567,7 +567,7 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -577,13 +577,13 @@ while true; do ;; 11) send_stats "컨테이너를 입력하십시오" - read -e -p "컨테이너 이름을 입력하십시오 :" dockername + read -e -p "컨테이너 이름을 입력하세요:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) send_stats "컨테이너 로그를 봅니다" - read -e -p "컨테이너 이름을 입력하십시오 :" dockername + read -e -p "컨테이너 이름을 입력하세요:" dockername docker logs $dockername break_end ;; @@ -622,7 +622,7 @@ while true; do ;; 16) - send_stats "컨테이너 포트 액세스 차단" + send_stats "컨테이너 포트 접근 차단" read -e -p "컨테이너 이름을 입력하십시오 :" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" @@ -656,7 +656,7 @@ while true; do read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - send_stats "거울을 당기십시오" + send_stats "이미지 가져오기" read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do echo -e "${gl_huang}이미지 얻기 :$name${gl_bai}" @@ -664,7 +664,7 @@ while true; do done ;; 2) - send_stats "이미지를 업데이트하십시오" + send_stats "이미지 업데이트" read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames for name in $imagenames; do echo -e "${gl_huang}업데이트 된 이미지 :$name${gl_bai}" @@ -673,13 +673,13 @@ while true; do ;; 3) send_stats "거울을 삭제하십시오" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + read -e -p "이미지 이름을 입력하세요(여러 이미지 이름은 공백으로 구분하세요):" imagenames for name in $imagenames; do docker rmi -f $name done ;; 4) - send_stats "모든 이미지를 삭제합니다" + send_stats "모든 이미지 삭제" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -761,11 +761,11 @@ install_crontab() { ;; esac else - echo "운영 체제를 결정할 수 없습니다." + echo "운영 체제를 확인할 수 없습니다." return fi - echo -e "${gl_lv}Crontab이 설치되고 Cron 서비스가 실행 중입니다.${gl_bai}" + echo -e "${gl_lv}crontab이 설치되어 있고 cron 서비스가 실행 중입니다.${gl_bai}" } @@ -788,7 +788,7 @@ docker_ipv6_on() { # 현재 구성에 이미 IPv6 설정이 있는지 확인하십시오 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') - # 구성 업데이트 및 IPv6을 활성화하십시오 + # 구성 업데이트 및 IPv6 활성화 if [[ "$CURRENT_IPV6" == "false" ]]; then UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {ipv6: true, "fixed-cidr-v6": "2001:db8:1::/64"}') else @@ -797,7 +797,7 @@ docker_ipv6_on() { # 원래 구성과 새로운 구성을 비교합니다 if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then - echo -e "${gl_huang}IPv6 액세스가 현재 활성화되어 있습니다${gl_bai}" + echo -e "${gl_huang}현재 IPv6 액세스가 활성화되어 있습니다.${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -814,7 +814,7 @@ docker_ipv6_off() { # 구성 파일이 있는지 확인하십시오 if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}구성 파일이 존재하지 않습니다${gl_bai}" + echo -e "${gl_hong}구성 파일이 존재하지 않습니다.${gl_bai}" return fi @@ -824,7 +824,7 @@ docker_ipv6_off() { # JQ를 사용하여 구성 파일 업데이트를 처리하십시오 local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false') - # 현재 IPv6 상태를 확인하십시오 + # 현재 ipv6 상태 확인 local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') # 원래 구성과 새로운 구성을 비교합니다 @@ -879,7 +879,7 @@ open_port() { 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 @@ -890,12 +890,12 @@ open_port() { 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" + echo "포트가 열렸습니다.$port" fi done save_iptables_rules - send_stats "포트가 열렸습니다" + send_stats "포트가 열렸습니다." } @@ -909,7 +909,7 @@ close_port() { 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 @@ -928,7 +928,7 @@ close_port() { iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 새로운 규칙을 먼저 삽입하십시오 + # 첫 번째 규칙에 새 규칙을 삽입합니다. iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT @@ -947,13 +947,13 @@ allow_ip() { 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" + echo "공개된 IP$ip" fi done @@ -971,18 +971,18 @@ block_ip() { 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" + echo "IP 차단$ip" fi done save_iptables_rules - send_stats "IP 차단" + send_stats "IP가 차단됨" } @@ -1002,10 +1002,10 @@ enable_ddos_defense() { iptables -A INPUT -p udp -m limit --limit 3000/s -j ACCEPT iptables -A INPUT -p udp -j DROP - send_stats "DDOS 방어를 켜십시오" + send_stats "DDoS 방어 켜기" } -# 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 @@ -1042,7 +1042,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류: 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "오류 : 다운로드$country_codeIP 영역 파일 실패" continue fi @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류: 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" continue fi @@ -1075,7 +1075,7 @@ manage_country_rules() { iptables -P INPUT DROP iptables -A INPUT -m set --match-set "$ipset_name" src -j ACCEPT - echo "성공적으로 허용됩니다$country_codeIP 주소" + echo "허용되었습니다.$country_codeIP 주소" rm "${country_code,,}.zone" ;; @@ -1086,7 +1086,7 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "성공적으로 해제했습니다$country_codeIP 주소 제한" + echo "성공적으로 제거되었습니다$country_codeIP 주소 제한" ;; *) @@ -1118,7 +1118,7 @@ iptables_panel() { echo "" echo "방화벽 관리" echo "------------------------" - echo "1. 지정 포트 열기 2. 지정 포트 닫기" + echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" @@ -1126,12 +1126,12 @@ iptables_panel() { echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" - echo "13. DDOS 방어 시작 14. DDOS 방어를 끄십시오" + echo "13. DDOS 방어 시작 14. DDOS 방어 끄기" echo "------------------------" - echo "15. 지정된 국가 IP 16. 지정된 국가 IP 만 허용됩니다." - echo "17. 지정된 국가에서 IP 제한을 해제합니다" + echo "15. 특정 국가 IP 차단 16. 특정 국가 IP만 허용" + echo "17. 지정된 국가에서 IP 제한을 해제합니다." echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in @@ -1141,7 +1141,7 @@ iptables_panel() { send_stats "지정된 포트를 엽니 다" ;; 2) - read -e -p "닫힌 포트 번호를 입력하세요:" c_port + read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port close_port $c_port send_stats "지정된 포트를 닫습니다" ;; @@ -1162,7 +1162,7 @@ iptables_panel() { send_stats "모든 포트 열기" ;; 4) - # 모든 포트를 닫습니다 + # 모든 포트를 닫으세요 current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') iptables -F iptables -X @@ -1180,17 +1180,17 @@ iptables_panel() { 5) # IP 화이트리스트 - read -e -p "릴리스하려면 IP 또는 IP 세그먼트를 입력하십시오." o_ip + read -e -p "해제 할 IP 또는 IP 세그먼트를 입력하십시오." o_ip allow_ip $o_ip ;; 6) # IP 블랙리스트 - read -e -p "차단 된 IP 또는 IP 세그먼트를 입력하십시오." c_ip + read -e -p "차단된 IP 또는 IP 범위를 입력하세요." c_ip block_ip $c_ip ;; 7) # 지정된 IP를 지우십시오 - read -e -p "청산 된 IP를 입력하십시오 :" d_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 @@ -1204,7 +1204,7 @@ iptables_panel() { 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 @@ -1223,7 +1223,7 @@ iptables_panel() { send_stats "허용 국가$country_codeIP" ;; 16) - read -e -p "허용 된 국가 코드를 입력하십시오 (여러 국가 코드는 CN US JP와 같은 공간으로 분리 될 수 있습니다) :" country_code + read -e -p "허용되는 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분할 수 있음)." country_code manage_country_rules allow $country_code send_stats "나라를 차단하십시오$country_codeIP" ;; @@ -1253,20 +1253,20 @@ add_swap() { # 현재 시스템에서 모든 스왑 파티션을 얻으십시오 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이 더 이상 사용되지 않도록하십시오 + # /swapfile이 더 이상 사용되지 않는지 확인하세요. swapoff /swapfile # 이전 /스왑 파일을 삭제하십시오 rm -f /swapfile - # 새 스왑 파티션을 만듭니다 + # 새로운 스왑 파티션 생성 fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1281,7 +1281,7 @@ add_swap() { rc-update add local fi - echo -e "가상 메모리 크기가 크기가 커졌습니다${gl_huang}${new_swap}${gl_bai}M" + echo -e "가상 메모리 크기가 다음과 같이 조정되었습니다.${gl_huang}${new_swap}${gl_bai}M" } @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야하는지 확인하십시오 +# 가상 메모리를 만들어야 하는지 확인 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1321,7 +1321,7 @@ ldnmp_v() { 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 버전 받기 + # 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}" @@ -1334,7 +1334,7 @@ ldnmp_v() { 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 @@ -1409,7 +1409,7 @@ install_certbot() { 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 "갱신 작업이 업데이트되었습니다" + echo "갱신 작업이 업데이트되었습니다." } @@ -1446,14 +1446,14 @@ install_ssltls() { install_ssltls_text() { - echo -e "${gl_huang}$yuming공개 키 정보${gl_bai}" + 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 "공개 키 :/etc/letsencrypt/live/$yuming/fullchain.pem" + echo "공개 키: /etc/letsencrypt/live/$yuming/fullchain.pem" echo "개인 키 :/etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1519,19 +1519,19 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "도메인 이름 인증서에 대한 성공적인 응용 프로그램" + send_stats "도메인 이름 인증서 신청이 성공했습니다." else send_stats "도메인 이름 인증서 신청에 실패했습니다" echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." - echo -e "1. 도메인 이름 철자 오류 ➠ 도메인 이름이 올바르게 입력되었는지 확인하십시오." - echo -e "2. DNS 해상도 문제 ➠ 도메인 이름 이이 서버 IP로 올바르게 해결되었는지 확인합니다." + echo -e "1. 도메인 이름이 잘못 입력되었습니다. ➠ 도메인 이름이 올바르게 입력되었는지 확인하세요." + echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인" echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." - echo -e "4. 방화벽 제한 ➠ 검증에 액세스 할 수 있도록 포트 80/443이 열려 있는지 확인" + echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 응용 프로그램 수는 한계를 초과합니다. ➠ 암호화하자는 주간 제한 (5 배/도메인 이름/주)을 갖습니다." - echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." + echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." break_end clear - echo "다시 배포를 시도하십시오$webname" + echo "다시 배포해 보세요.$webname" add_yuming install_ssltls certs_status @@ -1551,7 +1551,7 @@ fi add_yuming() { ip_address - echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "먼저 도메인 이름을 로컬 IP로 확인합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "귀하의 IP 또는 확인된 도메인 이름을 입력하십시오:" yuming } @@ -1636,11 +1636,11 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "로그인 정보 :" - echo "사용자 이름 :$dbuse" + echo "로그인 정보:" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo - send_stats "시작$ldnmp_pods" + send_stats "시작하다$ldnmp_pods" } @@ -1650,19 +1650,19 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 구성 파일이 있는지 확인하십시오 + # 구성 파일이 있는지 확인하십시오. if [ -f "$CONFIG_FILE" ]; then # 구성 파일에서 API_TOKE 및 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 + 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/ @@ -1670,9 +1670,9 @@ cf_purge_cache() { fi fi - # 각 Zone_ID를 루프하고 CLEAR CACHE 명령을 실행하십시오. + # 각 zone_id를 반복하고 캐시 지우기 명령을 실행합니다. for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "Zone_ID의 캐시 지우기 :$ZONE_ID" + 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" \ @@ -1680,13 +1680,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "캐시 클리어 요청이 전송되었습니다." + echo "캐시 삭제 요청이 전송되었습니다." } web_cache() { - send_stats "사이트 캐시를 정리하십시오" + send_stats "사이트 캐시 지우기" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1699,7 +1699,7 @@ web_del() { send_stats "사이트 데이터 삭제" yuming_list="${1:-}" if [ -z "$yuming_list" ]; then - read -e -p "사이트 데이터를 삭제하려면 도메인 이름을 입력하십시오 (여러 도메인 이름이 공간별로 분리됩니다)." yuming_list + read -e -p "사이트 데이터를 삭제하려면 도메인 이름을 입력하세요(여러 도메인 이름은 공백으로 구분)." yuming_list if [[ -z "$yuming_list" ]]; then return fi @@ -1712,11 +1712,11 @@ web_del() { 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 @@ -1733,7 +1733,7 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # 모드 매개 변수에 따라 WAF를 켜거나 끄기로 결정 + # 모드 매개변수에 따라 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 @@ -1745,11 +1745,11 @@ nginx_waf() { 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'또는 'OFF'사용" + echo "잘못된 인수: 'on' 또는 'off'를 사용하세요." return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # nginx 이미지를 확인하고 그에 따라 처리하세요. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1823,12 +1823,12 @@ patch_wp_debug() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 오래된 정의를 삭제하십시오 + # 이전 정의 삭제 sed -i "/define(['\"]WP_DEBUG['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. + # "HappyPublishing"이 포함된 줄 앞에 새 정의를 삽입합니다. awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1885,7 +1885,7 @@ nginx_br() { return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # nginx 이미지를 확인하고 그에 따라 처리하세요. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1922,7 +1922,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # Zstd를 닫습니다 : 주석을 추가하십시오 + # Zstd 닫기: 설명 추가 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1989,25 +1989,25 @@ web_security() { check_waf_status check_cf_mode clear - echo -e "서버 웹 사이트 방어 프로그램${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "서버 웹사이트 방어 프로그램${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" echo "1. 방어 프로그램을 설치하십시오" echo "------------------------" - echo "5. SSH 차단 레코드보기 6. 웹 사이트 차단 레코드보기" + echo "5. SSH 차단 기록 보기 6. 웹사이트 차단 기록 보기" echo "7. 방어 규칙 목록보기 8. 로그의 실시간 모니터링보기" echo "------------------------" - echo "11. 인터셉트 매개 변수 구성 12. 차단 된 모든 IP를 지우십시오" + echo "11. 차단 매개변수 구성 12. 차단된 IP 모두 삭제" echo "------------------------" echo "21. CloudFlare 모드 22. 5 초 방패의 높은 하중" echo "------------------------" - echo "31. WAF 32를 켜십시오. WAF를 끄십시오" + echo "31. WAF 켜기 32. WAF 끄기" echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" echo "------------------------" echo "9. 방어 프로그램 제거" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2072,7 +2072,7 @@ web_security() { remove fail2ban rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; @@ -2088,11 +2088,11 @@ web_security() { ;; 21) - send_stats "CloudFlare 모드" + send_stats "클라우드플레어 모드" echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." echo "https://dash.cloudflare.com/login" read -e -p "CF 계정 번호를 입력하십시오." cfuser - read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken + read -e -p "CF의 글로벌 API 키를 입력하세요:" 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 @@ -2112,15 +2112,15 @@ web_security() { 22) send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 부하가 감지되면 방패가 자동으로 켜지고 5 초 동안 낮은 부하가 자동으로 꺼집니다.${gl_bai}" + echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" echo "--------------" echo "CF 매개 변수 가져 오기 :" echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" echo -e "CF 배경 도메인 이름 요약 페이지의 오른쪽 하단으로 이동하려면${gl_huang}지역 ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" - read -e -p "CF 계정 번호를 입력하십시오." cfuser - read -e -p "CF의 글로벌 API 키를 입력하십시오." cftoken + read -e -p "CF의 계좌번호를 입력하세요:" cfuser + read -e -p "CF의 글로벌 API 키를 입력하세요:" cftoken read -e -p "CF에 도메인 이름의 영역 ID를 입력하십시오." cfzonID cd ~ @@ -2138,9 +2138,9 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "고 부하 자동 방패 오프닝 스크립트가 추가되었습니다" + echo "고부하 자동 쉴드 오픈 스크립트가 추가되었습니다." else - echo "자동 방패 스크립트가 이미 존재합니다. 추가 할 필요가 없습니다." + echo "자동 방패 열기 스크립트가 이미 있으므로 추가할 필요가 없습니다." fi ;; @@ -2154,7 +2154,7 @@ web_security() { 32) nginx_waf off echo "사이트 waf가 닫혔습니다" - send_stats "사이트 waf가 닫혔습니다" + send_stats "사이트 WAF가 다운되었습니다" ;; 33) @@ -2198,21 +2198,21 @@ check_nginx_compression() { CONFIG_FILE="/home/web/nginx.conf" - # ZSTD가 활성화되어 있고 주석이 없는지 확인하십시오 (전체 라인은 ZSTD 켜기로 시작합니다.) + # zstd가 켜져 있고 주석 처리가 해제되어 있는지 확인하세요. (전체 줄은 zstd on으로 시작됩니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then zstd_status=" zstd压缩已开启" else zstd_status="" fi - # Brotli가 활성화되어 있고 댓글이 없는지 확인하십시오 + # brotli가 활성화되어 있고 주석 처리가 해제되어 있는지 확인하세요. if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else br_status="" fi - # gzip이 활성화되어 있고 주석 처리가 해제되어 있는지 확인하세요. + # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2229,17 +2229,17 @@ web_optimization() { check_nginx_compression clear send_stats "LDNMP 환경을 최적화하십시오" - echo -e "LDNMP 환경을 최적화하십시오${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" + echo -e "LDNMP 환경 최적화${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" echo "1. 표준 모드 2. 고성능 모드 (2H4G 이상 권장)" echo "------------------------" echo "3. GZIP 압축 켜기 4. GZIP 압축 끄기" - echo "5. BR 압축 켜기 6. BR 압축 끄기" + echo "5. br 압축을 켭니다. 6. br 압축을 끕니다." echo "7. ZSTD 압축 켜기 8. ZSTD 압축 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) send_stats "사이트 표준 모드" @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 환경은 고성능 모드로 설정되었습니다" + echo "LDNMP 환경이 고성능 모드로 설정되었습니다." ;; 3) @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "액세스 주소 :" +echo "방문 주소:" ip_address @@ -2424,7 +2424,7 @@ check_docker_image_update() { 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) @@ -2439,16 +2439,16 @@ check_docker_image_update() { # 공식 이미지에 대한 지원을 추가하십시오 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub API에서 이미지 게시 시간을 얻으십시오 + # 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 @@ -2477,7 +2477,7 @@ block_container_port() { install iptables - # 다른 모든 IP를 점검하고 차단하십시오 + # 다른 모든 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 @@ -2494,7 +2494,7 @@ block_container_port() { - # 다른 모든 IP를 점검하고 차단하십시오 + # 다른 모든 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 @@ -2504,7 +2504,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # 로컬 네트워크 127.0.0.0/8을 확인하고 해제하십시오 + # 로컬 네트워크 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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "IP+포트가 서비스 접근을 차단했습니다." save_iptables_rules } @@ -2540,7 +2540,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 지정된 IP를 공개하기위한 규칙을 지우십시오 + # 지정된 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 @@ -2559,7 +2559,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 지정된 IP를 공개하기위한 규칙을 지우십시오 + # 지정된 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 @@ -2575,7 +2575,7 @@ clear_container_rules() { fi - echo "IP+포트로 서비스 접속이 허용되었습니다" + echo "IP+포트는 서비스에 액세스 할 수있었습니다" save_iptables_rules } @@ -2589,7 +2589,7 @@ block_host_port() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." + echo "오류: 액세스를 허용하려면 포트 번호와 IP를 입력하세요." echo "사용법 : block_host_port <포트 번호> <승인 된 ip>" return 1 fi @@ -2597,17 +2597,17 @@ block_host_port() { install iptables - # 다른 모든 IP 액세스를 거부했습니다 + # 다른 모든 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 액세스를 허용합니다 + # 지정된 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 @@ -2621,12 +2621,12 @@ block_host_port() { iptables -I INPUT -p udp --dport "$port" -j DROP fi - # 지정된 IP 액세스를 허용합니다 + # 지정된 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 @@ -2648,7 +2648,7 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "오류 : 액세스 할 수있는 포트 번호와 IP를 제공하십시오." + echo "오류: 액세스를 허용하려면 포트 번호와 IP를 입력하세요." echo "사용법:clear_host_port_rules <포트 번호> <허용 IP>" return 1 fi @@ -2656,23 +2656,23 @@ clear_host_port_rules() { install iptables - # 다른 모든 IP 액세스를 차단하는 명확한 규칙 + # 다른 모든 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 액세스를 허용하는 명확한 규칙 + # 지정된 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 액세스를 차단하는 명확한 규칙 + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -2688,7 +2688,7 @@ clear_host_port_rules() { fi - echo "IP+포트는 서비스에 액세스 할 수있었습니다" + echo "IP+포트로 서비스 접속이 허용되었습니다" save_iptables_rules } @@ -2750,11 +2750,11 @@ while true; do echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "7. IP+포트 접근 허용 8. IP+포트 접근 차단" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) setup_docker_dir @@ -2771,7 +2771,7 @@ while true; do add_app_id clear - echo "$docker_name설치" + echo "$docker_name설치 완료" check_docker_app_ip echo "" $docker_use @@ -2786,7 +2786,7 @@ while true; do add_app_id clear - echo "$docker_name설치" + echo "$docker_name설치 완료" check_docker_app_ip echo "" $docker_use @@ -2801,11 +2801,11 @@ while true; do sed -i "/\b${app_id}\b/d" /home/docker/appno.txt echo "앱이 제거되었습니다" - send_stats "제거하십시오$docker_name" + send_stats "제거$docker_name" ;; 5) - echo "${docker_name}도메인 액세스 설정" + echo "${docker_name}도메인 이름 액세스 설정" send_stats "${docker_name}도메인 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} @@ -2813,7 +2813,7 @@ while true; do ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "https://가 없는 도메인 이름 형식 example.com" web_del ;; @@ -2823,7 +2823,7 @@ while true; do ;; 8) - send_stats "IP 액세스를 차단하십시오${docker_name}" + send_stats "IP 접근 차단${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; @@ -2902,7 +2902,7 @@ docker_app_plus() { block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "https://가 없는 도메인 이름 형식 example.com" web_del ;; 7) @@ -2995,17 +2995,17 @@ 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 세션 만들기 tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3063,7 +3063,7 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "다시 시작" + echo "다시 시작됨" reboot ;; *) @@ -3111,7 +3111,7 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear send_stats "LDNMP 환경을 다시 설치할 수 없습니다" - echo -e "${gl_huang}힌트:${gl_bai}웹 사이트 구성 환경이 설치되었습니다. 다시 설치할 필요가 없습니다!" + echo -e "${gl_huang}힌트:${gl_bai}홈페이지 구축 환경이 설치되었습니다. 다시 설치할 필요가 없습니다!" break_end linux_ldnmp fi @@ -3124,7 +3124,7 @@ cd ~ send_stats "LDNMP 환경을 설치하십시오" root_use clear -echo -e "${gl_huang}LDNMP 환경이 설치되지 않았으며 LDNMP 환경 설치를 시작하십시오 ...${gl_bai}" +echo -e "${gl_huang}LDNMP 환경이 설치되지 않았습니다. LDNMP 환경 설치를 시작합니다...${gl_bai}" check_disk_space 3 /home check_port install_dependency @@ -3152,8 +3152,8 @@ 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 "nginx가 설치되었습니다" +echo -e "현재 버전:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3164,7 +3164,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "먼저 LDNMP 환경을 설치하십시오" + send_stats "먼저 LDNMP 환경을 설치해 주세요" ldnmp_install_all fi @@ -3185,7 +3185,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신 것$webname세워짐!" + echo "당신의$webname세워짐!" echo "https://$yuming" echo "------------------------" echo "$webname설치 정보는 다음과 같습니다." @@ -3194,7 +3194,7 @@ ldnmp_web_on() { nginx_web_on() { clear - echo "당신 것$webname세워짐!" + echo "당신의$webname지어졌습니다!" echo "https://$yuming" } @@ -3374,19 +3374,19 @@ ldnmp_web_status() { echo "------------------------" echo "1. 도메인 이름 인증서 신청/업데이트 2. 사이트 도메인 이름 변경" echo "3. 사이트 캐시 정리 4. 관련 사이트 만들기" - echo "5. 액세스 로그보기 6. 오류 로그보기" - echo "7. 글로벌 구성 편집 8. 사이트 구성 편집" - echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서보기" + echo "5. 접속 로그 보기 6. 오류 로그 보기" + echo "7. 전역 구성 편집 8. 사이트 구성 편집" + echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서 보기" echo "------------------------" - echo "20. 지정된 사이트 데이터를 삭제합니다" + echo "20. 특정 사이트 데이터 삭제" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) send_stats "도메인 이름 인증서를 신청하십시오" - read -e -p "도메인 이름을 입력하세요:" yuming + 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 @@ -3395,8 +3395,8 @@ ldnmp_web_status() { ;; 2) - send_stats "사이트 도메인 이름을 변경하십시오" - echo -e "${gl_hong}적극 권장 :${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" + send_stats "사이트 도메인 이름 변경" + echo -e "${gl_hong}적극 권장:${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" read -e -p "이전 도메인 이름을 입력하십시오 :" oddyuming read -e -p "새 도메인 이름을 입력하십시오 :" yuming install_certbot @@ -3421,7 +3421,7 @@ ldnmp_web_status() { 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" {} + @@ -3442,10 +3442,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "연결된 사이트 만들기" + send_stats "관련 사이트를 만듭니다" echo -e "액세스하려면 새 도메인 이름을 기존 사이트에 연결하세요." read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming - read -e -p "새 도메인 이름을 입력하십시오 :" yuming + read -e -p "새 도메인 이름을 입력하세요:" yuming install_certbot install_ssltls certs_status @@ -3464,7 +3464,7 @@ ldnmp_web_status() { break_end ;; 6) - send_stats "오류 로그 보기" + send_stats "오류 로그를 봅니다" tail -n 200 /home/web/log/nginx/error.log break_end ;; @@ -3487,7 +3487,7 @@ ldnmp_web_status() { break_end ;; 10) - send_stats "사이트 데이터를 봅니다" + send_stats "사이트 데이터 보기" install goaccess goaccess --log-format=COMBINED /home/web/log/nginx/access.log ;; @@ -3523,7 +3523,7 @@ while true; do clear check_panel_app echo -e "$panelname $check_panel" - echo "${panelname}요즘 인기 있고 강력한 운영 및 유지 관리 패널입니다." + echo "${panelname}대중적이고 강력한 운영 및 유지 관리 관리 패널입니다." echo "공식 웹 사이트 소개 :$panelurl " echo "" @@ -3598,8 +3598,8 @@ donlond_frp() { generate_frps_config() { - send_stats "FRP 서버를 설치하십시오" - # 임의의 포트 및 자격 증명을 생성합니다 + send_stats "FRP 서버 설치" + # 임의의 포트 및 자격 증명 생성 local bind_port=8055 local dashboard_port=8056 local token=$(openssl rand -hex 16) @@ -3620,15 +3620,15 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 출력 생성 정보 ip_address echo "------------------------" - echo "클라이언트 배포에 필요한 매개 변수" - echo "서비스 IP :$ipv4_address" + echo "클라이언트 배포에 필요한 매개변수" + echo "서비스 IP:$ipv4_address" echo "token: $token" echo echo "FRP 패널 정보" - echo "FRP 패널 주소 : http : //$ipv4_address:$dashboard_port" + echo "FRP 패널 주소: http://$ipv4_address:$dashboard_port" echo "FRP 패널 사용자 이름 :$dashboard_user" echo "FRP 패널 비밀번호 :$dashboard_pwd" echo @@ -3641,8 +3641,8 @@ EOF configure_frpc() { send_stats "FRP 클라이언트를 설치하십시오" - read -e -p "외부 네트워크 도킹 IP를 입력하십시오." server_addr - read -e -p "외부 네트워크 도킹 토큰을 입력하십시오." token + read -e -p "외부 네트워크 도킹 IP를 입력하세요." server_addr + read -e -p "외부 네트워크 도킹 토큰을 입력하세요." token echo mkdir -p /home/frp @@ -3664,15 +3664,15 @@ EOF add_forwarding_service() { send_stats "FRP 인트라넷 서비스 추가" # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 - read -e -p "서비스 이름을 입력하십시오 :" service_name - read -e -p "전달 유형 (TCP/UDP)을 입력하십시오 [기본 TCP 입력] :" service_type + read -e -p "서비스 이름을 입력하세요:" service_name + read -e -p "전달 유형(tcp/udp)을 입력하십시오. [기본값을 tcp로 입력]:" service_type local service_type=${service_type:-tcp} - read -e -p "인트라넷 IP를 입력하십시오. [Enter를 누르면 기본값은 127.0.0.1입니다]:" local_ip + read -e -p "인트라넷 IP를 입력하십시오 [기본값 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 + read -e -p "인트라넷 포트를 입력하십시오:" local_port + read -e -p "외부 네트워크 포트를 입력하세요:" remote_port - # 구성 파일에 사용자 입력을 쓰십시오 + # 구성 파일에 사용자 입력 쓰기 cat <> /home/frp/frpc.toml [$service_name] type = ${service_type} @@ -3683,7 +3683,7 @@ remote_port = ${remote_port} EOF # 출력 생성 정보 - echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다" + echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -3696,10 +3696,10 @@ EOF delete_forwarding_service() { send_stats "FRP 인트라넷 서비스를 삭제하십시오" # 삭제해야 하는 서비스 이름을 입력하라는 메시지를 사용자에게 표시합니다. - read -e -p "삭제 해야하는 서비스 이름을 입력하십시오." service_name + read -e -p "삭제할 서비스 이름을 입력하세요:" service_name # sed를 사용하여 서비스 및 관련 구성 삭제 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "제공하다$service_namefrpc.toml에서 성공적으로 삭제되었습니다" + echo "제공하다$service_namefrpc.toml에서 성공적으로 제거되었습니다." docker restart frpc @@ -3730,7 +3730,7 @@ list_forwarding_services() { } /^\[.*\]/ { - # 서비스 정보가있는 경우 새 서비스를 처리하기 전에 현재 서비스를 인쇄하십시오. + # 서비스 정보가 이미 존재하는 경우 새 서비스를 처리하기 전에 현재 서비스를 인쇄하십시오. if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3743,7 +3743,7 @@ list_forwarding_services() { if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 이전 값을 지우십시오 + # 이전 값 지우기 local_ip="" local_port="" remote_port="" @@ -3785,17 +3785,17 @@ list_forwarding_services() { -# FRP 서버 포트를 가져옵니다 +# 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 이외의 포트가 있는지 확인하십시오 + # 8055/8056 이외의 포트가 있는지 확인하세요. local has_valid_ports=false for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3860,9 +3860,9 @@ frps_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRP 서버$check_frp $update_status" - echo "FRP 인트라넷 침투 서비스 환경을 구축하여 인터넷에 공개 IP없이 장치를 노출시킵니다." + echo "FRP 인트라넷 침투 서비스 환경을 구축하고 공인 IP가 없는 장치를 인터넷에 노출시킵니다." echo "공식 홈페이지 소개: https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + echo "비디오 튜토리얼: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" if [ -d "/home/frp/" ]; then check_docker_app_ip frps_main_ports @@ -3871,13 +3871,13 @@ frps_panel() { echo "------------------------" echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "5. 인트라넷 서비스에 대한 도메인 이름 액세스 6. 도메인 이름 액세스 삭제" + echo "5. 인트라넷 서비스 도메인 이름 접근 6. 도메인 이름 접근 삭제" echo "------------------------" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "7. IP+포트 접근 허용 8. IP+포트 접근 차단" echo "------------------------" - echo "00. 서비스 상태 새로 고침 0. 이전 메뉴로 돌아갑니다." + echo "00. 서비스 상태 새로고침 0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) install jq grep ss @@ -3910,9 +3910,9 @@ frps_panel() { ;; 5) echo "리버스 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" - send_stats "외부 도메인 이름에 대한 FRP 액세스" + send_stats "FRP 외부 도메인 이름 액세스" add_yuming - read -e -p "인트라넷 침투 서비스 포트를 입력하십시오 :" frps_port + read -e -p "인트라넷 침투 서비스 포트를 입력하십시오:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; @@ -3935,7 +3935,7 @@ frps_panel() { ;; 00) - send_stats "FRP 서비스 상태를 새로 고치십시오" + send_stats "FRP 서비스 상태 새로 고침" echo "FRP 서비스 상태가 새로 고쳐졌습니다" ;; @@ -3958,9 +3958,9 @@ frpc_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRP 클라이언트$check_frp $update_status" - echo "서버로 도킹, 도킹 후 인터넷 액세스에 인트라넷 침투 서비스를 만들 수 있습니다." + echo "서버에 연결하세요. 연결 후에는 인트라넷 침투 서비스를 만들어 인터넷에 액세스할 수 있습니다." echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo "비디오 튜토리얼: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3974,7 +3974,7 @@ frpc_panel() { echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) install jq grep ss @@ -3992,7 +3992,7 @@ frpc_panel() { donlond_frp frpc add_app_id - echo "FRP 클라이언트가 업데이트되었습니다" + echo "FRP 클라이언트가 업데이트되었습니다." ;; 3) @@ -4003,7 +4003,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." ;; 4) @@ -4049,22 +4049,22 @@ yt_menu_pro() { fi clear - send_stats "YT-DLP 다운로드 도구" + send_stats "yt-dlp 다운로드 도구" echo -e "yt-dlp $YTDLP_STATUS" - echo -e "YT-DLP는 YouTube, Bilibili, Twitter 등을 포함한 수천 개의 사이트를 지원하는 강력한 비디오 다운로드 도구입니다." + echo -e "yt-dlp는 YouTube, Bilibili, Twitter 등과 같은 수천 개의 사이트를 지원하는 강력한 비디오 다운로드 도구입니다." echo -e "공식 웹 사이트 주소 : https://github.com/yt-dlp/yt-dlp" echo "-------------------------" - echo "다운로드 된 비디오 목록 :" + echo "다운로드한 동영상 목록:" ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(아직 없음)" echo "-------------------------" echo "1. 설치 2. 업데이트 3. 제거" echo "-------------------------" - echo "5. 단일 비디오 다운로드 6. 배치 비디오 다운로드 7. 사용자 정의 매개 변수 다운로드" - echo "8. MP3 오디오 9. 비디오 디렉토리 삭제 10. 쿠키 관리 (개발 중)" + echo "5. 단일 비디오 다운로드 6. 일괄 비디오 다운로드 7. 사용자 정의 매개변수 다운로드" + echo "8. MP3 오디오로 다운로드 9. 비디오 디렉터리 삭제 10. 쿠키 관리(개발 중)" echo "-------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "-------------------------" - read -e -p "옵션 번호를 입력하십시오 :" choice + read -e -p "옵션 번호를 입력하세요:" choice case $choice in 1) @@ -4086,8 +4086,8 @@ yt_menu_pro() { echo "업데이트가 완료되었습니다. 계속하려면 아무 키나 누르세요..." read ;; 3) - send_stats "yt-dlp 제거 ..." - echo "yt-dlp 제거 ..." + send_stats "yt-dlp 제거 중..." + echo "yt-dlp 제거 중..." rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt @@ -4095,7 +4095,7 @@ yt_menu_pro() { read ;; 5) send_stats "단일 비디오 다운로드" - read -e -p "비디오 링크를 입력하십시오 :" url + 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 \ @@ -4121,7 +4121,7 @@ yt_menu_pro() { read -e -p "일괄 다운로드가 완료되었습니다. 계속하려면 아무 키나 누르세요..." ;; 7) send_stats "맞춤형 비디오 다운로드" - read -e -p "전체 YT-DLP 매개 변수를 입력하십시오 (YT-DLP 제외) :" custom + read -e -p "전체 yt-dlp 매개변수를 입력하세요(yt-dlp 제외)." custom yt-dlp -P "$VIDEO_DIR" $custom \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4131,18 +4131,18 @@ yt_menu_pro() { read -e -p "실행이 완료되면 키를 눌러 계속하십시오 ..." ;; 8) send_stats "MP3 다운로드" - read -e -p "비디오 링크를 입력하십시오 :" url + 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 "오디오 다운로드가 완료되었습니다. 키를 누르면 계속하십시오 ..." ;; + read -e -p "오디오 다운로드가 완료되었습니다. 계속하려면 아무 키나 누르세요..." ;; 9) send_stats "비디오 삭제" - read -e -p "삭제 비디오의 이름을 입력하십시오." rmdir + read -e -p "삭제된 동영상의 이름을 입력하세요:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4187,7 +4187,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}시스템 업데이트 진행 중...${gl_bai}" + echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4243,13 +4243,13 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v apk &>/dev/null; then - echo "패키지 관리자 캐시 청소 ..." + echo "패키지 관리자 캐시 정리..." apk cache clean echo "시스템 로그 삭제 ..." rm -rf /var/log/* echo "APK 캐시 삭제 ..." rm -rf /var/cache/apk/* - echo "임시 파일 삭제 ..." + echo "임시 파일 삭제..." rm -rf /tmp/* elif command -v pacman &>/dev/null; then @@ -4267,23 +4267,23 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "시스템 로그 삭제 ..." + echo "시스템 로그 삭제..." rm -rf /var/log/* - echo "임시 파일 삭제 ..." + echo "임시 파일 삭제..." rm -rf /tmp/* elif command -v pkg &>/dev/null; then echo "사용하지 않는 의존성 정리 ..." pkg autoremove -y - echo "패키지 관리자 캐시 정리..." + echo "패키지 관리자 캐시 청소 ..." pkg clean -y - echo "시스템 로그 삭제 ..." + echo "시스템 로그 삭제..." rm -rf /var/log/* - echo "임시 파일 삭제 ..." + echo "임시 파일 삭제..." rm -rf /tmp/* else - echo "알 수없는 패키지 관리자!" + echo "알 수 없는 패키지 관리자입니다!" return fi return @@ -4330,21 +4330,21 @@ root_use send_stats "DNS 최적화" while true; do clear - echo "DNS 주소를 최적화합니다" + echo "DNS 주소 최적화" echo "------------------------" echo "현재 DNS 주소" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1. 외국 DNS 최적화 :" + 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 "2. 국내 DNS 최적화:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" - echo "3. DNS 구성을 수동으로 편집합니다" + echo "3. DNS 구성을 수동으로 편집" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in @@ -4417,7 +4417,7 @@ correct_ssh_config() { new_ssh_port() { - # 백업 SSH 구성 파일 + # SSH 구성 파일 백업 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4430,7 +4430,7 @@ new_ssh_port() { open_port $new_port remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "SSH 포트는 다음으로 수정되었습니다.$new_port" + echo "SSH 포트가 다음과 같이 수정되었습니다.$new_port" sleep 1 @@ -4448,7 +4448,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "개인 키 정보가 생성되었습니다. 복사하고 저장하십시오.${gl_huang}${ipv4_address}_ssh.key${gl_bai}향후 SSH 로그인 파일" + echo -e "개인키 정보가 생성되었습니다. 꼭 복사해서 저장하세요. 다음과 같이 저장될 수 있습니다.${gl_huang}${ipv4_address}_ssh.key${gl_bai}향후 SSH 로그인을 위한 파일" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4467,10 +4467,10 @@ add_sshkey() { import_sshkey() { - read -e -p "SSH 공개 키 내용을 입력하십시오 (일반적으로 'SSH-RSA'또는 'SSH-ED25519'로 시작) :" public_key + read -e -p "SSH 공개 키(일반적으로 'ssh-rsa' 또는 'ssh-ed25519'로 시작)의 내용을 입력하세요." public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}오류 : 공개 키 컨텐츠가 입력되지 않았습니다.${gl_bai}" + echo -e "${gl_hong}오류: 공개 키 내용이 입력되지 않았습니다.${gl_bai}" return 1 fi @@ -4503,14 +4503,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}" +echo -e "${gl_lv}ROOT 로그인 설정이 완료되었습니다!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}힌트:${gl_bai}이 기능은 루트 사용자가 실행해야합니다!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}힌트:${gl_bai}이 기능을 실행하려면 루트 사용자가 필요합니다!" && break_end && kejilion } @@ -4527,30 +4527,30 @@ dd_xitong() { } dd_xitong_1() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}root${gl_bai}초기 비밀번호:${gl_huang}LeitboGi0ro${gl_bai}초기 포트 :${gl_huang}22${gl_bai}" - echo -e "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "계속하려면 키를 누르십시오 ..." + 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 "재설치 후 초기 사용자 이름:${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 @@ -4561,7 +4561,7 @@ dd_xitong() { echo "시스템을 다시 설치하십시오" echo "--------------------------------" echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - echo -e "${gl_hui}Leitbogioro 및 Bin456789의 스크립트 지원 덕분에!${gl_bai} " + echo -e "${gl_hui}스크립트를 지원해주신 leitbogioro 보스와 bin456789 보스에게 감사드립니다!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4577,14 +4577,14 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35. OpenSuse Tumbleweed 36. FNOS FEINIU 공개 베타 버전" + echo "35. openSUSE Tumbleweed 36. fnos Feiniu 공개 베타 버전" echo "------------------------" echo "41. Windows 11 42. Windows 10" echo "43. Windows 7 44. Windows Server 2025" echo "45. Windows Server 2022 46. Windows Server 2019" echo "47. Windows 11 ARM" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice case "$sys_choice" in @@ -4599,14 +4599,14 @@ dd_xitong() { ;; 2) - send_stats "데비안 12를 다시 설치하십시오" + send_stats "데비안 12 다시 설치" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "데비안 11을 다시 설치하십시오" + send_stats "데비안 11 다시 설치" dd_xitong_1 bash InstallNET.sh -debian 11 reboot @@ -4634,7 +4634,7 @@ dd_xitong() { exit ;; 13) - send_stats "Ubuntu 20.04를 다시 설치하십시오" + send_stats "우분투 20.04 다시 설치" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot @@ -4650,7 +4650,7 @@ dd_xitong() { 21) - send_stats "Rockylinux10을 다시 설치하십시오" + send_stats "rockylinux10 재설치" dd_xitong_3 bash reinstall.sh rocky reboot @@ -4674,7 +4674,7 @@ dd_xitong() { ;; 24) - send_stats "Alma9를 다시 설치하십시오" + send_stats "alma9 재설치" dd_xitong_3 bash reinstall.sh almalinux 9 reboot @@ -4682,7 +4682,7 @@ dd_xitong() { ;; 25) - send_stats "oracle10 재설치" + send_stats "Oracle10을 다시 설치하십시오" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4690,7 +4690,7 @@ dd_xitong() { ;; 26) - send_stats "Oracle9를 다시 설치하십시오" + send_stats "oracle9 재설치" dd_xitong_3 bash reinstall.sh oracle 9 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "CentOS9를 다시 설치하십시오" + send_stats "centos9 재설치" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "칼리를 다시 설치하십시오" + send_stats "칼리 재설치" dd_xitong_3 bash reinstall.sh kali reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "재설치 OpenSuse" + send_stats "Openuse 다시 설치" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4794,7 +4794,7 @@ dd_xitong() { ;; 43) - send_stats "Windows 7을 다시 설치하십시오" + send_stats "Windows7을 다시 설치하세요." 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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 25를 다시 설치하십시오" + send_stats "Windows Server 25를 다시 설치하세요." dd_xitong_2 bash InstallNET.sh -windows 2025 -lang "cn" reboot @@ -4810,7 +4810,7 @@ dd_xitong() { ;; 45) - send_stats "Windows Server 22를 다시 설치하십시오" + send_stats "윈도우 서버 22 재설치" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4826,7 +4826,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11 Arm을 다시 설치하십시오" + send_stats "windows11 ARM 재설치" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4843,7 +4843,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "bbrv3 관리" + send_stats "BBRV3 관리" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4856,17 +4856,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "Xanmod의 BBRV3 커널을 설치했습니다" - echo "현재 커널 버전 :$kernel_version" + echo "xanmod의 BBRv3 커널이 설치되어 있습니다." + echo "현재 커널 버전:$kernel_version" echo "" echo "커널 관리" echo "------------------------" - echo "1. BBRV3 커널 업데이트 2. BBRV3 커널 제거" + echo "1. BBRv3 커널 업데이트 2. BBRv3 커널 제거" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) @@ -4876,7 +4876,7 @@ bbrv3() { # 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 단계 : 저장소를 추가합니다 + # 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+') @@ -4885,7 +4885,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "Xanmod 커널이 업데이트되었습니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4895,7 +4895,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmod 커널은 제거되었습니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" server_reboot ;; @@ -4908,7 +4908,7 @@ bbrv3() { else clear - echo "BBR3 가속도를 설정하십시오" + echo "BBR3 가속 설정" echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "데비안/우분투 만 지원합니다" @@ -4927,7 +4927,7 @@ bbrv3() { linux_Settings fi else - echo "운영 체제 유형을 결정할 수 없습니다" + echo "운영 체제 유형을 확인할 수 없습니다." break_end linux_Settings fi @@ -4938,7 +4938,7 @@ bbrv3() { # 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 단계 : 저장소를 추가합니다 + # 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+') @@ -4949,7 +4949,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" + echo "Xanmod 커널이 설치되고 BBR3이 성공적으로 활성화됩니다. 다시 시작한 후에도 적용됩니다" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4959,7 +4959,7 @@ bbrv3() { echo "취소" ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "잘못된 선택, y 또는 N을 입력하십시오." ;; esac fi @@ -4976,18 +4976,18 @@ elrepo_install() { 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" + echo "지원되지 않는 운영 체제:$os_name" break_end linux_Settings fi - # 감지 된 운영 체제 정보를 인쇄합니다 - echo "운영 체제 감지 :$os_name $os_version" + # 감지된 운영 체제 정보 인쇄 + echo "감지 된 운영 체제 :$os_name $os_version" # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. 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)을 설치하십시오 ..." + echo "ELRepo 저장소 구성(버전 9) 설치 중..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then echo "Elrepo 저장소 구성 (버전 10)을 설치하십시오 ..." @@ -4997,11 +4997,11 @@ elrepo_install() { break_end linux_Settings fi - # Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오. + # ELRepo 커널 저장소를 활성화하고 최신 메인라인 커널을 설치합니다. echo "Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오 ..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepo 저장소 구성이 설치되어 최신 메인 라인 커널로 업데이트됩니다." + echo "ELRepo 저장소 구성을 설치하고 최신 메인라인 커널로 업데이트했습니다." server_reboot } @@ -5022,7 +5022,7 @@ elrepo() { echo "------------------------" echo "1. Elrepo 커널 업데이트 2. Elrepo 커널 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" sub_choice @@ -5056,9 +5056,9 @@ elrepo() { echo "비디오 소개 : https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" echo "------------------------------------------------" echo "Red Hat 시리즈 배포 Centos/Redhat/Alma/Rocky/Oracle 만 지원합니다" - echo "Linux 커널을 업그레이드하면 시스템 성능 및 보안이 향상 될 수 있습니다. 조건이 허용되고 생산 환경을 조심스럽게 업그레이드하는 경우 시도하는 것이 좋습니다!" + echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경을 주의해서 업그레이드하시는 것을 추천드립니다!" echo "------------------------------------------------" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -5071,7 +5071,7 @@ elrepo() { echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac fi @@ -5092,11 +5092,11 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔 할 디렉토리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi - echo -e "${gl_huang}스캔 디렉토리 $@...${gl_bai}" + echo -e "${gl_huang}$@ 디렉터리를 검색하는 중...${gl_bai}" # 마운트 매개 변수를 빌드하십시오 local MOUNT_PARAMS="" @@ -5138,20 +5138,20 @@ clamav() { send_stats "바이러스 스캔 관리" while true; do clear - echo "Clamav 바이러스 스캐닝 도구" - echo "비디오 소개 : https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + echo "clamav 바이러스 검사 도구" + echo "영상 소개: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "오픈 소스 바이러스 백신 소프트웨어 도구로 주로 다양한 유형의 맬웨어를 감지하고 제거하는 데 사용됩니다." + echo "다양한 유형의 악성 코드를 탐지하고 제거하는 데 주로 사용되는 오픈 소스 바이러스 백신 소프트웨어 도구입니다." echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어를 포함합니다." echo "------------------------" - echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리를 스캔하십시오${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" + echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리 스캔${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) - send_stats "전체 디스크 스캔" + send_stats "전체 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5169,7 +5169,7 @@ clamav() { ;; 3) send_stats "사용자 정의 디렉토리 스캔" - read -e -p "스캔 할 디렉토리를 입력하십시오." directories + read -e -p "스캔할 디렉터리를 공백으로 구분하여 입력하십시오(예: /etc /var /usr /home /root)." directories install_docker clamav_freshclam clamav_scan $directories @@ -5193,7 +5193,7 @@ optimize_high_performance() { echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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 @@ -5212,16 +5212,16 @@ optimize_high_performance() { 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}" + 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 -e "${gl_lv}기타 최적화...${gl_bai}" # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 echo never > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 비활성화합니다 + # NUMA 밸런싱 비활성화 sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5229,7 +5229,7 @@ optimize_high_performance() { # 이퀄라이제이션 모드 최적화 기능 optimize_balanced() { - echo -e "${gl_lv}이퀄라이제이션 모드로 전환...${gl_bai}" + echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 32768 @@ -5241,7 +5241,7 @@ optimize_balanced() { 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}" + 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 @@ -5262,7 +5262,7 @@ optimize_balanced() { echo -e "${gl_lv}기타 최적화 ...${gl_bai}" # 투명 페이지를 복원하십시오 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 복원하십시오 + # NUMA 밸런싱 복원 sysctl -w kernel.numa_balancing=1 2>/dev/null @@ -5270,9 +5270,9 @@ optimize_balanced() { # 기본 설정 기능을 복원하십시오 restore_defaults() { - echo -e "${gl_lv}기본 설정으로 복원하십시오 ...${gl_bai}" + echo -e "${gl_lv}기본 설정으로 되돌리기...${gl_bai}" - echo -e "${gl_lv}파일 디스크립터 복원 ...${gl_bai}" + echo -e "${gl_lv}파일 설명자를 복원합니다...${gl_bai}" ulimit -n 1024 echo -e "${gl_lv}가상 메모리 복원 ...${gl_bai}" @@ -5294,16 +5294,16 @@ restore_defaults() { 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}" + echo -e "${gl_lv}캐시 관리 복원...${gl_bai}" sysctl -w vm.vfs_cache_pressure=100 2>/dev/null - echo -e "${gl_lv}CPU 설정 복원 ...${gl_bai}" + echo -e "${gl_lv}CPU 설정 복원...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}다른 최적화를 복원 ...${gl_bai}" - # 투명 페이지를 복원하십시오 + echo -e "${gl_lv}다른 최적화 되돌리기...${gl_bai}" + # 투명한 대용량 페이지 복원 echo always > /sys/kernel/mm/transparent_hugepage/enabled - # NUMA 밸런싱을 복원하십시오 + # NUMA 밸런싱 복원 sysctl -w kernel.numa_balancing=1 2>/dev/null } @@ -5312,12 +5312,12 @@ restore_defaults() { # 웹사이트 구축 최적화 기능 optimize_web_server() { - echo -e "${gl_lv}웹 사이트 구축 최적화 모드로 전환하십시오 ...${gl_bai}" + echo -e "${gl_lv}웹사이트 구축 최적화 모드로 전환...${gl_bai}" echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" ulimit -n 65535 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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 @@ -5343,7 +5343,7 @@ optimize_web_server() { 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 @@ -5358,21 +5358,21 @@ Kernel_optimize() { clear send_stats "Linux 커널 튜닝 관리" echo "Linux 시스템에서 커널 매개 변수의 최적화" - echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" + echo "영상 소개: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "다양한 시스템 매개변수 조정 모드를 제공하며 사용자는 자신의 사용 시나리오에 따라 전환하도록 선택할 수 있습니다." - echo -e "${gl_huang}힌트:${gl_bai}생산 환경에서주의해서 사용하십시오!" + echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." + echo -e "${gl_huang}힌트:${gl_bai}프로덕션 환경에서는 주의해서 사용해주세요!" echo "--------------------" - echo "1. 고성능 최적화 모드 : 시스템 성능을 극대화하고 파일 설명기, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." - echo "2. 균형 최적화 모드 : 매일 사용하기에 적합한 성능과 자원 소비 사이의 균형." - echo "3. 웹 사이트 최적화 모드 : 웹 사이트 서버에 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." + echo "1. 고성능 최적화 모드: 시스템 성능을 최대화하고 파일 설명자, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." + echo "2. 균형 잡힌 최적화 모드: 일상적인 사용에 적합한 성능과 리소스 소비 사이의 균형을 유지합니다." + echo "3. 웹사이트 최적화 모드: 웹사이트 서버를 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." echo "4. 라이브 브로드 캐스트 최적화 모드 : 라이브 방송 스트리밍의 특별한 요구를 최적화하여 대기 시간을 줄이고 전송 성능을 향상시킵니다." echo "5. 게임 서버 최적화 모드 : 게임 서버를 위해 동시 처리 기능 및 응답 속도를 향상시킬 최적화." - echo "6. 기본 설정을 복원하십시오. 시스템 설정을 기본 구성으로 복원하십시오." + echo "6. 기본 설정 복원: 시스템 설정을 기본 구성으로 복원합니다." echo "--------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) cd ~ @@ -5438,7 +5438,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}시스템 언어가 다음과 같이 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" hash -r break_end @@ -5447,7 +5447,7 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}시스템 언어는 다음으로 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}시스템 언어가 다음과 같이 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" hash -r break_end ;; @@ -5457,7 +5457,7 @@ update_locale() { ;; esac else - echo "지원되지 않는 시스템, 시스템 유형을 인식 할 수 없습니다." + echo "지원되지 않는 시스템, 시스템 유형을 식별할 수 없습니다." break_end fi } @@ -5470,7 +5470,7 @@ root_use send_stats "스위치 시스템 언어" while true; do clear - echo "현재 시스템 언어 :$LANG" + echo "현재 시스템 언어:$LANG" echo "------------------------" echo "1. 영어 2. 중국어 3. 전통 중국어" echo "------------------------" @@ -5522,10 +5522,10 @@ break_end shell_bianse() { root_use - send_stats "명령 라인 미화 도구" + send_stats "명령줄 미화 도구" while true; do clear - echo "명령 라인 미화 도구" + 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}#" @@ -5582,7 +5582,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "시스템 재활용 스테이션" + send_stats "시스템 휴지통" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5597,17 +5597,17 @@ linux_trash() { fi clear - echo -e "현재 재활용 쓰레기통${trash_status}" + echo -e "현재 휴지통${trash_status}" echo -e "활성화 후 RM이 삭제 한 파일은 먼저 재활용 빈에 입력하여 중요한 파일의 잘못된 삭제를 방지합니다!" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "재활용 쓰레기통은 비어 있습니다" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "휴지통이 비어 있습니다." echo "------------------------" - echo "1. 재활용 빈을 활성화합니다. 2. 재활용 쓰레기통을 닫습니다." + echo "1. 휴지통 활성화 2. 휴지통 닫기" echo "3. 컨텐츠를 복원 4. 재활용 쓰레기통을 지 웁니다" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) @@ -5615,7 +5615,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "Recycle Bin이 활성화되고 삭제 된 파일이 Recycle Bin으로 이동됩니다." + echo "휴지통이 활성화되면 삭제된 파일은 휴지통으로 이동됩니다." sleep 2 ;; 2) @@ -5627,7 +5627,7 @@ linux_trash() { sleep 2 ;; 3) - read -e -p "복원 할 파일 이름을 입력하십시오." file_to_restore + 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홈 디렉토리로 복원되었습니다." @@ -5636,7 +5636,7 @@ linux_trash() { fi ;; 4) - read -e -p "재활용 쓰레기통을 지우셨습니까? [Y/N] :" confirm + read -e -p "휴지통을 비우시겠습니까? [예/아니요]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty echo "재활용 쓰레기통이 지워졌습니다." @@ -5650,7 +5650,7 @@ linux_trash() { } linux_fav() { -send_stats "명령 즐겨 찾기" +send_stats "명령 즐겨찾기" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } @@ -5659,14 +5659,14 @@ create_backup() { send_stats "백업 만들기" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # 사용자에게 백업 디렉토리를 입력하라는 메시지를 표시하십시오 + # 사용자에게 백업 디렉터리를 묻는 메시지 표시 echo "백업 예제 :" - echo "- 단일 디렉토리를 백업 : /var /www" - echo "- 여러 디렉토리 백업 : /etc /home /var /log" - echo "- Direct Enter는 기본 디렉토리 ( /etc /usr /home)를 사용합니다." + echo "- 단일 디렉터리 백업: /var/www" + echo "- 여러 디렉터리 백업: /etc /home /var/log" + echo "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." read -r -p "백업 디렉토리를 입력하십시오 (여러 디렉토리가 공간별로 구분되며 직접 입력하면 기본 디렉토리를 사용하십시오)." input - # 사용자가 디렉토리를 입력하지 않으면 기본 디렉토리를 사용하십시오. + # 사용자가 디렉터리를 입력하지 않으면 기본 디렉터리가 사용됩니다. if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,14 +5674,14 @@ create_backup() { "/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 @@ -5689,34 +5689,34 @@ create_backup() { # 마지막 밑줄을 제거하십시오 local PREFIX=${PREFIX%_} - # 백업 파일 이름을 생성합니다 + # 백업 파일 이름 생성 local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" # 사용자가 선택한 디렉토리를 인쇄하십시오 - echo "선택한 백업 디렉토리는 다음과 같습니다." + 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" + echo "백업이 성공적으로 생성되었습니다:$BACKUP_DIR/$BACKUP_NAME" else - echo "백업 생성이 실패했습니다!" + echo "백업 생성에 실패했습니다!" exit 1 fi } -# 백업을 복원하십시오 +# 백업 복원 restore_backup() { - send_stats "백업 복원" + send_stats "백업을 복원하십시오" # 복원하려는 백업을 선택하십시오 - read -e -p "복원하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME + read -e -p "복원할 백업 파일 이름을 입력하십시오:" BACKUP_NAME # 백업 파일이 있는지 확인하십시오 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then @@ -5724,18 +5724,18 @@ restore_backup() { exit 1 fi - echo "백업 복구$BACKUP_NAME..." + echo "백업 복원 중$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then echo "백업 및 복원 성공!" else - echo "백업 복원에 실패했습니다!" + echo "백업 복구 실패!" exit 1 fi } -# 백업 나열 +# 백업을 나열합니다 list_backups() { echo "사용 가능한 백업 :" ls -1 "$BACKUP_DIR" @@ -5743,9 +5743,9 @@ list_backups() { # 백업을 삭제하십시오 delete_backup() { - send_stats "백업을 삭제하십시오" + send_stats "백업 삭제" - read -e -p "삭제하려면 백업 파일 이름을 입력하십시오." BACKUP_NAME + read -e -p "삭제할 백업 파일 이름을 입력하십시오:" BACKUP_NAME # 백업 파일이 있는지 확인하십시오 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then @@ -5759,7 +5759,7 @@ delete_backup() { if [ $? -eq 0 ]; then echo "백업이 성공적으로 삭제되었습니다!" else - echo "백업 삭제가 실패했습니다!" + echo "백업 삭제에 실패했습니다!" exit 1 fi } @@ -5775,11 +5775,11 @@ linux_backup() { echo "------------------------" list_backups echo "------------------------" - echo "1. 백업 만들기 2. 백업 복원 3. 백업 삭제" + echo "1. 백업 생성 2. 백업 복원 3. 백업 삭제" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; @@ -5807,18 +5807,18 @@ list_connections() { } -# 새 연결을 추가하십시오 +# 새 연결 추가 add_connection() { send_stats "새 연결을 추가하십시오" - echo "새 연결을 만드는 예 :" - echo "- 연결 이름 : my_server" - echo "-IP 주소 : 192.168.1.100" - echo "- 사용자 이름 : 루트" - echo "- 포트 : 22" + 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 + read -e -p "IP 주소를 입력하십시오 :" ip + read -e -p "사용자 이름을 입력하십시오(기본값: 루트):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 @@ -5834,20 +5834,20 @@ add_connection() { echo # 换行 ;; 2) - echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" + echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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" @@ -5856,25 +5856,25 @@ add_connection() { fi ;; *) - echo "잘못된 선택!" + echo "잘못된 선택입니다!" return ;; esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "연결이 저장됩니다!" + echo "연결이 저장되었습니다!" } # 연결 삭제 delete_connection() { - send_stats "연결을 삭제하십시오" + send_stats "연결 삭제" read -e -p "삭제하려면 연결 번호를 입력하십시오." num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "오류 : 해당 연결을 찾을 수 없었습니다." + echo "오류: 해당 연결을 찾을 수 없습니다." return fi @@ -5891,7 +5891,7 @@ delete_connection() { # 연결을 사용하십시오 use_connection() { - send_stats "연결을 사용하십시오" + send_stats "연결 사용" read -e -p "사용할 연결 번호를 입력하십시오." num local connection=$(sed -n "${num}p" "$CONFIG_FILE") @@ -5902,21 +5902,21 @@ use_connection() { IFS='|' read -r name ip user port password_or_key <<< "$connection" - echo "연결$name ($ip)..." + 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. 대상 서버가 키를 사용하여 로그인 할 수 있는지 여부." + echo "2. 키 파일 권한이 올바른가요(600이어야 함)." + echo "3. 대상 서버에서 키를 이용한 로그인을 허용하는지 여부." fi else # 비밀번호로 연결하십시오 if ! command -v sshpass &> /dev/null; then echo "오류 : Sshpass가 설치되지 않았습니다. 먼저 Sshpass를 설치하십시오." - echo "설치 방법 :" + echo "설치 방법:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" return @@ -5924,8 +5924,8 @@ use_connection() { sshpass -p "$password_or_key" ssh -o StrictHostKeyChecking=no -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then echo "연결 실패! 다음을 확인하십시오." - echo "1. 사용자 이름과 비밀번호가 정확합니까?" - echo "2. 대상 서버에서 비밀번호 로그인을 허용하는지 여부." + echo "1. 사용자 이름과 비밀번호가 올바른지 여부." + echo "2. 대상 서버가 암호 로그인을 허용하는지 여부." echo "3. 대상 서버의 SSH 서비스가 정상적으로 실행되는지 여부." fi fi @@ -5951,12 +5951,12 @@ ssh_manager() { while true; do clear echo "SSH 원격 연결 도구" - echo "SSH를 통해 다른 Linux 시스템에 연결할 수 있습니다" + echo "SSH를 통해 다른 Linux 시스템에 연결할 수 있습니다." echo "------------------------" list_connections - echo "1. 새 연결 만들기 2. 연결 사용 3. 연결 삭제" + echo "1. 새 연결 생성 2. 연결 사용 3. 연결 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" choice case $choice in @@ -5964,7 +5964,7 @@ ssh_manager() { 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac done } @@ -5980,9 +5980,9 @@ ssh_manager() { -# 사용 가능한 하드 디스크 파티션을 나열하십시오 +# 사용 가능한 하드 디스크 파티션 나열 list_partitions() { - echo "사용 가능한 하드 디스크 파티션 :" + echo "사용 가능한 하드 드라이브 파티션:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } @@ -5991,15 +5991,15 @@ 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 "파티션은 이미 장착되어 있습니다!" + echo "파티션이 마운트되었습니다!" return fi @@ -6011,22 +6011,22 @@ mount_partition() { mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "파티션 마운트 성공적으로 :$MOUNT_POINT" + echo "파티션이 성공적으로 마운트되었습니다:$MOUNT_POINT" else echo "파티션 마운트 실패!" rmdir "$MOUNT_POINT" fi } -# 파티션을 제거하십시오 +# 파티션 마운트 해제 unmount_partition() { - send_stats "파티션을 제거하십시오" + send_stats "파티션 마운트 해제" read -e -p "파티션 이름 (예 : SDA1)을 입력하십시오." PARTITION # 파티션이 이미 장착되어 있는지 확인하십시오 MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "파티션이 장착되지 않았습니다!" + echo "파티션이 마운트되지 않았습니다!" return fi @@ -6034,7 +6034,7 @@ unmount_partition() { umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 분할 해제 성공 :$MOUNT_POINT" + echo "파티션이 성공적으로 제거되었습니다:$MOUNT_POINT" rmdir "$MOUNT_POINT" else echo "파티션 제거 실패!" @@ -6043,14 +6043,14 @@ unmount_partition() { # 목록 장착 파티션 list_mounted_partitions() { - echo "마운트 파티션 :" + echo "마운트된 파티션:" df -h | grep -v "tmpfs\|udev\|overlay" } # 형식 파티션 format_partition() { send_stats "파티션 포맷" - read -e -p "파티션 이름을 형식 (예 : SDA1)에 입력하십시오." PARTITION + read -e -p "포맷할 파티션의 이름을 입력하십시오(예: sda1):" PARTITION # 파티션이 있는지 확인하십시오 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then @@ -6058,13 +6058,13 @@ format_partition() { return fi - # 파티션이 이미 장착되어 있는지 확인하십시오 + # 파티션이 마운트되었는지 확인 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "파티션이 장착되었습니다. 먼저 제거하십시오!" + echo "파티션이 마운트되었습니다. 먼저 마운트를 해제하세요!" return fi - # 파일 시스템 유형을 선택하십시오 + # 파일 시스템 유형 선택 echo "파일 시스템 유형을 선택하십시오 :" echo "1. ext4" echo "2. xfs" @@ -6077,11 +6077,11 @@ format_partition() { 2) FS_TYPE="xfs" ;; 3) FS_TYPE="ntfs" ;; 4) FS_TYPE="vfat" ;; - *) echo "잘못된 선택!"; return ;; + *) echo "잘못된 선택입니다!"; return ;; esac # 형식을 확인하십시오 - read -e -p "파티션 형식 확인 /dev /$PARTITION~을 위한$FS_TYPE그게? (Y/N) :" CONFIRM + read -e -p "포맷된 파티션 /dev/ 확인$PARTITION~을 위한$FS_TYPE? (예/아니요):" CONFIRM if [ "$CONFIRM" != "y" ]; then echo "작업이 취소되었습니다." return @@ -6092,7 +6092,7 @@ format_partition() { mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "파티션 형식이 성공적이었습니다!" + echo "파티션이 성공적으로 포맷되었습니다!" else echo "파티션 형식이 실패했습니다!" fi @@ -6109,8 +6109,8 @@ check_partition() { return fi - # 파티션 상태를 확인하십시오 - echo "파티션 /개발자 /$PARTITION상태:" + # 파티션 상태 확인 + echo "파티션 확인 /dev/$PARTITION상태:" fsck "/dev/$PARTITION" } @@ -6120,12 +6120,12 @@ disk_manager() { while true; do clear echo "하드 디스크 파티션 관리" - echo -e "${gl_huang}이 기능은 테스트 기간 동안 내부적으로 테스트되므로 생산 환경에서 사용하지 마십시오.${gl_bai}" + echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" echo "1. 파티션 마운트 2. 파티션 3. 마운트 파티션보기" - echo "4. 파티션 형식 5. 파티션 상태를 확인하십시오" + echo "4. 파티션 포맷 5. 파티션 상태 확인" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -6157,17 +6157,17 @@ list_tasks() { add_task() { send_stats "새 동기화 작업을 추가하십시오" echo "새 동기화 작업 작성 예 :" - echo "- 작업 이름 : Backup_www" + 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 "로컬 디렉토리를 입력하십시오:" local_path read -e -p "원격 디렉토리를 입력하십시오 :" remote_path read -e -p "원격 사용자 @IP를 입력하십시오 :" remote - read -e -p "SSH 포트(기본값 22)를 입력하세요." port + read -e -p "SSH 포트 (기본값 22)를 입력하십시오 :" port port=${port:-22} echo "인증 방법을 선택하십시오 :" @@ -6185,17 +6185,17 @@ add_task() { echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" 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" @@ -6208,7 +6208,7 @@ add_task() { fi ;; *) - echo "잘못된 선택!" + echo "잘못된 선택입니다!" return ;; esac @@ -6216,18 +6216,18 @@ add_task() { echo "동기화 모드를 선택하십시오 :" echo "1. 표준 모드 (-avz)" echo "2. 대상 파일 삭제 (-avz-delete)" - read -e -p "선택하십시오 (1/2) :" mode + read -e -p "(1/2)을 선택하세요:" mode case $mode in 1) options="-avz" ;; 2) options="-avz --delete" ;; - *) echo "유효하지 않은 선택, 기본값 -AVZ를 사용하십시오"; options="-avz" ;; + *) 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 "작업을 저장했습니다!" + echo "임무가 저장되었습니다!" } # 작업을 삭제하십시오 @@ -6283,7 +6283,7 @@ run_task() { 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" @@ -6294,13 +6294,13 @@ run_task() { destination="$remote:$remote_path" fi - # SSH 연결 공통 매개 변수를 추가하십시오 + # 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 "오류 : Sshpass가 설치되지 않았습니다. 먼저 Sshpass를 설치하십시오." + echo "설치 방법:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" return @@ -6326,28 +6326,28 @@ run_task() { else echo "동기화 실패! 다음을 확인하십시오." echo "1. 네트워크 연결이 정상입니까?" - echo "2. 원격 호스트가 액세스 할 수 있습니까?" + echo "2. 원격 호스트에 접근 가능한지 여부" echo "3. 인증 정보가 정확합니까?" - echo "4. 로컬 및 원격 디렉토리에 올바른 액세스 권한이 있습니까?" + echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi } -# 시간이 정한 작업을 만듭니다 +# 예약된 작업 만들기 schedule_task() { - send_stats "동기화 타이밍 작업을 추가하십시오" + send_stats "동기화 예약 작업 추가" - read -e -p "정기적으로 동기화 할 작업 번호를 입력하십시오." num + read -e -p "정기적으로 동기화할 작업 번호를 입력하세요:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류: 유효한 작업 번호를 입력하십시오!" + echo "오류 : 유효한 작업 번호를 입력하십시오!" return fi - echo "시간이 정한 실행 간격을 선택하십시오." - echo "1) 한 시간에 한 번 실행하십시오" - echo "2) 하루에 한 번 실행" + echo "예약된 실행 간격을 선택하십시오." + echo "1) 매 시간마다 한 번씩 실행" + echo "2) 하루에 한 번 수행하십시오" echo "3) 일주일에 한 번 실행" - read -e -p "옵션을 입력하십시오 (1/2/3) :" interval + read -e -p "옵션을 입력하세요(1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" @@ -6355,7 +6355,7 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "오류 : 유효한 옵션을 입력하십시오!" ; return ;; + *) echo "오류: 유효한 옵션을 입력하십시오!" ; return ;; esac local cron_job="$cron_time k rsync_run $num" @@ -6363,18 +6363,18 @@ schedule_task() { # 동일한 작업이 이미 존재하는지 확인하십시오 if crontab -l | grep -q "k rsync_run $num"; then - echo "오류 :이 작업의 타이밍 동기화가 이미 존재합니다!" + echo "오류: 이 작업에 대해 예약된 동기화가 이미 존재합니다!" return fi - # 사용자에게 크론AB를 만듭니다 + # 사용자의 crontab에 생성 (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "타이밍 작업이 만들어졌습니다.$cron_job" + echo "예약된 작업이 생성되었습니다:$cron_job" } -# 예약된 작업 보기 +# 예정된 작업을 봅니다 view_tasks() { - echo "현재 타이밍 작업 :" + echo "현재 예약된 작업:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" @@ -6383,14 +6383,14 @@ view_tasks() { # 타이밍 작업을 삭제하십시오 delete_task_schedule() { send_stats "동기화 타이밍 작업을 삭제합니다" - read -e -p "삭제하려면 작업 번호를 입력하십시오." num + read -e -p "삭제할 작업 번호를 입력하세요:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "오류: 유효한 작업 번호를 입력하십시오!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "삭제 된 작업 번호$num타이밍 작업" + echo "태스크 번호가 삭제되었습니다.$num예약된 작업" } @@ -6401,7 +6401,7 @@ rsync_manager() { while true; do clear - echo "RSYNC 원격 동기화 도구" + echo "Rsync 원격 동기화 도구" echo "원격 디렉토리 간의 동기화는 증분 동기화, 효율적이고 안정적인 지원을 지원합니다." echo "---------------------------------" list_tasks @@ -6409,7 +6409,7 @@ rsync_manager() { view_tasks echo echo "1. 새 작업 생성 2. 작업을 삭제하십시오" - echo "3. 원격 끝에 로컬 동기화 수행 4. 로컬 엔드에 대한 원격 동기화 수행" + echo "3. 원격 사이트에 대한 로컬 동기화 수행 4. 로컬 사이트에 대한 원격 동기화 수행" echo "5. 타이밍 작업 만들기 6. 타이밍 작업 삭제" echo "---------------------------------" echo "0. 이전 메뉴로 돌아갑니다" @@ -6423,7 +6423,7 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac read -e -p "계속하려면 Enter를 누르십시오 ..." done @@ -6492,29 +6492,29 @@ linux_info() { 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}$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_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}$load" echo -e "${gl_kjlan}물리적 메모리:${gl_bai}$mem_info" - echo -e "${gl_kjlan}가상 메모리 :${gl_bai}$swap_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}총 수신 :${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}받은 총액:${gl_bai}$rx" + echo -e "${gl_kjlan}보낸 총액:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}네트워크 알고리즘 :${gl_bai}$congestion_algorithm $queue_algorithm" + 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" + echo -e "${gl_kjlan}IPv4 주소:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then @@ -6541,24 +6541,24 @@ linux_tools() { 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}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}소사이어티 커뮤니케이션 연결 도구" - 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}3. ${gl_bai}Sudo Super Management 권한 도구${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}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}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}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}" @@ -6593,9 +6593,9 @@ linux_tools() { clear install socat clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." socat -h - send_stats "Socat을 설치하십시오" + send_stats "socat 설치" ;; 5) clear @@ -6615,7 +6615,7 @@ linux_tools() { clear install unzip clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." unzip send_stats "압축을 설치하십시오" ;; @@ -6623,9 +6623,9 @@ linux_tools() { clear install tar clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." tar --help - send_stats "타르를 설치하십시오" + send_stats "타르 설치" ;; 9) clear @@ -6639,7 +6639,7 @@ linux_tools() { clear install ffmpeg clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." ffmpeg --help send_stats "FFMPEG를 설치하십시오" ;; @@ -6667,7 +6667,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDU를 설치하십시오" + send_stats "ncdu 설치" ;; 14) clear @@ -6676,7 +6676,7 @@ linux_tools() { clear fzf cd ~ - send_stats "FZF를 설치하십시오" + send_stats "fzf 설치" ;; 15) clear @@ -6685,7 +6685,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIM을 설치하십시오" + send_stats "vim 설치" ;; 16) clear @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "git을 설치하십시오" + send_stats "자식 설치" ;; 21) @@ -6713,7 +6713,7 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrix 설치" + send_stats "cmatrix를 설치하십시오" ;; 22) clear @@ -6727,21 +6727,21 @@ linux_tools() { install bastet clear bastet - send_stats "Bastet을 설치하십시오" + send_stats "바스테트 설치" ;; 27) clear install nsnake clear nsnake - send_stats "NSNAKE를 설치하십시오" + send_stats "nsnake 설치" ;; 28) clear install ninvaders clear ninvaders - send_stats "닌베이더 설치" + send_stats "Ninvaders를 설치하십시오" ;; 31) @@ -6765,15 +6765,15 @@ linux_tools() { 41) clear - read -e -p "설치된 도구 이름 (WGET CURL SUDO HTOP)을 입력하십시오." installname + read -e -p "설치된 도구 이름을 입력하십시오(wget 컬 sudo htop):" installname install $installname send_stats "지정된 소프트웨어를 설치하십시오" ;; 42) clear - read -e -p "제거되지 않은 도구 이름 (HTOP UFW TMUX CMATRIX)을 입력하십시오." removename + read -e -p "제거된 도구 이름(htop ufw tmux cmatrix)을 입력하십시오." removename remove $removename - send_stats "지정된 소프트웨어 제거" + send_stats "지정된 소프트웨어를 제거하십시오" ;; 0) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -6806,7 +6806,7 @@ linux_bbr() { echo "" echo "BBR 관리" echo "------------------------" - echo "1. BBRV3 켜기 2. BBRV3 끄기 (재시작)" + echo "1. BBRv3를 켭니다. 2. BBRv3을 끕니다(다시 시작됩니다)." echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -6815,7 +6815,7 @@ linux_bbr() { case $sub_choice in 1) bbr_on - send_stats "알파인 활성화 BBR3" + send_stats "알파인이 열립니다 bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6871,7 +6871,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers install tar jq gzip install_docker @@ -6884,7 +6884,7 @@ docker_ssh_migration() { else read -ra TARGET_CONTAINERS <<< "$containers" fi - [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}컨테이너가 없습니다${NC}"; return; } + [[ ${#TARGET_CONTAINERS[@]} -eq 0 ]] && { echo -e "${RED}컨테이너를 찾을 수 없습니다.${NC}"; return; } local BACKUP_DIR="${BACKUP_ROOT}/docker_backup_${DATE_STR}" mkdir -p "$BACKUP_DIR" @@ -6892,9 +6892,9 @@ docker_ssh_migration() { local RESTORE_SCRIPT="${BACKUP_DIR}/docker_restore.sh" echo "#!/bin/bash" > "$RESTORE_SCRIPT" echo "set -e" >> "$RESTORE_SCRIPT" - echo "# 자동으로 생성 된 복원 스크립트" >> "$RESTORE_SCRIPT" + echo "# 자동으로 생성된 복원 스크립트" >> "$RESTORE_SCRIPT" - # 중복 포장을 피하기 위해 패키지 작곡 프로젝트의 경로를 기록하십시오. + # 반복되는 패키징을 피하기 위해 패키징된 Compose 프로젝트 경로를 기록하세요. declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do @@ -6903,7 +6903,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}감지됨$c예, Docker-compose 컨테이너${NC}" + echo -e "${BLUE}감지$c도커 작성 컨테이너입니다${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -6911,9 +6911,9 @@ docker_ssh_migration() { read -e -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir fi - # Compose 프로젝트가 포장 된 경우 건너 뛰십시오 + # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}작곡 프로젝트 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" continue fi @@ -6921,10 +6921,10 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "# Docker-Compose Recovery :$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 복원:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}작곡 프로젝트 [$project_name] 포장 :${project_dir}${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name] 포장 :${project_dir}${NC}" else echo -e "${RED}docker-compose.yml을 찾을 수 없고이 컨테이너를 건너 뛰십시오 ...${NC}" fi @@ -6933,7 +6933,7 @@ docker_ssh_migration() { local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "포장 롤 :$path" + echo "포장량:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done @@ -6955,21 +6955,21 @@ docker_ssh_migration() { local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\ n# 복원 컨테이너 :$c" >> "$RESTORE_SCRIPT" + echo -e "\n# 복원 컨테이너:$c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # /home /docker 아래의 모든 파일을 백업 (하위 디렉터 제외) + # /home/docker 아래의 모든 파일을 백업합니다(하위 디렉터리 제외). if [ -d "/home/docker" ]; then echo -e "${BLUE}/home /docker 아래 파일을 백업 ...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}/home /docker의 파일은 다음과 같이 포장되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}/home/docker 아래의 파일은 다음과 같이 패키지되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" - echo -e "${GREEN}백업이 완료되었습니다.${BACKUP_DIR}${NC}" + echo -e "${GREEN}백업 완료:${BACKUP_DIR}${NC}" echo -e "${GREEN}사용 가능한 복원 스크립트 :${RESTORE_SCRIPT}${NC}" @@ -6989,7 +6989,7 @@ docker_ssh_migration() { install tar jq gzip install_docker - # --------- Compose 프로젝트 복원 우선순위 지정 --------- + # ----------------------------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then @@ -7005,21 +7005,21 @@ docker_ssh_migration() { continue fi - read -e -p "Compose 프로젝트 복원 확인 [$project_name] 경로로 [$original_path] ? (y/n): " confirm + read -e -p "Compose 프로젝트 복원 확인 [$project_name] 경로 [$original_path] ? (y/n): " confirm [[ "$confirm" != "y" ]] && read -e -p "새로운 복원 경로를 입력하십시오 :" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}작곡 프로젝트 [$project_name] 압축 압축 : :$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name] 압축 압축 : :$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원이 완료되었습니다!${NC}" + echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원 완료!${NC}" fi done - # ----------------------------- + # --------- 일반 컨테이너를 계속 복원합니다 --------- echo -e "${BLUE}일반적인 도커 컨테이너를 확인하고 복원하십시오 ...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do @@ -7028,14 +7028,14 @@ docker_ssh_migration() { container=$(basename "$json" | sed 's/_inspect.json//') echo -e "${GREEN}처리 컨테이너 :$container${NC}" - # 컨테이너가 이미 존재하고 실행 중인지 확인하십시오 + # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}컨테이너 [$container]는 실행 중입니다. 회복을 건너 뛰십시오 ...${NC}" + echo -e "${YELLOW}컨테이너 [$container] 이미 실행 중입니다. 복원을 건너뛰는 중...${NC}" continue fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}거울 정보는 찾을 수 없었습니다.$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}미러 정보를 찾을 수 없습니다. 건너뛰세요:$container${NC}"; continue; } # 포트 매핑 PORT_ARGS="" @@ -7062,32 +7062,32 @@ docker_ssh_migration() { VOL_FILE="$BACKUP_DIR/${container}_$(basename $VOL_SRC).tar.gz" if [[ -f "$VOL_FILE" ]]; then - echo "볼륨 데이터 복구 :$VOL_SRC" + echo "볼륨 데이터 복구:$VOL_SRC" tar -xzf "$VOL_FILE" -C / fi done # 기존이지만 실행되지 않은 컨테이너를 삭제하십시오 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}컨테이너 [$container] 존재하지만 실행되지 않고 오래된 컨테이너를 삭제합니다 ...${NC}" + echo -e "${YELLOW}컨테이너 [$container]가 있지만 실행 중이 아닙니다. 이전 컨테이너를 삭제하세요...${NC}" docker rm -f "$container" fi # 컨테이너를 시작하십시오 - echo "복원 명령 실행 : docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" + echo "복원 명령을 실행합니다: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}일반 컨테이너에 대한 백업 정보는 발견되지 않았습니다${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}공통 컨테이너에 대한 백업 정보가 없습니다.${NC}" - # /home/docker 아래의 파일 복원 + # /home /docker에서 파일을 복원하십시오 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then - echo -e "${BLUE}/home /docker에서 파일을 복원 ...${NC}" + echo -e "${BLUE}/home/docker 아래의 파일을 복원하는 중...${NC}" mkdir -p /home/docker tar -xzf "$BACKUP_DIR/home_docker_files.tar.gz" -C / - echo -e "${GREEN}/home /docker의 파일이 복원되었습니다${NC}" + echo -e "${GREEN}/home/docker 아래의 파일이 복원되었습니다.${NC}" else - echo -e "${YELLOW}/home /docker 아래 파일의 백업이 발견되지 않았습니다.${NC}" + echo -e "${YELLOW}/home/docker 아래의 파일 백업을 찾을 수 없습니다. 건너뛰는 중...${NC}" fi @@ -7101,10 +7101,10 @@ docker_ssh_migration() { send_stats "도커 마이그레이션" install jq read -e -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } read -e -p "대상 서버 IP :" TARGET_IP - read -e -p "대상 서버 SSH 사용자 이름 :" TARGET_USER + read -e -p "대상 서버 SSH 사용자 이름:" TARGET_USER read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} @@ -7112,18 +7112,18 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 ...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키로 로그인하십시오 + # 키로 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # 백업을 삭제하십시오 + # 백업 삭제 # ---------------------------- delete_backup() { send_stats "Docker 백업 파일 삭제" - read -e -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + read -e -p "삭제할 백업 디렉터리를 입력하십시오:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } rm -rf "$BACKUP_DIR" echo -e "${GREEN}삭제 된 백업 :${BACKUP_DIR}${NC}" @@ -7133,7 +7133,7 @@ docker_ssh_migration() { # 메인 메뉴 # ---------------------------- main_menu() { - send_stats "도커 백업 마이그레이션 및 복원" + send_stats "Docker 백업 마이그레이션 복원" while true; do clear echo "------------------------" @@ -7144,12 +7144,12 @@ docker_ssh_migration() { echo "------------------------" echo -e "1. 도커 프로젝트 백업" echo -e "2. Docker 프로젝트를 마이그레이션합니다" - echo -e "3. Docker 프로젝트를 복원하십시오" + echo -e "3. 도커 프로젝트 복원" echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" echo "------------------------" - echo -e "0. 이전 메뉴로 돌아갑니다" + echo -e "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택하십시오 :" choice + read -e -p "선택하세요:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -7188,18 +7188,18 @@ linux_docker() { 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}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}19. ${gl_bai}백업/마이그레이션/복원 Docker 환경" + echo -e "${gl_kjlan}19. ${gl_bai}Docker 환경 백업/마이그레이션/복원" echo -e "${gl_kjlan}20. ${gl_bai}Docker 환경 제거" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) @@ -7221,16 +7221,16 @@ linux_docker() { docker compose version echo "" - echo -e "도커 이미지 :${gl_lv}$image_count${gl_bai} " + 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 "Docker 볼륨:${gl_lv}$volume_count${gl_bai}" + echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "도커 네트워크 :${gl_lv}$network_count${gl_bai}" + echo -e "도커 네트워크:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7270,11 +7270,11 @@ linux_docker() { done echo "" - echo "네트워크 작동" + echo "네트워크 운영" echo "------------------------" - echo "1. 네트워크를 만듭니다" + echo "1. 네트워크 생성" echo "2. 인터넷에 가입하십시오" - echo "3. 네트워크를 종료하십시오" + echo "3. 네트워크 종료" echo "4. 네트워크를 삭제합니다" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" @@ -7288,8 +7288,8 @@ linux_docker() { docker network create $dockernetwork ;; 2) - send_stats "인터넷에 가입하십시오" - read -e -p "네트워크 이름에 가입 :" dockernetwork + send_stats "네트워크에 가입하세요" + read -e -p "네트워크 이름 추가:" dockernetwork read -e -p "해당 컨테이너는 네트워크에 추가됩니다 (여러 컨테이너 이름은 공간으로 분리됩니다)." dockernames for dockername in $dockernames; do @@ -7299,7 +7299,7 @@ linux_docker() { 3) send_stats "인터넷에 가입하십시오" read -e -p "종료 네트워크 이름 :" dockernetwork - read -e -p "해당 컨테이너는 네트워크를 종료합니다 (여러 컨테이너 이름은 공간별로 분리됩니다)." dockernames + read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7308,7 +7308,7 @@ linux_docker() { ;; 4) - send_stats "네트워크를 삭제하십시오" + send_stats "네트워크 삭제" read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork docker network rm $dockernetwork ;; @@ -7329,13 +7329,13 @@ linux_docker() { echo "" echo "볼륨 작동" echo "------------------------" - echo "1. 새 볼륨을 만듭니다" + echo "1. 새 볼륨 생성" echo "2. 지정된 볼륨을 삭제합니다" echo "3. 모든 볼륨을 삭제하십시오" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "볼륨 삭제 이름을 입력하십시오 (공백으로 여러 볼륨 이름을 분리하십시오)." dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7354,7 +7354,7 @@ linux_docker() { ;; 3) - send_stats "모든 볼륨을 삭제하십시오" + send_stats "모든 볼륨 삭제" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7385,7 +7385,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7413,7 +7413,7 @@ linux_docker() { 12) clear - send_stats "Docker V6 레벨" + send_stats "도커 v6 닫기" docker_ipv6_off ;; @@ -7436,7 +7436,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7463,28 +7463,28 @@ linux_test() { while true; do clear # Send_stats "테스트 스크립트 컬렉션" - echo -e "스크립트 수집 테스트" + echo -e "테스트 스크립트 수집" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}IP 및 잠금 해제 상태 감지" - echo -e "${gl_kjlan}1. ${gl_bai}ChatGpt는 상태 감지를 잠금 해제합니다" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPT 잠금 해제 상태 감지" echo -e "${gl_kjlan}2. ${gl_bai}지역 스트리밍 미디어 잠금 해제 테스트" echo -e "${gl_kjlan}3. ${gl_bai}YEAHWU 스트리밍 미디어 잠금 해제 탐지" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP 품질 확인 스크립트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}네트워크 속도 측정" - echo -e "${gl_kjlan}11. ${gl_bai}Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + echo -e "${gl_kjlan}네트워크 회선 속도 테스트" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 3 네트워크 백홀 지연 라우팅 테스트" echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 IP 백홀 테스트 스크립트를 지정합니다." + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" echo -e "${gl_kjlan}17. ${gl_bai}i-abc 다기능 속도 테스트 스크립트" echo -e "${gl_kjlan}18. ${gl_bai}Netquality Network 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}하드웨어 성능 테스트" - echo -e "${gl_kjlan}21. ${gl_bai}YABS 성능 테스트" + echo -e "${gl_kjlan}21. ${gl_bai}Yabs 성능 테스트" echo -e "${gl_kjlan}22. ${gl_bai}IICU/GB5 CPU 성능 테스트 스크립트" echo -e "${gl_kjlan}------------------------" @@ -7492,7 +7492,7 @@ linux_test() { 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}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "선택을 입력하십시오 :" sub_choice @@ -7528,12 +7528,12 @@ linux_test() { ;; 12) clear - send_stats "MTR_TRACE 3 개의 네트워크 리턴 라인 테스트" + send_stats "mtr_trace 삼중 네트워크 백홀 회선 테스트" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed 3 Net 속도 측정" + send_stats "초고속 트리플 네트워크 속도 테스트" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) @@ -7547,20 +7547,20 @@ linux_test() { send_stats "nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" echo "참조 할 수있는 IP 목록" echo "------------------------" - echo "베이징 통신 : 219.141.136.12" + echo "베이징 통신: 219.141.136.12" echo "베이징 유니폼 : 202.106.50.1" - echo "베이징 모바일 : 221.179.155.161" - echo "상하이 통신 : 202.96.209.133" + echo "베이징 모바일: 221.179.155.161" + echo "상하이 통신: 202.96.209.133" echo "상하이 유니폼 : 210.22.97.1" echo "상하이 모바일: 211.136.112.200" - echo "광저우 통신 : 58.60.188.222" - echo "광저우 유니폼 : 210.21.196.6" - echo "광저우 모바일 : 120.196.165.24" - echo "청두 통신 : 61.139.2.69" + echo "광저우 통신: 58.60.188.222" + echo "광저우 차이나 유니콤: 210.21.196.6" + echo "광저우 모바일: 120.196.165.24" + echo "청두통신: 61.139.2.69" echo "청두 유니폼 : 119.6.6.6" echo "청두 모바일 : 211.137.96.205" echo "Hunan Telecom : 36.111.200.100" - echo "후난 유니폼 : 42.48.16.100" + echo "후난 유니콤: 42.48.16.100" echo "후난 모바일 : 39.134.254.6" echo "------------------------" @@ -7571,7 +7571,7 @@ linux_test() { 16) clear - send_stats "Ludashi2020 3 네트워크 라인 테스트" + send_stats "ludashi2020 세 개의 네트워크 라인 테스트" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; @@ -7589,13 +7589,13 @@ linux_test() { 21) clear - send_stats "YABS 성능 테스트" + send_stats "Yabs 성능 테스트" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "IICU/GB5 CPU 성능 테스트 스크립트" + send_stats "icu/gb5 CPU 성능 테스트 스크립트" check_swap bash <(curl -sL bash.icu/gb5) ;; @@ -7606,7 +7606,7 @@ linux_test() { curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX 퓨전 몬스터 검토" + 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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -7639,9 +7639,9 @@ linux_Oracle() { 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}4. ${gl_bai}R 형사 시작 스크립트" + echo -e "${gl_kjlan}5. ${gl_bai}ROOT 비밀번호 로그인 모드 활성화" + 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}" @@ -7699,12 +7699,12 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloud 제거 활성 스크립트" + send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" ;; 3) clear - echo "시스템 재설치" + echo "시스템을 다시 설치하십시오" echo "--------------------------------" echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." read -e -p "계속할거야? (Y/N) :" choice @@ -7724,21 +7724,21 @@ linux_Oracle() { break # 结束循环 ;; *) - echo "유효하지 않은 선택, 다시 입력하십시오." + echo "선택이 잘못되었습니다. 다시 입력해 주세요." ;; esac done - read -e -p "다시 설치 한 비밀번호를 입력하십시오." vpspasswd + 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 회복 시스템 스크립트" + send_stats "Oracle Cloud 재설치 시스템 스크립트" ;; [Nn]) echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7756,8 +7756,8 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." - send_stats "IPv6 수정" + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" + send_stats "IPv6 수리" ;; 0) kejilion @@ -7806,7 +7806,7 @@ 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" + echo -e "${gl_lv}환경이 설치되었습니다${gl_bai}대지:$output데이터 베이스:$db_output" fi fi @@ -7834,31 +7834,31 @@ linux_ldnmp() { while true; do clear - # send_stats "ldnmp 웹 사이트 빌딩" - echo -e "${gl_huang}LDNMP 웹 사이트 구축" + # 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}Discuz 포럼을 설치하십시오${gl_huang}4. ${gl_bai}Kadao 클라우드 데스크탑을 설치하십시오" + echo -e "${gl_huang}3. ${gl_bai}Discuz 포럼 설치${gl_huang}4. ${gl_bai}Kedao 클라우드 데스크탑 설치" echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" - echo -e "${gl_huang}7. ${gl_bai}Flarum Forum 웹 사이트를 설치하십시오${gl_huang}8. ${gl_bai}Typecho Lightweight 블로그 웹 사이트를 설치하십시오" - echo -e "${gl_huang}9. ${gl_bai}LinkStack 공유 링크 플랫폼을 설치하십시오${gl_huang}20. ${gl_bai}동적 사이트를 사용자 정의합니다" + 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}사이트 리버스 프록시 -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}AI 페인팅 프롬프트 워드 생성기를 설치하십시오${gl_huang}28. ${gl_bai}사이트 리버스 프록시로드 밸런싱" - echo -e "${gl_huang}30. ${gl_bai}정적 사이트를 사용자 정의합니다" + echo -e "${gl_huang}23. ${gl_bai}사이트 리버스 프록시 -IP+포트${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}사이트 역방향 프록시 도메인 이름" + echo -e "${gl_huang}25. ${gl_bai}Bitwarden 비밀번호 관리 플랫폼 설치${gl_huang}26. ${gl_bai}Halo 블로그 사이트 설치" + echo -e "${gl_huang}27. ${gl_bai}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}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}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 + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -7875,7 +7875,7 @@ linux_ldnmp() { # Discuz 포럼 webname="Discuz论坛" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,11 +7898,11 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 이름:$dbname" echo "사용자 이름 :$dbuse" echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : discuz_" + echo "테이블 접두사: discuz_" ;; @@ -7934,10 +7934,10 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 주소: mysql" echo "사용자 이름 :$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" + echo "데이터베이스 이름:$dbname" echo "Redis 호스트 : Redis" ;; @@ -7947,7 +7947,7 @@ linux_ldnmp() { # AppleCMS webname="苹果CMS" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,12 +7973,12 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 주소: mysql" echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 접두사: mac_" + echo "데이터베이스 접두사 : MAC_" echo "------------------------" echo "설치가 성공한 후 배경 주소에 로그인하십시오." echo "https://$yuming/vip.php" @@ -7987,7 +7987,7 @@ linux_ldnmp() { 6) clear - # 한 다리 카운팅 카드 + # 한쪽다리 숫자카드 webname="独脚数卡" send_stats "설치하다$webname" echo "배포를 시작하십시오$webname" @@ -8011,7 +8011,7 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소: mysql" + echo "데이터베이스 주소 : MySQL" echo "데이터베이스 포트 : 3306" echo "데이터베이스 이름 :$dbname" echo "사용자 이름 :$dbuse" @@ -8019,26 +8019,26 @@ linux_ldnmp() { echo "" echo "Redis 주소 : Redis" echo "Redis Password : 기본적으로 채워지지 않습니다" - echo "Redis Port : 6379" + echo "레디스 포트: 6379" echo "" - echo "웹 사이트 URL : https : //$yuming" + echo "웹사이트 URL: https://$yuming" echo "백그라운드 로그인 경로 : /admin" echo "------------------------" - echo "사용자 이름 : 관리자" + echo "사용자 이름: 관리자" echo "비밀번호 : 관리자" echo "------------------------" - echo "로그인 할 때 오른쪽 상단에 빨간색 Error0이 나타나면 다음 명령을 사용하십시오." - echo "나는 또한 유니콘 번호 카드가 너무 귀찮다는 것에 대해 매우 화가 났으며 그러한 문제가있을 것입니다!" + echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용하시기 바랍니다." + echo "유니콘 숫자카드가 왜 이렇게 귀찮고 이런 문제가 있는지에 대해서도 너무 화가 납니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; 7) clear - # Flarum 포럼 + # 플라럼 포럼 webname="flarum论坛" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8077,9 +8077,9 @@ linux_ldnmp() { ldnmp_web_on echo "데이터베이스 주소 : MySQL" echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : flarum_" + echo "테이블 접두사: flarum_" echo "관리자 정보는 직접 설정됩니다" ;; @@ -8089,7 +8089,7 @@ linux_ldnmp() { # typecho webname="typecho" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8113,11 +8113,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 접두사 : typecho_" - echo "데이터베이스 주소 : MySQL" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 접두사: typecho_" + echo "데이터베이스 주소: mysql" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" + echo "데이터베이스 이름:$dbname" ;; @@ -8152,7 +8152,7 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 주소: mysql" echo "데이터베이스 포트 : 3306" echo "데이터베이스 이름 :$dbname" echo "사용자 이름 :$dbuse" @@ -8180,10 +8180,10 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드를 업로드하십시오" + echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드 업로드" echo "-------------" - echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리에서" - read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download + echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리 아래" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8198,7 +8198,7 @@ linux_ldnmp() { # find "$(realpath .)" -name "index.php" -print find "$(realpath .)" -name "index.php" -print | xargs -I {} dirname {} - read -e -p "(/home/web/html/와 유사한 Index.php의 경로를 입력하십시오.$yuming/wordpress/): " index_lujing + read -e -p "(/home/web/html/과 유사하게 index.php 경로를 입력하세요.$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 @@ -8217,7 +8217,7 @@ linux_ldnmp() { local PHP_Version="php74" ;; *) - echo "유효하지 않은 선택, 다시 입력하십시오." + echo "선택이 잘못되었습니다. 다시 입력해 주세요." ;; esac @@ -8252,7 +8252,7 @@ linux_ldnmp() { echo ;; 2) - echo "데이터베이스 백업은 .gz-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." + echo "데이터베이스 백업은 .gz로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db cd /home/ @@ -8263,10 +8263,10 @@ linux_ldnmp() { 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 "데이터베이스 가져 오기 테이블 데이터" + echo "데이터베이스에서 가져온 테이블 데이터" docker exec -i mysql mysql -u root -p"$dbrootpasswd" -e "USE $dbname; SHOW TABLES;" rm -f *.sql - echo "데이터베이스 가져 오기가 완료되었습니다" + echo "데이터베이스 가져오기 완료" ;; *) echo @@ -8279,10 +8279,10 @@ linux_ldnmp() { ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 :$prefix" + echo "테이블 접두사:$prefix" echo "관리자 로그인 정보는 직접 설정됩니다" ;; @@ -8297,7 +8297,7 @@ linux_ldnmp() { clear webname="站点重定向" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming read -e -p "점프 도메인 이름을 입력하십시오 :" reverseproxy nginx_install_status @@ -8321,7 +8321,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "IP+포트가 서비스 접근을 차단했습니다." else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8335,7 +8335,7 @@ linux_ldnmp() { send_stats "설치하다$webname" echo "배포를 시작하십시오$webname" add_yuming - echo -e "도메인 이름 형식 :${gl_huang}google.com${gl_bai}" + echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" read -e -p "반세기 도메인 이름을 입력하십시오 :" fandai_yuming nginx_install_status install_ssltls @@ -8398,7 +8398,7 @@ linux_ldnmp() { clear webname="AI绘画提示词生成器" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming nginx_install_status install_ssltls @@ -8449,10 +8449,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드를 업로드하십시오" + echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드 업로드" echo "-------------" - echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리에서" - read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드 할 수도 있습니다. 원격 다운로드를 건너 뛰려면 Enter를 직접 누르십시오." url_download + echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8462,12 +8462,12 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html이 위치한 경로" + 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 "(/home/web/html/와 유사한 index.html로가는 경로를 입력하십시오.$yuming/index/): " index_lujing + read -e -p "(/home/web/html/과 유사하게 index.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 @@ -8495,7 +8495,7 @@ linux_ldnmp() { send_stats "LDNMP 환경 백업" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" + echo -e "${gl_huang}백업 중$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do @@ -8505,10 +8505,10 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip - read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT + read -e -p "대상 서버 SSH 포트 [기본값 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." + echo "오류: 원격 서버 IP를 입력하세요." continue fi local latest_tar=$(ls -t /home/*.tar.gz | head -1) @@ -8518,7 +8518,7 @@ linux_ldnmp() { scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." else - echo "전송할 파일은 찾을 수 없었습니다." + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -8535,8 +8535,8 @@ linux_ldnmp() { 33) clear send_stats "시간이 지정된 원격 백업" - read -e -p "원격 서버 IP를 입력하십시오." useip - read -e -p "원격 서버 비밀번호를 입력하십시오." usepasswd + 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 @@ -8547,7 +8547,7 @@ linux_ldnmp() { echo "------------------------" echo "1. 주간 백업 2. 매일 백업" - read -e -p "선택을 입력하십시오 :" dingshi + read -e -p "선택사항을 입력하세요:" dingshi case $dingshi in 1) @@ -8583,7 +8583,7 @@ linux_ldnmp() { linux_ldnmp fi - # 사용자가 파일명을 입력하지 않으면 최신 압축 패키지가 사용됩니다. + # 사용자가 파일 이름을 입력하지 않으면 최신 압축 패키지를 사용하십시오. if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8593,7 +8593,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + echo -e "${gl_huang}압축 해제 중$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8602,7 +8602,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "압축 패키지가 발견되지 않았습니다." + echo "압축된 패키지를 찾을 수 없습니다." fi ;; @@ -8621,7 +8621,7 @@ linux_ldnmp() { while true; do clear send_stats "LDNMP 환경을 업데이트하십시오" - echo "LDNMP 환경을 업데이트하십시오" + echo "LDNMP 환경 업데이트" echo "------------------------" ldnmp_v echo "구성 요소의 새 버전을 발견하십시오" @@ -8646,7 +8646,7 @@ linux_ldnmp() { echo echo "1. Nginx 업데이트 2. MySQL 업데이트 3. PHP 업데이트 4. Redis 업데이트" echo "------------------------" - echo "5. 전체 환경을 업데이트하십시오" + echo "5. 전체 환경 업데이트" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -8659,7 +8659,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "입력하십시오${ldnmp_pods}버전 번호 (예 : 8.0 8.3 8.4 9.0) (최신 버전을 얻으려면 입력) :" version + read -e -p "입력해주세요${ldnmp_pods}버전 번호(예: 8.0 8.3 8.4 9.0)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-latest} cd /home/web/ @@ -8676,7 +8676,7 @@ linux_ldnmp() { ;; 3) local ldnmp_pods="php" - read -e -p "입력하십시오${ldnmp_pods}버전 번호 (예 : 7.4 8.0 8.1 8.2 8.3) (최신 버전을 얻으려면 입력) :" version + read -e -p "입력하십시오${ldnmp_pods}버전 번호(예: 7.4 8.0 8.1 8.2 8.3)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8729,7 +8729,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "LDNMP 환경을 완전히 업데이트하십시오" + send_stats "LDNMP 환경 전체 업데이트" cd /home/web/ docker compose down --rmi all @@ -8779,7 +8779,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" esac break_end @@ -8799,12 +8799,12 @@ while true; do if [ -z "$sub_choice" ]; then clear - echo -e "응용 프로그램 시장" + echo -e "응용 시장" echo -e "${gl_kjlan}------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") - # 루프로 색상을 설정하십시오 + # 루프를 사용하여 색상 설정 for i in {1..150}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,69 +8813,69 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}Aapanel International Edition" - echo -e "${gl_kjlan}3. ${color3}1 파넬 신세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}우분투 원격 데스크탑 웹 에디션" + echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" + echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" + echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" - echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}Rocketchat 멀티 플레이어 온라인 채팅 시스템" + echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}Zendao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" + echo -e "${gl_kjlan}11. ${color11}ZenTao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" - echo -e "${gl_kjlan}15. ${color15}EMBY 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" + echo -e "${gl_kjlan}15. ${color15}emby 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}UptimeKuma 모니터링 도구" - echo -e "${gl_kjlan}23. ${color23}메모 웹 페이지 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 타이밍 작업 관리 프레임 워크" - echo -e "${gl_kjlan}27. ${color27}도크 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}Librespeed 속도 테스트 도구" - echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}Photoprism 개인 앨범 시스템" + echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" + echo -e "${gl_kjlan}23. ${color23}메모 웹 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 예약된 작업 관리 프레임워크" + echo -e "${gl_kjlan}27. ${color27}Dockge 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}LibreSpeed ​​​​속도 테스트 도구" + echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism 개인 앨범 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF 도구 모음${gl_kjlan}32. ${color32}Drawio 무료 온라인 차트 소프트웨어${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}썬 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF 도구 모음${gl_kjlan}32. ${color32}drawio 무료 온라인 차트 작성 소프트웨어${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}webssh 웹 버전 SSH 연결 도구" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" - echo -e "${gl_kjlan}43. ${color43}Rustdesk 원격 책상 (서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk 원격 데스크톱(릴레이)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}Github Acceleration Station${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}프로 메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" + echo -e "${gl_kjlan}43. ${color43}RustDesk 원격 데스크톱(서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk 원격 데스크톱(릴레이)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}GitHub 가속 스테이션${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}프로메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE 치킨 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" + echo -e "${gl_kjlan}51. ${color51}PVE 오픈 병아리 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹사이트 구축 관리 패널" - echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투 (서버 측)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}Dify Big Model 지식 기반${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투(서버)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}대규모 모델 지식 기반 확장${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}JumpServer 오픈 소스 요새 머신" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}래그 플로 큰 모델 지식 기반" + echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}RAGFlow 대규모 모델 지식 기반" echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" - echo -e "${gl_kjlan}67. ${color67}DDNS-GO 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllInsSL 인증서 관리 플랫폼" - echo -e "${gl_kjlan}69. ${color69}sftpgo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" + echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" + echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}Bitwarden 비밀번호 관리자${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}Libretv 개인 영화 및 텔레비전${gl_kjlan}74. ${color74}Moontv 개인 영화" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워든 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" - echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" + echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}Jitsimeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" - echo -e "${gl_kjlan}85. ${color85}이미치 픽처 비디오 매니저${gl_kjlan}86. ${color86}젤리 핀 미디어 관리 시스템" - echo -e "${gl_kjlan}87. ${color87}synctv 영화 시청 인공물${gl_kjlan}88. ${color88}자체 호스팅 라이브 방송 플랫폼" - echo -e "${gl_kjlan}89. ${color89}filecodebox 파일 Express${gl_kjlan}90. ${color90}매트릭스 분산 채팅 프로토콜" + echo -e "${gl_kjlan}85. ${color85}이미치 픽처 비디오 매니저${gl_kjlan}86. ${color86}젤리핀 미디어 관리 시스템" + echo -e "${gl_kjlan}87. ${color87}SyncTV는 함께 영화를 볼 수 있는 훌륭한 도구입니다${gl_kjlan}88. ${color88}Owncast 자체 호스팅 라이브 스트리밍 플랫폼" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox 파일 익스프레스${gl_kjlan}90. ${color90}매트릭스 분산형 채팅 프로토콜" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자" - echo -e "${gl_kjlan}93. ${color93}DUFS 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" - echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAUTH 자체 호스팅 2 단계 유효성 검사기" - echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}동기화 지점 간 파일 동기화 도구" + echo -e "${gl_kjlan}93. ${color93}Dufs 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" + echo -e "${gl_kjlan}95. ${color95}종이 없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAuth 자체 호스팅 2단계 인증자" + echo -e "${gl_kjlan}97. ${color97}WireGuard 네트워킹(서버)${gl_kjlan}98. ${color98}WireGuard 네트워킹(클라이언트)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology 가상 컴퓨터${gl_kjlan}100. ${color100}동기화 지점 간 파일 동기화 도구" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI 비디오 생성 도구${gl_kjlan}102. ${color102}vecechat 멀티 플레이어 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오" + echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9032,7 +9032,7 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정:" admin + read -e -p "로그인 사용자 이름 설정 :" admin read -e -p "로그인 사용자 비밀번호 설정 :" admin_password docker run -d \ --name=webtop-ubuntu \ @@ -9066,7 +9066,7 @@ while true; do ;; 7|nezha) clear - send_stats "Nezha를 구축하십시오" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9075,9 +9075,9 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "나타 모니터링$check_docker $update_status" - echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 작동 및 유지 보수 도구" - echo "공식 웹 사이트 구성 문서 : https://nezha.wiki/guide/dashboard.html" + echo -e "Nezha 모니터링$check_docker $update_status" + echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" + echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip @@ -9086,7 +9086,7 @@ while true; do echo "------------------------" echo "1. 사용" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" choice @@ -9156,8 +9156,8 @@ while true; do clear echo -e "우체국 서비스$check_docker $update_status" - echo "Poste.io는 오픈 소스 메일 서버 솔루션입니다." - echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" + echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." + echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" echo "" echo "포트 감지" @@ -9172,14 +9172,14 @@ while true; do if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then yuming=$(cat /home/docker/mail.txt) - echo "액세스 주소 :" + echo "방문 주소:" echo "https://$yuming" fi echo "------------------------" echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" choice @@ -9192,7 +9192,7 @@ while true; do echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "이 DNS 레코드를 먼저 구문 분석하십시오" + echo "먼저 이 DNS 레코드를 구문 분석하세요." echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9202,7 +9202,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 키를 누르십시오 ..." + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install jq @@ -9293,7 +9293,7 @@ while true; do clear ip_address - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -9313,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다." + echo "앱이 제거되었습니다" } docker_app_plus @@ -9411,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9565,7 +9565,7 @@ while true; do check_docker_app clear echo -e "썬더 풀 서비스$check_docker" - echo "Lei Chi는 변경 기술이 개발 한 WAF 사이트 방화벽 프로그램 패널로, 자동 방어를 위해 대행사 사이트를 역전시킬 수 있습니다." + echo "레이치(Leichi)는 창팅테크놀로지(Changting Technology)가 개발한 WAF 사이트 방화벽 프로그램 패널로, 자동화된 방어를 위해 사이트를 반전시킬 수 있다." echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip @@ -9575,9 +9575,9 @@ while true; do echo "------------------------" echo "1. 설치 2. 업데이트 3. 비밀번호 재설정 4. 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) @@ -9587,7 +9587,7 @@ while true; do add_app_id clear - echo "Thunder Pool WAF 패널이 설치되었습니다" + echo "Leichi WAF 패널이 설치되었습니다." check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9600,7 +9600,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 업데이트되었습니다." + echo "Thunder Pool WAF 패널이 업데이트되었습니다" check_docker_app_ip ;; 3) @@ -9730,8 +9730,8 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" admin - read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "로그인 사용자 이름 설정:" admin + read -e -p "로그인 사용자 비밀번호 설정:" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10278,7 +10278,7 @@ while true; do ip_address echo "설치" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 admin입니다." + echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" } docker_app_update() { @@ -10383,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVE 치킨" + send_stats "PVE 오픈 병아리" 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 ;; @@ -10503,7 +10503,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10518,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "앱이 제거되었습니다." + echo "앱이 제거되었습니다" } docker_app_plus @@ -10546,7 +10546,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10561,7 +10561,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10569,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10590,9 +10590,9 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "설치" + echo "설치 완료" check_docker_app_ip - echo "초기 사용자 이름 : 관리자" + echo "초기 사용자 이름: admin" echo "초기 비밀번호 : changeme" } @@ -10610,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10657,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10673,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10970,7 +10970,7 @@ while true; do docker_app_install() { read -e -p "로그인 사용자 이름 설정 :" admin - read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "로그인 사용자 비밀번호 설정:" admin_password read -e -p "인증 코드를 입력하십시오." shouquanma @@ -10987,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11001,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11074,7 +11074,7 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" app_use + read -e -p "로그인 사용자 이름 설정:" app_use read -e -p "로그인 비밀번호 설정 :" app_passwd docker run -d \ @@ -11222,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11272,7 +11272,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11568,7 +11568,7 @@ while true; do --restart=always \ matrixdotorg/synapse:latest - echo "초기 사용자 또는 관리자를 생성합니다. 다음 사용자 이름과 비밀번호를 설정하고 관리자인지 여부를 설정하세요." + echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11620,7 +11620,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11709,8 +11709,8 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" app_use - read -e -p "로그인 비밀번호 설정 :" app_passwd + read -e -p "로그인 사용자 이름 설정:" app_use + read -e -p "로그인 비밀번호 설정:" app_passwd docker run -d \ --name ${docker_name} \ @@ -11826,7 +11826,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11846,7 +11846,7 @@ while true; do read -e -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT COUNT=${COUNT:-5} - read -e -p "Wireguard 세그먼트를 입력하십시오 (기본값 10.13.13.0) :" NETWORK + read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11923,10 +11923,10 @@ while true; do echo -e "${gl_huang}모든 클라이언트 구성 코드 :${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}모든 출력은 각 클라이언트가 제공합니다. 사용법은 다음과 같습니다.${gl_bai}" - echo -e "${gl_lv}1. 휴대 전화에서 WG의 앱을 다운로드하고 위의 QR 코드를 스캔하여 네트워크에 빠르게 연결하십시오.${gl_bai}" + echo -e "${gl_lv}${COUNT}모든 출력은 모두 각 클라이언트에 의해 구성되며 사용 방법은 다음과 같습니다.${gl_bai}" + echo -e "${gl_lv}1. 휴대폰에 wg APP을 다운로드하고 위의 QR 코드를 스캔하면 빠르게 인터넷에 연결됩니다.${gl_bai}" echo -e "${gl_lv}2. Windows 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결하십시오.${gl_bai}" - echo -e "${gl_lv}3. Linux는 스크립트를 사용하여 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" + echo -e "${gl_lv}3. 스크립트를 사용하여 Linux에 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" echo -e "${gl_lv}공식 클라이언트 다운로드 방법 : https://www.wireguard.com/install/${gl_bai}" break_end @@ -11977,10 +11977,10 @@ while true; do fi done - # 구성 파일에 쓰십시오 + # 구성 파일 쓰기 echo "$input" > "$CONFIG_FILE" - echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE" + echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12025,10 +12025,10 @@ while true; do docker_app_install() { - read -e -p "CPU 코어 수를 설정 (기본값 2) :" CPU_CORES + read -e -p "CPU 코어 수를 설정합니다(기본값 2):" CPU_CORES local CPU_CORES=${CPU_CORES:-2} - read -e -p "메모리 크기를 설정 (기본 4G) :" RAM_SIZE + read -e -p "메모리 크기 설정(기본 4G):" RAM_SIZE local RAM_SIZE=${RAM_SIZE:-4} mkdir -p /home/docker/dsm @@ -12059,7 +12059,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -12129,7 +12129,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -12138,7 +12138,7 @@ while true; do - 102) + 102|vocechat) local app_id="102" local docker_name="vocechat-server" @@ -12168,24 +12168,24 @@ while true; do b) clear - send_stats "모든 응용 프로그램 백업" + send_stats "모든 애플리케이션 백업" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}백업$backup_filename ...${gl_bai}" + echo -e "${gl_huang}백업 중$backup_filename ...${gl_bai}" cd / && tar czvf "$backup_filename" home while true; do clear - echo "백업 파일이 작성되었습니다 : /$backup_filename" + echo "생성된 백업 파일: /$backup_filename" read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice case "$choice" in [Yy]) - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip - read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT + read -e -p "원격 서버 IP를 입력하세요:" remote_ip + read -e -p "대상 서버 SSH 포트 [기본값 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." + echo "오류: 원격 서버 IP를 입력하세요." continue fi local latest_tar=$(ls -t /app*.tar.gz | head -1) @@ -12193,9 +12193,9 @@ while true; do ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" - echo "파일은 원격 서버/루트 디렉토리로 전송되었습니다." + echo "원격 서버/루트 디렉터리로 파일이 전송되었습니다." else - echo "전송할 파일을 찾을 수 없습니다." + echo "전송할 파일은 찾을 수 없었습니다." fi break ;; @@ -12210,12 +12210,12 @@ while true; do r) root_use - send_stats "모든 응용 프로그램이 복원됩니다" + send_stats "모든 앱 복원" echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" - read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename + read -e -p "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 0을 입력하세요." filename if [ "$filename" == "0" ]; then break_end @@ -12228,11 +12228,11 @@ while true; do fi if [ -n "$filename" ]; then - echo -e "${gl_huang}압축 해제 중$filename ...${gl_bai}" + echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" cd / && tar -xzf "$filename" echo "응용 프로그램 데이터가 복원되었습니다. 지정된 응용 프로그램 메뉴를 수동으로 입력하고 응용 프로그램을 업데이트하여 응용 프로그램을 복원하십시오." else - echo "압축 패키지가 발견되지 않았습니다." + echo "압축된 패키지를 찾을 수 없습니다." fi ;; @@ -12255,35 +12255,35 @@ linux_work() { while true; do clear - send_stats "백엔드 작업 공간" + send_stats "백엔드 작업공간" echo -e "백엔드 작업 공간" echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." - echo -e "SSH를 분리하더라도 작업 공간의 작업이 중단되지 않으며 백그라운드의 작업이 거주됩니다." + echo -e "SSH 연결을 끊더라도 작업 공간의 작업은 중단되지 않으며 작업은 백그라운드에 유지됩니다." echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" echo -e "${gl_kjlan}------------------------" - echo "현재 기존 작업 공간 목록" + 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}2. ${gl_bai}작업 영역 2" echo -e "${gl_kjlan}3. ${gl_bai}작업 영역 3" echo -e "${gl_kjlan}4. ${gl_bai}작업 공간 No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 5번" - echo -e "${gl_kjlan}6. ${gl_bai}작업 공간 No. 6" + 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}8. ${gl_bai}작업 영역 8" echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 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}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 + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -12291,7 +12291,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업공간 시작$SESSION_NAME" + send_stats "작업 공간을 시작하십시오$SESSION_NAME" tmux_run ;; @@ -12299,14 +12299,14 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 3) clear install tmux local SESSION_NAME="work3" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 4) @@ -12320,7 +12320,7 @@ linux_work() { clear install tmux local SESSION_NAME="work5" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 6) @@ -12367,20 +12367,20 @@ linux_work() { else local tmux_sshd_status="${gl_hui}关闭${gl_bai}" fi - send_stats "SSH 거주 모드" - echo -e "SSH 거주 모드${tmux_sshd_status}" - echo "SSH 연결이 활성화 된 후에는 거주 모드에 직접 입력하여 이전 작업 상태로 돌아갑니다." + send_stats "SSH 상주 모드" + echo -e "SSH 상주 모드${tmux_sshd_status}" + echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" echo "1. 2를 켜십시오. 2를 끕니다" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" gongzuoqu_del + read -e -p "선택사항을 입력하세요:" gongzuoqu_del case "$gongzuoqu_del" in 1) install tmux local SESSION_NAME="sshd" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + 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 @@ -12397,29 +12397,29 @@ linux_work() { ;; 22) - read -e -p "1001 kj001 work1과 같이 생성하거나 입력한 작업공간의 이름을 입력하세요." SESSION_NAME + read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME tmux_run - send_stats "사용자 정의 작업 공간" + send_stats "맞춤형 작업공간" ;; 23) - read -e -p "Curl -fssl https://get.docker.com | 쉿:" tmuxd + read -e -p "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -fsSL https://get.docker.com | 쉿:" tmuxd tmux_run_d - send_stats "배경 작업 공간에 명령을 주입합니다" + send_stats "백그라운드 작업 공간에 명령 삽입" ;; 24) read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "작업 공간을 삭제합니다" + send_stats "작업공간 삭제" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -12444,46 +12444,46 @@ linux_Settings() { while true; do clear - # Send_stats "시스템 도구" + # 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}지정된 버전의 Python을 설치하십시오" + echo -e "${gl_kjlan}1. ${gl_bai}스크립트 스타트 업 단축키 키를 설정하십시오${gl_kjlan}2. ${gl_bai}로그인 암호를 수정하십시오" + echo -e "${gl_kjlan}3. ${gl_bai}루트 암호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${gl_kjlan}10. ${gl_bai}우선 순위 IPv4/IPv6을 전환하십시오" + echo -e "${gl_kjlan}9. ${gl_bai}루트 계정을 비활성화하여 새 계정을 생성하십시오${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}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}ROOT 개인 키 로그인 모드" - echo -e "${gl_kjlan}25. ${gl_bai}TG-BOT 시스템 모니터링 및 조기 경고${gl_kjlan}26. ${gl_bai}OpenSsh 고위험 취약점을 수정하십시오" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템에서 커널 매개 변수의 최적화${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}23. ${gl_bai}전류 제한 자동 종료${gl_kjlan}24. ${gl_bai}ROOT 개인 키 로그인 모드" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기 경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템 커널 매개변수 최적화${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}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}37. ${gl_bai}명령줄 기록${gl_kjlan}38. ${gl_bai}RSYNC 원격 동기화 도구" echo -e "${gl_kjlan}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" 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}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}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택사항을 입력하세요:" sub_choice + read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) while true; do clear - read -e -p "바로 가기 키를 입력하십시오 (종료하려면 0을 입력하십시오) :" kuaijiejian + read -e -p "바로가기 키를 입력하십시오(종료하려면 0을 입력하십시오):" kuaijiejian if [ "$kuaijiejian" == "0" ]; then break_end linux_Settings @@ -12491,7 +12491,7 @@ linux_Settings() { 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 "스크립트 바로 가기 키가 설정되었습니다" + send_stats "스크립트 단축키가 설정되었습니다" break_end linux_Settings done @@ -12499,7 +12499,7 @@ linux_Settings() { 2) clear - send_stats "로그인 비밀번호를 설정하십시오" + send_stats "로그인 비밀번호를 설정하세요" echo "로그인 비밀번호를 설정하십시오" passwd ;; @@ -12511,15 +12511,15 @@ linux_Settings() { 4) root_use - send_stats "PY 버전 관리" + send_stats "py 버전 관리" echo "파이썬 버전 관리" echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" echo "---------------------------------------" - echo "이 기능은 Python에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" + echo "이 기능은 Python이 공식적으로 지원하는 모든 버전을 원활하게 설치할 수 있습니다!" 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 "권장 버전: 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 @@ -12595,7 +12595,7 @@ EOF 5) root_use - send_stats "포트 열기" + send_stats "열린 포트" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 echo "모든 포트가 열려 있습니다" @@ -12609,17 +12609,17 @@ EOF clear sed -i 's/#Port/Port/' /etc/ssh/sshd_config - # 현재 SSH 포트 번호를 읽으십시오 + # 현재 SSH 포트 번호 읽기 local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') - # 현재 SSH 포트 번호를 인쇄하십시오 + # 현재 SSH 포트 번호 인쇄 echo -e "현재 SSH 포트 번호는 다음과 같습니다.${gl_huang}$current_port ${gl_bai}" echo "------------------------" echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" # 사용자에게 새 SSH 포트 번호를 입력하라는 메시지 - read -e -p "새로운 SSH 포트 번호를 입력하십시오 :" new_port + read -e -p "새 SSH 포트 번호를 입력하세요." new_port # 포트 번호가 유효한 범위 내에 있는지 확인 if [[ $new_port =~ ^[0-9]+$ ]]; then # 检查输入是否为数字 @@ -12627,7 +12627,7 @@ EOF send_stats "SSH 포트가 수정되었습니다" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSH 포트 수정을 종료하십시오" + send_stats "SSH 포트 수정 종료" break else echo "포트 번호가 잘못되었습니다. 1~65535 사이의 숫자를 입력하세요." @@ -12635,8 +12635,8 @@ EOF break_end fi else - echo "입력이 유효하지 않으므로 번호를 입력하십시오." - send_stats "잘못된 SSH 포트 입력" + echo "입력이 잘못되었습니다. 숫자를 입력하세요." + send_stats "잘못된 SSH 포트가 입력되었습니다." break_end fi done @@ -12655,8 +12655,8 @@ EOF ;; 9) root_use - send_stats "신규 사용자는 루트를 비활성화합니다" - read -e -p "새 사용자 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_username + send_stats "신규 사용자에 대한 루트 비활성화" + read -e -p "새 사용자 이름을 입력하십시오(종료하려면 0을 입력하십시오):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12677,26 +12677,26 @@ EOF 10) root_use - send_stats "V4/V6 우선 순위를 설정하십시오" + send_stats "v4/v6 우선순위 설정" while true; do clear - echo "V4/V6 우선 순위를 설정하십시오" + echo "v4/v6 우선순위 설정" echo "------------------------" if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; then - echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv4${gl_bai}우선 사항" + 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 "1. IPv4 우선 2. IPv6 우선 3. IPv6 복구 도구" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선호하는 네트워크를 선택하십시오." choice + read -e -p "선호하는 네트워크를 선택하세요:" choice case $choice in 1) @@ -12714,7 +12714,7 @@ EOF 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "이 기능은 마스터 JHB가 제공합니다." + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" send_stats "IPv6 수정" ;; @@ -12733,10 +12733,10 @@ EOF 12) root_use - send_stats "가상 메모리를 설정합니다" + send_stats "가상 메모리 설정" while true; do clear - echo "가상 메모리를 설정합니다" + 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}') @@ -12745,9 +12745,9 @@ EOF echo "------------------------" echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case "$choice" in 1) @@ -12761,7 +12761,7 @@ EOF ;; 3) - send_stats "4G 가상 메모리가 설정되었습니다" + send_stats "4G 가상 메모리가 설정되었습니다." add_swap 4096 ;; @@ -12769,7 +12769,7 @@ EOF 4) read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap add_swap "$new_swap" - send_stats "사용자 정의 가상 메모리가 설정되었습니다" + send_stats "사용자 정의 가상 메모리 세트" ;; *) @@ -12796,22 +12796,22 @@ EOF echo "" echo "계정 운영" echo "------------------------" - echo "1. 일반 계정 만들기 2. 프리미엄 계정 만들기" + echo "1. 일반 계정 생성 2. 프리미엄 계정 생성" echo "------------------------" - echo "3. 최고 권한을 부여 4. 최고 권한을 취소하십시오." + echo "3. 가장 높은 권한을 부여합니다. 4. 가장 높은 권한을 제거합니다." echo "------------------------" echo "5. 계정 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + read -e -p "새 사용자 이름을 입력하세요:" new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 새로운 사용자 생성 및 비밀번호 설정 useradd -m -s /bin/bash "$new_username" passwd "$new_username" @@ -12819,7 +12819,7 @@ EOF ;; 2) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + # 사용자에게 새 사용자 이름을 묻는 메시지 표시 read -e -p "새 사용자 이름을 입력하십시오 :" new_username # 새 사용자를 생성하고 비밀번호를 설정하십시오 @@ -12835,21 +12835,21 @@ EOF ;; 3) - read -e -p "사용자 이름을 입력하십시오 :" username + read -e -p "사용자 이름을 입력하세요:" username # 새 사용자에게 sudo 권한 부여 echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo ;; 4) - read -e -p "사용자 이름을 입력하십시오 :" username - # Sudoers 파일에서 사용자의 Sudo 권한을 제거하십시오 + read -e -p "사용자 이름을 입력하세요:" username + # sudoers 파일에서 사용자의 sudo 권한을 제거합니다. sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers ;; 5) read -e -p "삭제하려면 사용자 이름을 입력하십시오." username - # 사용자 및 해당 홈 디렉터리 삭제 + # 사용자와 홈 디렉토리를 삭제하십시오 userdel -r "$username" ;; @@ -12871,12 +12871,12 @@ EOF done echo "" - 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 개의 임의의 사용자 이름을 생성합니다 + # 5개의 무작위 사용자 이름 생성 for i in {1..5}; do local first_name_index=$((RANDOM % ${#first_names[@]})) local last_name_index=$((RANDOM % ${#last_names[@]})) @@ -12885,11 +12885,11 @@ EOF done echo "" - echo "무작위 uuid" + echo "무작위 UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) - echo "무작위 uuid$i: $uuid" + echo "무작위 UUID$i: $uuid" done echo "" @@ -12897,15 +12897,15 @@ EOF echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) - echo "랜덤 비밀번호$i: $password" + echo "임의의 비밀번호$i: $password" done echo "" - echo "32 비트 랜덤 비밀번호" + 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" + echo "임의의 비밀번호$i: $password" done echo "" @@ -12913,7 +12913,7 @@ EOF 15) root_use - send_stats "시간대 변경" + send_stats "시간대를 변경하십시오" while true; do clear echo "시스템 시간 정보" @@ -12925,30 +12925,30 @@ EOF local current_time=$(date +"%Y-%m-%d %H:%M:%S") # 시간대와 시간을 보여줍니다 - echo "현재 시스템 시간대 :$timezone" + echo "현재 시스템 시간대:$timezone" echo "현재 시스템 시간 :$current_time" echo "" echo "시간대 스위칭" echo "------------------------" echo "아시아" - echo "1. 중국의 상하이 시간 2. 중국의 홍콩 시간" + echo "1. 중국 상하이 시간 2. 중국 홍콩 시간" echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" echo "5. 싱가포르 시간 6. 콜카타, 인도 시간" - echo "7. UAE 8의 두바이 시간. 호주 시드니 시간" + echo "7. 아랍에미리트 두바이 시간 8. 호주 시드니 시간" echo "9. 태국 방콕에서의 시간" echo "------------------------" echo "유럽" - echo "11. 영국의 런던 시간 12. 프랑스의 파리 시간" - echo "13. 베를린 시간, 독일 14. 모스크바 시간, 러시아" - echo "15. 네덜란드에서 우트레흐트 시간 16. 스페인의 마드리드 시간" + echo "11. 영국 런던 시간 12. 프랑스 파리 시간" + echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" - echo "21. 서양 시간 22. 동부 시간" + echo "21. 미국 서부 시간 22. 미국 동부 시간" echo "23. 캐나다 시간 24. 멕시코 시간" echo "25. 브라질 시간 26. 아르헨티나 시간" echo "------------------------" - echo "31. UTC 세계 표준시" + echo "31. UTC 글로벌 표준 시간" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -13000,7 +13000,7 @@ EOF while true; do clear local current_hostname=$(uname -n) - echo -e "현재 호스트 이름 :${gl_huang}$current_hostname${gl_bai}" + echo -e "현재 호스트 이름:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" read -e -p "새 호스트 이름을 입력하십시오 (종료하려면 0을 입력하십시오) :" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then @@ -13009,7 +13009,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, Centos 등과 같은 다른 시스템 + # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13027,11 +13027,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "호스트 이름은 다음으로 변경되었습니다.$new_hostname" + echo "호스트 이름이 다음으로 변경되었습니다.$new_hostname" send_stats "호스트 이름이 변경되었습니다" sleep 1 else - echo "종료, 호스트 이름이 변경되지 않았습니다." + echo "호스트 이름을 변경하지 않고 종료되었습니다." break fi done @@ -13039,14 +13039,14 @@ EOF 19) root_use - send_stats "시스템 업데이트 소스를 변경하십시오" + send_stats "시스템 업데이트 소스 변경" clear - echo "업데이트 소스 영역을 선택하십시오" + echo "업데이트 소스 지역 선택" echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" echo "------------------------" echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" choice @@ -13056,11 +13056,11 @@ EOF bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) - send_stats "중국 본토의 교육 원" + send_stats "중국 본토 교육 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "해외 출신" + send_stats "해외 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) @@ -13072,7 +13072,7 @@ EOF ;; 20) - send_stats "타이밍 작업 관리" + send_stats "예약된 작업 관리" while true; do clear check_crontab_installed @@ -13084,13 +13084,13 @@ EOF echo "------------------------" echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택을 입력하십시오 :" sub_choice case $sub_choice in 1) - read -e -p "새 작업의 실행 명령을 입력하십시오:" newquest + read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest echo "------------------------" echo "1. 월간 작업 2. 주간 작업" echo "3. 일일 작업 4. 시간당 작업" @@ -13103,7 +13103,7 @@ EOF (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) - read -e -p "작업을 수행 할 일주일을 선택합니까? (0-6, 0은 일요일을 나타냅니다) :" weekday + read -e -p "작업을 수행할 요일을 선택하시겠습니까? (0-6, 0은 일요일을 나타냄):" weekday (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) @@ -13111,17 +13111,17 @@ EOF (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "작업을 수행하기 위해 몇 분의 시간을 입력합니까? (Mins, 0-60) :" minute + read -e -p "작업을 실행해야 하는 시간을 입력하세요. (분, 0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "시간이 정한 작업을 추가하십시오" + send_stats "예약된 작업 추가" ;; 2) - read -e -p "삭제 해야하는 키워드를 입력하십시오." kquest + read -e -p "삭제할 작업의 키워드를 입력하세요:" kquest crontab -l | grep -v "$kquest" | crontab - send_stats "타이밍 작업을 삭제하십시오" ;; @@ -13148,21 +13148,21 @@ EOF echo "" echo "작동하다" echo "------------------------" - echo "1. 새 구문 분석 추가 2. 구문 분석 주소 삭제" + echo "1. 새로운 해상도 추가 2. 해상도 주소 삭제" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "선택사항을 입력하세요:" host_dns case $host_dns in 1) read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost echo "$addhost" >> /etc/hosts - send_stats "로컬 호스트 구문 분석이 추가되었습니다" + send_stats "로컬 호스트 해상도가 추가되었습니다." ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "삭제해야 하는 구문 분석된 콘텐츠의 키워드를 입력하세요." delhost sed -i "/$delhost/d" /etc/hosts send_stats "로컬 호스트 구문 분석 및 삭제" ;; @@ -13183,12 +13183,12 @@ EOF echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 방어 프로그램 설치" echo "------------------------" - echo "2. SSH 차단 레코드보기" + echo "2. SSH 차단 기록 보기" echo "3. 실시간 로그 모니터링" echo "------------------------" - echo "9. 방어 프로그램을 제거하십시오" + echo "9. 방어 프로그램 제거" echo "------------------------" echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" @@ -13214,7 +13214,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; *) @@ -13227,41 +13227,41 @@ EOF 23) root_use - send_stats "현재 제한 종료 기능" + send_stats "전류 제한 차단 기능" while true; do clear echo "현재 제한 종료 기능" echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" echo "------------------------------------------------" - echo "서버가 다시 시작되면 현재 트래픽 사용량이 지워집니다!" + echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" output_status echo -e "${gl_kjlan}받은 총액:${gl_bai}$rx" echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" - # limiting_shut_down.sh 파일이 있는지 확인하십시오 + # Limiting_Shut_down.sh 파일이 있는지 확인하세요. if [ -f ~/Limiting_Shut_down.sh ]; then # threshold_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}${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}" + echo -e "${gl_hui}현재 제한 종료 기능이 활성화되어 있지 않습니다.${gl_bai}" fi echo echo "------------------------------------------------" echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" echo "------------------------" - echo "1. 전류 제한 종료 기능을 활성화합니다. 2. 전류 제한 종료 기능을 비활성화합니다." + echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" echo "------------------------" - echo "0. 이전 메뉴로 돌아가기" + echo "0. 이전 메뉴로 돌아갑니다" echo "------------------------" read -e -p "선택을 입력하십시오 :" Limiting case "$Limiting" in 1) - # 새 가상 메모리 크기를 입력하십시오 + # 새 가상 메모리 크기 입력 echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} @@ -13280,7 +13280,7 @@ EOF (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 "전류 제한 종료가 설정되었습니다" + echo "전류 제한 종료가 설정되었습니다." send_stats "전류 제한 종료가 설정되었습니다" ;; 2) @@ -13288,7 +13288,7 @@ EOF crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab - crontab -l | grep -v 'reboot' | crontab - rm ~/Limiting_Shut_down.sh - echo "전류 제한 종료 기능이 꺼졌습니다" + echo "전류 제한 차단 기능이 꺼졌습니다." ;; *) break @@ -13301,19 +13301,19 @@ EOF 24) root_use - send_stats "개인키 로그인" + send_stats "개인 키 로그인" while true; do clear echo "ROOT 개인 키 로그인 모드" echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" echo "------------------------------------------------" - echo "키 쌍이 생성되며 SSH 로그인을위한보다 안전한 방법" + echo "SSH를 통해 더욱 안전하게 로그인할 수 있는 키 쌍이 생성됩니다." echo "------------------------" echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" host_dns + read -e -p "선택사항을 입력하세요:" host_dns case $host_dns in 1) @@ -13323,15 +13323,15 @@ EOF ;; 2) - send_stats "기존 공개 키를 가져옵니다" + send_stats "기존 공개 키 가져오기" import_sshkey break_end ;; 3) - send_stats "로컬 비밀 키를보십시오" + send_stats "로컬 키 보기" echo "------------------------" - echo "공개 키 정보" + echo "공개키 정보" cat ~/.ssh/authorized_keys echo "------------------------" echo "개인 키 정보" @@ -13351,13 +13351,13 @@ EOF 25) root_use send_stats "전보 경고" - echo "TG-BOT 모니터링 및 조기 경고 기능" - echo "비디오 소개 : https://youtu.be/vll-eb3z_ty" + echo "TG-bot 모니터링 및 조기경보 기능" + echo "영상소개: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "기본 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인의 실시간 모니터링 및 조기 경고를 실현하려면 조기 경고를 받으려면 TG Robot API 및 사용자 ID를 구성해야합니다." + echo "로컬 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인에 대한 실시간 모니터링 및 경고를 달성하려면 경고를 수신하도록 tg 로봇 API 및 사용자 ID를 구성해야 합니다." echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" - read -e -p "계속하시겠습니까? (예/아니요):" choice + read -e -p "계속할거야? (Y/N) :" choice case "$choice" in [Yy]) @@ -13394,7 +13394,7 @@ EOF source ~/.profile clear - echo "TG-BOT 조기 경고 시스템이 시작되었습니다" + echo "TG-bot 조기경보 시스템이 활성화되었습니다." echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" ;; [Nn]) @@ -13408,7 +13408,7 @@ EOF 26) root_use - send_stats "SSH에서 고위험 취약점을 수정하십시오" + 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 @@ -13475,31 +13475,31 @@ EOF 41) clear - send_stats "게시판" - echo "공식 게시위원회의 기술 사자를 방문하십시오. 스크립트에 대한 아이디어가 있으시면 메시지를 남겨두고 의사 소통하십시오!" + send_stats "메시지 보드" + echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" echo "https://board.kejilion.pro" - echo "공개 비밀번호 : Kejilion.sh" + echo "공개 비밀번호: kejilion.sh" ;; 66) root_use send_stats "원 스톱 튜닝" - echo "원 스톱 시스템 최적화" + echo "원스톱 시스템 튜닝" echo "------------------------------------------------" echo "다음은 작동하고 최적화됩니다" - echo "1. 시스템을 최신으로 업데이트하십시오" + echo "1. 시스템을 최신으로 업데이트하세요" echo "2. 시스템 정크 파일 정리" - echo -e "3. 가상 메모리를 설정하십시오${gl_huang}1G${gl_bai}" + 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 "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 "9. 기본 도구 설치${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "10. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" echo "------------------------------------------------" - read -e -p "한 번의 클릭 유지 보수가 있습니까? (Y/N) :" choice + read -e -p "원클릭 유지 관리를 원하시나요? (예/아니요):" choice case "$choice" in [Yy]) @@ -13507,7 +13507,7 @@ EOF send_stats "원 스톱 튜닝 시작" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하십시오" + echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하세요" echo "------------------------------------------------" linux_clean @@ -13520,7 +13520,7 @@ EOF echo "------------------------------------------------" local new_port=5522 new_ssh_port - echo -e "[${gl_lv}OK${gl_bai}] 4/10. SSH 포트 번호를 설정하십시오${gl_huang}5522${gl_bai}" + 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. 모든 포트를 엽니 다" @@ -13530,7 +13530,7 @@ EOF echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. 시간대를 설정하십시오${gl_huang}상하이${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 7/10. 시간대를 다음으로 설정하세요.${gl_huang}상하이${gl_bai}" echo "------------------------------------------------" local country=$(curl -s ipinfo.io/country) @@ -13573,7 +13573,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하십시오" + send_stats "시스템을 다시 시작하세요" server_reboot ;; 100) @@ -13589,31 +13589,31 @@ EOF local status_message="无法确定的状态" fi - echo "개인 정보 및 보안" - echo "스크립트는 사용자 기능에 대한 데이터를 수집하고 스크립트 경험을 최적화하며보다 재미 있고 유용한 기능을 만듭니다." + echo "개인 정보 보호 및 보안" + echo "스크립트는 사용자의 기능 사용에 대한 데이터를 수집하고 스크립트 경험을 최적화하며 더 재미 있고 유용한 기능을 만듭니다." echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." echo "------------------------------------------------" - echo -e "현재 상태 :$status_message" + echo -e "현재 상태:$status_message" echo "--------------------" - echo "1. 수집을 켭니다" - echo "2. 컬렉션을 닫습니다" + echo "1. 수집 시작" + echo "2. 수집 종료" echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "--------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 "개인 정보 보호 및 보안 컬렉션이 활성화되었습니다" + 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 "컬렉션이 닫혔습니다" + echo "컬렉션이 닫혔습니다." send_stats "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" ;; *) @@ -13631,9 +13631,9 @@ EOF 102) clear send_stats "기술 라이온 스크립트를 제거하십시오" - echo "기술 라이온 스크립트를 제거하십시오" + echo "기술 사자 스크립트 제거" echo "------------------------------------------------" - echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." + echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." read -e -p "계속할거야? (Y/N) :" choice case "$choice" in @@ -13642,7 +13642,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "대본은 제거되었습니다." + echo "스크립트가 제거되었습니다. 안녕!" break_end clear exit @@ -13690,9 +13690,9 @@ linux_file() { ls --color=auto -x echo "------------------------" echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" - echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 복귀" + echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." echo "------------------------" - echo "11. 파일 만들기 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" + echo "11. 파일 생성 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" echo "15. 파일을 삭제하십시오" echo "------------------------" echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" @@ -13710,13 +13710,13 @@ linux_file() { ;; 2) # 创建目录 read -e -p "작성하려면 디렉토리 이름을 입력하십시오." dirname - mkdir -p "$dirname" && echo "디렉토리가 생성되었습니다" || echo "창조가 실패했습니다" - send_stats "디렉터리 생성" + mkdir -p "$dirname" && echo "디렉터리가 생성되었습니다." || echo "생성 실패" + send_stats "디렉토리를 만듭니다" ;; 3) # 修改目录权限 - read -e -p "디렉토리 이름을 입력하십시오 :" dirname - read -e -p "권한을 입력하십시오 (예 : 755) :" perm - chmod "$perm" "$dirname" && echo "권한이 수정되었습니다" || echo "수정이 실패했습니다" + read -e -p "디렉토리 이름을 입력하십시오:" dirname + read -e -p "권한을 입력하세요(예: 755):" perm + chmod "$perm" "$dirname" && echo "권한이 수정되었습니다." || echo "수정이 실패했습니다" send_stats "디렉토리 권한을 수정하십시오" ;; 4) # 重命名目录 @@ -13727,7 +13727,7 @@ linux_file() { ;; 5) # 删除目录 read -e -p "삭제할 디렉터리 이름을 입력하세요:" dirname - rm -rf "$dirname" && echo "디렉토리가 삭제되었습니다" || echo "삭제가 실패했습니다" + rm -rf "$dirname" && echo "디렉터리가 삭제되었습니다." || echo "삭제 실패" send_stats "디렉토리 삭제" ;; 6) # 返回上一级选单目录 @@ -13736,8 +13736,8 @@ linux_file() { ;; 11) # 创建文件 read -e -p "작성하려면 파일 이름을 입력하십시오." filename - touch "$filename" && echo "생성 된 파일" || echo "창조가 실패했습니다" - send_stats "파일을 만듭니다" + touch "$filename" && echo "생성 된 파일" || echo "생성 실패" + send_stats "파일 생성" ;; 12) # 编辑文件 read -e -p "편집 할 파일 이름을 입력하십시오." filename @@ -13748,22 +13748,22 @@ linux_file() { 13) # 修改文件权限 read -e -p "파일 이름을 입력하십시오 :" filename read -e -p "권한을 입력하십시오 (예 : 755) :" perm - chmod "$perm" "$filename" && echo "권한이 수정되었습니다" || echo "수정이 실패했습니다" + 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 "이름 바꾸지 실패했습니다" + 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 "삭제가 실패했습니다" + rm -f "$filename" && echo "파일이 삭제되었습니다" || echo "삭제 실패" send_stats "파일 삭제" ;; 21) # 压缩文件/目录 - read -e -p "압축 할 파일/디렉토리 이름을 입력하십시오." name + read -e -p "압축할 파일/디렉터리 이름을 입력하십시오:" name install tar tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축이 실패했습니다" send_stats "압축 파일/디렉토리" @@ -13772,80 +13772,80 @@ linux_file() { read -e -p "추출할 파일 이름(.tar.gz)을 입력하십시오:" filename install tar tar -xzvf "$filename" && echo "압축이 풀렸습니다.$filename" || echo "감압이 실패했습니다" - send_stats "압축 파일/디렉토리 해제" + send_stats "파일/디렉토리 압축 풀기" ;; 23) # 移动文件或目录 - read -e -p "이동하려면 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "이동할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리 이동 실패: 파일 또는 디렉터리가 존재하지 않습니다." + echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "대상 경로(새 파일 또는 디렉터리 이름 포함)를 입력하세요." dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." + echo "오류: 대상 경로를 입력하십시오." send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." continue fi - mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 이동했습니다$dest_path" || echo "파일이나 디렉토리를 이동하지 못했습니다" - send_stats "파일 또는 디렉토리를 이동하십시오" + mv "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 다음으로 이동되었습니다.$dest_path" || echo "파일 또는 디렉터리를 이동하지 못했습니다." + send_stats "파일 또는 디렉터리 이동" ;; 24) # 复制文件目录 - read -e -p "복사 할 파일 또는 디렉토리 경로를 입력하십시오." src_path + read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then - echo "오류 : 파일 또는 디렉토리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 복사하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." continue fi - read -e -p "대상 경로를 입력하십시오 (새 파일 이름 또는 디렉토리 이름 포함) :" dest_path + read -e -p "대상 경로(새 파일 또는 디렉터리 이름 포함)를 입력하세요." dest_path if [ -z "$dest_path" ]; then echo "오류 : 대상 경로를 입력하십시오." - send_stats "파일 또는 디렉토리 복사에 실패 : 지정되지 않은 대상 경로" + send_stats "파일 또는 디렉터리 복사 실패: 대상 경로가 지정되지 않았습니다." continue fi - # -r 옵션을 사용하여 디렉토리를 재귀 적으로 복사하십시오 - cp -r "$src_path" "$dest_path" && echo "파일 또는 디렉토리가 복사되었습니다$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사합니다" + # 디렉토리를 반복적으로 복사하려면 -r 옵션을 사용하십시오. + cp -r "$src_path" "$dest_path" && echo "복사된 파일 또는 디렉터리$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" + send_stats "파일 또는 디렉토리를 복사하십시오" ;; 25) # 传送文件至远端服务器 - read -e -p "전송할 파일 경로를 입력하십시오." file_to_transfer + read -e -p "전송할 파일 경로를 입력하십시오:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then echo "오류 : 파일이 존재하지 않습니다." - send_stats "파일을 전송하지 못했습니다 : 파일이 존재하지 않습니다." + send_stats "파일 전송 실패: 파일이 존재하지 않습니다." continue fi read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip if [ -z "$remote_ip" ]; then - echo "오류 : 원격 서버 IP를 입력하십시오." - send_stats "파일 전송 실패: 원격 서버 IP가 입력되지 않았습니다." + echo "오류: 원격 서버 IP를 입력하세요." + send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" continue fi read -e -p "원격 서버 사용자 이름(기본 루트)을 입력하십시오:" remote_user remote_user=${remote_user:-root} - read -e -p "원격 서버 비밀번호를 입력하십시오 :" -s remote_password + read -e -p "원격 서버 비밀번호를 입력하세요:" -s remote_password echo if [ -z "$remote_password" ]; then echo "오류: 원격 서버 비밀번호를 입력하세요." - send_stats "파일 전송 실패 : 원격 서버 비밀번호를 입력하지 않았습니다" + 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 # 等待时间 @@ -13859,7 +13859,7 @@ EOF send_stats "파일 전송이 성공적으로 전송됩니다" else echo "파일 전송이 실패했습니다." - send_stats "파일 전송이 실패했습니다" + send_stats "파일 전송 실패" fi break_end @@ -13872,7 +13872,7 @@ EOF break ;; *) # 处理无效输入 - echo "유효하지 않은 선택, 다시 입력하십시오" + echo "선택이 잘못되었습니다. 다시 입력해 주세요." send_stats "잘못된 선택" ;; esac @@ -13902,7 +13902,7 @@ run_commands_on_servers() { # 추출 된 정보를 배열로 변환합니다 IFS=$'\n' read -r -d '' -a SERVER_ARRAY <<< "$SERVERS" - # 서버를 통해 반복하고 명령을 실행하십시오 + # 서버를 탐색하고 명령을 실행합니다. for ((i=0; i<${#SERVER_ARRAY[@]}; i+=5)); do local name=${SERVER_ARRAY[i]} local hostname=${SERVER_ARRAY[i+1]} @@ -13910,7 +13910,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}연결하십시오$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}연결 대상$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -13939,12 +13939,12 @@ while true; do 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}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}Docker를 설치하십시오${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}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}" @@ -13953,13 +13953,13 @@ while true; do case $sub_choice in 1) send_stats "클러스터 서버를 추가하십시오" - read -e -p "서버 이름 :" server_name - read -e -p "서버 IP:" server_ip + 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 + read -e -p "서버 사용자 이름(루트):" server_username local server_username=${server_username:-root} - read -e -p "서버 사용자 비밀번호 :" server_password + 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 @@ -13970,7 +13970,7 @@ while true; do sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) - send_stats "클러스터 서버를 편집합니다" + send_stats "클러스터 서버 편집" install nano nano ~/cluster/servers.py ;; @@ -13978,7 +13978,7 @@ while true; do 4) clear send_stats "백업 클러스터" - echo -e "바꿔주세요${gl_huang}/root/cluster/servers.py${gl_bai}파일을 다운로드하고 백업을 완료하십시오!" + echo -e "제발${gl_huang}/root/cluster/servers.py${gl_bai}파일을 다운로드하고 백업을 완료하세요!" break_end ;; @@ -13986,7 +13986,7 @@ while true; do clear send_stats "클러스터를 복원하십시오" echo "servers.py를 업로드하고 키를 눌러 업로드를 시작하십시오!" - echo -e "업로드하십시오${gl_huang}servers.py${gl_bai}파일로${gl_huang}/root/cluster/${gl_bai}복원을 완료하십시오!" + echo -e "업로드해주세요${gl_huang}servers.py${gl_bai}파일로${gl_huang}/root/cluster/${gl_bai}복원 완료!" break_end ;; @@ -14018,7 +14018,7 @@ while true; do 51) send_stats "명령 실행을 사용자 정의하십시오" - read -e -p "배치 실행 명령을 입력하십시오." mingling + read -e -p "일괄 실행을 위한 명령을 입력하십시오:" mingling run_commands_on_servers "${mingling}" ;; @@ -14036,48 +14036,48 @@ done kejilion_Affiliates() { clear -send_stats "광고 칼럼" -echo "광고 열" +send_stats "광고 열" +echo "광고 칼럼" echo "------------------------" echo "사용자에게 더욱 간단하고 우아한 프로모션 및 구매 경험을 제공할 것입니다!" echo "" -echo -e "서버 제안" +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 -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 -e "${gl_bai}URL: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" echo "------------------------" -echo -e "${gl_zi}Hostinger 52.7 달러 미국 1 코어 4G 메모리 50G 하드 드라이브 4T 트래픽 월${gl_bai}" -echo -e "${gl_bai}웹 사이트 : https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-8ab010ef94f?_ga=ga1.3.942352702.1711283207${gl_bai}" +echo -e "${gl_zi}Hostinger 연간 $52.7 미국 1 코어 4G 메모리 50G 하드 드라이브 월별 4T 트래픽${gl_bai}" +echo -e "${gl_bai}URL: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${gl_bai}" echo "------------------------" -echo -e "${gl_huang}Brickworker, 분기당 $ 49, 미국 CN2GIA, 일본 소프트 뱅크, 2 코어, 1G 메모리, 20G 하드 드라이브, 월 1 일 트래픽${gl_bai}" -echo -e "${gl_bai}웹 사이트 : https://bandwagonhost.com/aff.php?aff=69004&pid=87${gl_bai}" +echo -e "${gl_huang}벽돌공 분기당 49달러 미국 CN2GIA 일본 SoftBank 2코어 1G 메모리 20G 하드 드라이브 월 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 코어 2G 메모리 20G 하드 드라이브 800G 월에 트래픽${gl_bai}" +echo -e "${gl_lan}DMIT 분기당 $28 US CN2GIA 1 코어 2G 메모리 20G 하드 드라이브 월별 800G 트래픽${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 월 월 $ 6.9 도쿄 소프트 뱅크 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 -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 -e "${gl_bai}웹사이트: https://www.gname.com/register?tt=86836&ttcode=KEJILION86836&ttbj=sh${gl_bai}" echo "------------------------" echo "" -echo -e "주변 기술 사자" +echo -e "기술 사자 주변기기" echo "------------------------" -echo -e "${gl_kjlan}B 스테이션 :${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 -e "${gl_kjlan}B 스테이션 :${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 -e "${gl_kjlan}스크립트 공식 웹 사이트 :${gl_bai}https://kejilion.sh ${gl_kjlan}Github 주소 :${gl_bai}https://github.com/kejilion/sh${gl_bai}" +echo -e "${gl_kjlan}스크립트 공식 웹사이트:${gl_bai}https://kejilion.sh ${gl_kjlan}GitHub 주소:${gl_bai}https://github.com/kejilion/sh${gl_bai}" echo "------------------------" echo "" } @@ -14092,9 +14092,9 @@ send_stats "스크립트 업데이트" cd ~ while true; do clear - echo "로그 업데이트" + echo "변경 로그" echo "------------------------" - echo "모든 로그 :${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt" + 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 @@ -14102,7 +14102,7 @@ while true; do if [ "$sh_v" = "$sh_v_new" ]; then echo -e "${gl_lv}당신은 이미 최신 버전입니다!${gl_huang}v$sh_v${gl_bai}" - send_stats "스크립트가 이미 최신 상태이므로 업데이트할 필요가 없습니다." + send_stats "스크립트는 최신 상태이며 업데이트가 필요하지 않습니다." else echo "새 버전을 발견하십시오!" echo -e "현재 버전 v$sh_v최신 버전${gl_huang}v$sh_v_new${gl_bai}" @@ -14114,7 +14114,7 @@ while true; do if [ -n "$existing_cron" ]; then echo "------------------------" - echo -e "${gl_lv}자동 업데이트가 활성화되고 스크립트는 매일 오전 2시에 자동으로 업데이트됩니다!${gl_bai}" + echo -e "${gl_lv}자동 업데이트가 켜져 있고 매일 새벽 2시에 스크립트가 자동으로 업데이트됩니다!${gl_bai}" fi echo "------------------------" @@ -14137,7 +14137,7 @@ while true; do 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" + send_stats "스크립트가 최신 상태입니다.$sh_v_new" break_end ~/kejilion.sh exit @@ -14157,15 +14157,15 @@ while true; do (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 "자동 스크립트 업데이트를 켜십시오" + 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 "스크립트 자동 업데이트를 닫습니다" + send_stats "자동 스크립트 업데이트 끄기" break_end ;; *) @@ -14187,8 +14187,8 @@ echo -e "${gl_kjlan}" echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" -echo -e "기술 라이온 스크립트 도구 상자 v$sh_v" -echo -e "명령 줄 입력${gl_huang}k${gl_kjlan}스크립트를 신속하게 시작하십시오${gl_bai}" +echo -e "기술 사자 스크립트 도구 상자 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}시스템 업데이트" @@ -14197,20 +14197,20 @@ 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}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}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}15. ${gl_bai}광고 칼럼" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu 서버 오프닝 스크립트" +echo -e "${gl_kjlan}p. ${gl_bai}Eudemons Parlu 서버 오픈 스크립트" 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}0. ${gl_bai}스크립트 종료" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "선택을 입력하십시오 :" choice @@ -14232,7 +14232,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; cd ~ + p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; cd ~ curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh exit ;; @@ -14248,56 +14248,56 @@ done k_info() { send_stats "K 명령 참조 사용 사례" echo "-------------------" -echo "비디오 소개 : https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "다음은 K 명령 참조 유스 케이스입니다." -echo "시작 스크립트 k" +echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" +echo "다음은 k 명령의 참조 사용 사례입니다." +echo "스크립트 시작 k" echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" echo "시스템 k 업데이트 업데이트 | k 업데이트" -echo "깨끗한 시스템 쓰레기 K Clean | K 청소" -echo "시스템 패널 k dd |를 다시 설치하십시오 K 재설치" -echo "BBR3 제어판 K BBR3 | K bbrv3" -echo "커널 튜닝 패널 K nhyh | K 커널 최적화" -echo "가상 메모리 K 스왑 2048을 설정하십시오" -echo "가상 시간대 k 시간 아시아/상하이 설정 | k 시내 아시아/상하이" -echo "시스템 재활용 빈 K 쓰레기 | K hsz | K 재활용 빈" -echo "시스템 백업 기능 K 백업 | K bf | K 백업" -echo "SSH 원격 연결 도구 K SSH | K 원격 연결" +echo "클린 시스템 정크 k 클린 | 케이 깨끗하다" +echo "시스템 패널을 다시 설치하십시오. k dd | k 다시 설치하다" +echo "bbr3 제어판 k bbr3 | kbbrv3" +echo "커널 튜닝 패널 k nhyh | k 커널 최적화" +echo "가상 메모리 k 스왑 2048 설정" +echo "가상 시간대 설정 k 시간 아시아/상하이 | k 시간대 아시아/상하이" +echo "시스템 휴지통 k 쓰레기 | khsz | k 휴지통" +echo "시스템 백업 기능 k 백업 | k bf | k 백업" +echo "SSH 원격 연결 도구 k SSH | k 원격 연결" echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" echo "인트라넷 침투 (서버 측) K frps" echo "인트라넷 침투 (클라이언트) K frpc" -echo "소프트웨어 시작 K 시작 SSHD | K 시작 SSHD" -echo "소프트웨어 중지 K 중지 SSHD | K 중지 SSHD" -echo "소프트웨어 재시작 K 재시작 SSHD | K는 sshd를 다시 시작합니다" -echo "소프트웨어 상태보기 K 상태 SSHD | K 상태 SSHD" -echo "소프트웨어 부트 K 활성화 Docker | K autostart docke | K 스타트 업 Docker" -echo "도메인 이름 인증서 응용 프로그램 K SSL" +echo "소프트웨어 시작 k start sshd | k sshd를 시작하세요" +echo "소프트웨어 중지 k 중지 sshd | k sshd 중지" +echo "소프트웨어 재시작 k 재시작 sshd | k sshd를 다시 시작하세요" +echo "소프트웨어 상태 확인 k status sshd | k 상태 sshd" +echo "k 도커 활성화 | k 자동 시작 도커 | k 소프트웨어를 부팅할 때 도커를 활성화합니다." +echo "도메인 이름 인증서 신청 k SSL" echo "도메인 이름 인증서 만료 쿼리 k SSL ps" echo "Docker Management Plane K Docker" echo "도커 환경 설치 K 도커 설치 | K 도커 설치" -echo "도커 컨테이너 관리 K 도커 PS | K 도커 컨테이너" +echo "도커 컨테이너 관리 k 도커 ps |k 도커 컨테이너" echo "Docker Image Management K Docker img | K Docker Image" echo "LDNMP 사이트 관리 K 웹" echo "LDNMP 캐시 정리 k 웹 캐시" -echo "WordPress k wp | K WordPress | k wp xxx.com을 설치하십시오" +echo "WordPress k wp 설치 | k 워드프레스 | k wp xxx.com" echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." -echo "로드 밸런싱 k loadbalance | k로드 밸런싱을 설치하십시오" +echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "방화벽 패널 K FHQ | K 방화벽" -echo "포트 k dkdk 8080 | k 오픈 포트 8080" +echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" echo "앱 시장 관리 K 앱" -echo "응용 프로그램 번호 빠른 관리 K 앱 26 | K app 1panel | K app npm" +echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "디스플레이 시스템 정보 K 정보" } if [ "$#" -eq 0 ]; then - # 매개 변수가없는 경우 대화식 로직을 실행하십시오 + # 인수 없이 대화형 논리를 실행합니다. kejilion_sh else # 매개 변수가있는 경우 해당 함수를 실행하십시오 @@ -14309,7 +14309,7 @@ else ;; remove|del|uninstall|卸载) shift - send_stats "소프트웨어를 제거하십시오" + send_stats "소프트웨어 제거" remove "$@" ;; update|更新) @@ -14343,7 +14343,7 @@ else rsync_run) shift - send_stats "시간이 정한 RSYNC 동기화" + send_stats "예약된 rsync 동기화" run_task "$@" ;; @@ -14362,7 +14362,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "IP+포트가 서비스 접근을 차단했습니다." else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14375,7 +14375,7 @@ else swap) shift - send_stats "가상 메모리를 신속하게 설정했습니다" + send_stats "가상 메모리를 빠르게 설정하세요" add_swap "$@" ;; @@ -14429,7 +14429,7 @@ else status|状态) shift - send_stats "소프트웨어 상태보기" + send_stats "소프트웨어 상태 확인" status "$@" ;; start|启动) @@ -14439,7 +14439,7 @@ else ;; stop|停止) shift - send_stats "소프트웨어 일시 정지" + send_stats "소프트웨어 일시 중지" stop "$@" ;; restart|重启) @@ -14450,21 +14450,21 @@ else enable|autostart|开机启动) shift - send_stats "소프트웨어 부츠" + send_stats "부팅 시 소프트웨어가 자동으로 시작됩니다." enable "$@" ;; ssl) shift if [ "$1" = "ps" ]; then - send_stats "인증서 상태를 확인하십시오" + send_stats "인증서 상태 보기" ssl_ps elif [ -z "$1" ]; then add_ssl - send_stats "인증서를 신속하게 신청하십시오" + send_stats "빨리 자격증 신청하세요" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "인증서를 신속하게 신청하십시오" + send_stats "빨리 자격증 신청하세요" else k_info fi @@ -14474,7 +14474,7 @@ else shift case $1 in install|安装) - send_stats "Docker를 신속하게 설치하십시오" + send_stats "도커를 빠르게 설치하세요" install_docker ;; ps|容器) @@ -14482,7 +14482,7 @@ else docker_ps ;; img|镜像) - send_stats "빠른 미러 관리" + send_stats "빠른 이미지 관리" docker_image ;; *) @@ -14509,7 +14509,7 @@ else app) shift - send_stats "$@ 적용" + send_stats "신청$@" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index aadf4d9c8..56f7acff1 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -12138,7 +12138,7 @@ while true; do - 102) + 102|vocechat) local app_id="102" local docker_name="vocechat-server" From fb25422c4ba5d66c6dc562f851beedf7f2b03866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:02:20 +0800 Subject: [PATCH 264/553] Update kejilion.sh --- kejilion.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3c72a1e49..e65a52b25 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.8" +sh_v="4.1.9" gl_hui='\e[37m' @@ -3372,7 +3372,7 @@ ldnmp_web_status() { echo "" echo "操作" echo "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "1. 申请/更新域名证书 2. 克隆站点域名" echo "3. 清理站点缓存 4. 创建关联站点" echo "5. 查看访问日志 6. 查看错误日志" echo "7. 编辑全局配置 8. 编辑站点配置" @@ -3395,8 +3395,7 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + send_stats "克隆站点域名" read -e -p "请输入旧域名: " oddyuming read -e -p "请输入新域名: " yuming install_certbot @@ -3410,7 +3409,7 @@ ldnmp_web_status() { 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;" + # 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 }') @@ -3422,16 +3421,16 @@ ldnmp_web_status() { done # 网站目录替换 - mv /home/web/html/$oddyuming /home/web/html/$yuming + cp /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 + cp /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 + # rm /home/web/certs/${oddyuming}_key.pem + # rm /home/web/certs/${oddyuming}_cert.pem docker exec nginx nginx -s reload From ae1c7dcab5847091572a25468b8977a7e0ed53a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:03:13 +0800 Subject: [PATCH 265/553] Update kejilion.sh --- cn/kejilion.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 67745a43f..60d57f928 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.8" +sh_v="4.1.9" gl_hui='\e[37m' @@ -3372,7 +3372,7 @@ ldnmp_web_status() { echo "" echo "操作" echo "------------------------" - echo "1. 申请/更新域名证书 2. 更换站点域名" + echo "1. 申请/更新域名证书 2. 克隆站点域名" echo "3. 清理站点缓存 4. 创建关联站点" echo "5. 查看访问日志 6. 查看错误日志" echo "7. 编辑全局配置 8. 编辑站点配置" @@ -3395,8 +3395,7 @@ ldnmp_web_status() { ;; 2) - send_stats "更换站点域名" - echo -e "${gl_hong}强烈建议: ${gl_bai}先备份好全站数据再更换站点域名!" + send_stats "克隆站点域名" read -e -p "请输入旧域名: " oddyuming read -e -p "请输入新域名: " yuming install_certbot @@ -3410,7 +3409,7 @@ ldnmp_web_status() { 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;" + # 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 }') @@ -3422,16 +3421,16 @@ ldnmp_web_status() { done # 网站目录替换 - mv /home/web/html/$oddyuming /home/web/html/$yuming + cp /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 + cp /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 + # rm /home/web/certs/${oddyuming}_key.pem + # rm /home/web/certs/${oddyuming}_cert.pem docker exec nginx nginx -s reload From 5bef45b176ad58d3701adf26c2a979649f3c708e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:05:04 +0800 Subject: [PATCH 266/553] Update changelog for version 4.1.9 --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index a1a777973..53f79e83f 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1321,4 +1321,7 @@ k快捷命令增加了 k info 系统信息快速查询。 应用市场FileCodeBox文件快递增加管理员入口的提示路径与密码。 应用市场新增了VoceChat多人聊天系统的安装及使用。 ------------------------ +2025-10-09 v4.1.9 +LDNMP建站中将更换站点域名功能调整成克隆站点功能,这样可以保留老站点,让用户自己处决。 +------------------------ From f3d57de13fbbe5139f89cdbe77cd988c0466e0a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:34:20 +0800 Subject: [PATCH 267/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 60d57f928..aa8f1a0dc 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3421,7 +3421,7 @@ ldnmp_web_status() { done # 网站目录替换 - cp /home/web/html/$oddyuming /home/web/html/$yuming + cp -r /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" {} + From dcaab6563ae2b1b28dae9308edbf749760e95958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:35:22 +0800 Subject: [PATCH 268/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index e65a52b25..f730e01bf 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3421,7 +3421,7 @@ ldnmp_web_status() { done # 网站目录替换 - cp /home/web/html/$oddyuming /home/web/html/$yuming + cp -r /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" {} + From 849384f446dc1d25afb6f06f26dfc4c64f0c6a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:01:37 +0800 Subject: [PATCH 269/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index aa8f1a0dc..12dfbc6b6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3432,7 +3432,7 @@ ldnmp_web_status() { # rm /home/web/certs/${oddyuming}_key.pem # rm /home/web/certs/${oddyuming}_cert.pem - docker exec nginx nginx -s reload + cd /home/web && docker compose restart ;; From eee11cfa421f2fc436e737bdf49b219ecfd7fffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:02:07 +0800 Subject: [PATCH 270/553] Change Nginx reload to Docker Compose restart --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index f730e01bf..7d85d67aa 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3432,7 +3432,7 @@ ldnmp_web_status() { # rm /home/web/certs/${oddyuming}_key.pem # rm /home/web/certs/${oddyuming}_cert.pem - docker exec nginx nginx -s reload + cd /home/web && docker compose restart ;; From d66b82d50227a19eb4c02c5ab17b72260d2d26f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 14:13:03 +0800 Subject: [PATCH 271/553] Update kejilion.sh --- cn/kejilion.sh | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 12dfbc6b6..76e3736cf 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3376,7 +3376,7 @@ ldnmp_web_status() { echo "3. 清理站点缓存 4. 创建关联站点" echo "5. 查看访问日志 6. 查看错误日志" echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" echo "20. 删除指定站点数据" echo "------------------------" @@ -8873,6 +8873,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" + echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12164,6 +12165,47 @@ while true; do ;; + 103|umami) + local app_id="103" + local app_name="Umami网站统计工具" + local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" + local app_url="官方网站: https://github.com/umami-software/umami" + local docker_name="umami-umami-1" + local docker_port="8103" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + echo "初始用户名: admin" + echo "初始密码: umami" + } + + docker_app_update() { + cd /home/docker/umami/ && docker compose down --rmi all + cd /home/docker/umami/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml + cd /home/docker/umami/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/umami/ && docker compose down --rmi all + rm -rf /home/docker/umami + echo "应用已卸载" + } + + docker_app_plus + + ;; + + b) clear From 62d88502c94cf8c741c7e0745e92303c54d84924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 14:13:35 +0800 Subject: [PATCH 272/553] Implement Umami website analytics tool management Added Umami website analytics tool installation, update, and uninstall functions. --- kejilion.sh | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 7d85d67aa..4b835c421 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3376,7 +3376,7 @@ ldnmp_web_status() { echo "3. 清理站点缓存 4. 创建关联站点" echo "5. 查看访问日志 6. 查看错误日志" echo "7. 编辑全局配置 8. 编辑站点配置" - echo "9. 管理站点数据库 10. 查看站点分析报告" + echo "9. 管理站点数据库 10. 查看站点分析报告" echo "------------------------" echo "20. 删除指定站点数据" echo "------------------------" @@ -8873,6 +8873,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" + echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12164,6 +12165,47 @@ while true; do ;; + 103|umami) + local app_id="103" + local app_name="Umami网站统计工具" + local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" + local app_url="官方网站: https://github.com/umami-software/umami" + local docker_name="umami-umami-1" + local docker_port="8103" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + echo "初始用户名: admin" + echo "初始密码: umami" + } + + docker_app_update() { + cd /home/docker/umami/ && docker compose down --rmi all + cd /home/docker/umami/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml + cd /home/docker/umami/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/umami/ && docker compose down --rmi all + rm -rf /home/docker/umami + echo "应用已卸载" + } + + docker_app_plus + + ;; + + b) clear From c20df5383c0620e7de62bd404fe801cf93c1ce75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 9 Oct 2025 14:14:31 +0800 Subject: [PATCH 273/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 53f79e83f..d24b25ed2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1323,5 +1323,6 @@ k快捷命令增加了 k info 系统信息快速查询。 ------------------------ 2025-10-09 v4.1.9 LDNMP建站中将更换站点域名功能调整成克隆站点功能,这样可以保留老站点,让用户自己处决。 +应用市场新增了Umami网站统计工具的安装及使用。 ------------------------ From f1766439178d786ba7bdeaf5c1c7fb9487e5e09d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 12 Oct 2025 04:18:43 +0000 Subject: [PATCH 274/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-12=2004:18:43?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 1293 ++++++++++++++------------- jp/kejilion.sh | 2287 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2229 +++++++++++++++++++++++----------------------- tw/kejilion.sh | 63 +- 4 files changed, 3018 insertions(+), 2854 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index f8bf8ecbd..305b75111 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.8" +sh_v="4.1.9" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# Define a function to execute commands +# Define a function to execute the command run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -59,7 +59,7 @@ CheckFirstRun_true() { # This function collects function buried information and records the current script version number, usage time, system version, CPU architecture, machine country and function name used by the user. It does not involve any sensitive information, so don’t worry! Please believe me! # Why is this function designed? The purpose is to better understand the functions that users like to use, and to further optimize the functions and launch more functions that meet user needs. -# For the full text, you can search for the send_stats function call location, transparent and open source, and you can refuse to use it if you have any concerns. +# The full text can be searched for the send_stats function call location. It is transparent and open source. If you have any concerns, you can refuse to use it. @@ -114,7 +114,7 @@ CheckFirstRun_false() { # Prompt user to agree to terms UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Welcome to the Tech lion script toolbox${gl_bai}" + echo -e "${gl_kjlan}Welcome to the technology lion script toolbox${gl_bai}" echo "When using the script for the first time, please read and agree to the User License Agreement." echo "User License Agreement: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" @@ -170,7 +170,7 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "Package parameters are not provided!" + echo "No package parameters provided!" return 1 fi @@ -222,9 +222,9 @@ check_disk_space() { if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}hint:${gl_bai}Not enough disk space!" echo "Current available space: $((available_space_mb/1024))G" - echo "Minimum demand space:${required_gb}G" - echo "The installation cannot be continued. Please clean the disk space and try again." - send_stats "Insufficient disk space" + echo "Minimum required space:${required_gb}G" + echo "The installation cannot continue. Please clear the disk space and try again." + send_stats "Not enough disk space" break_end kejilion fi @@ -238,7 +238,7 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "Package parameters are not provided!" + echo "No package parameters provided!" return 1 fi @@ -281,7 +281,7 @@ systemctl() { } -# Restart the service +# Restart service restart() { systemctl restart "$1" if [ $? -eq 0 ]; then @@ -315,9 +315,9 @@ stop() { status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1The service status is displayed." + echo "$1Service status is shown." else - echo "Error: Unable to display$1Service status." + echo "Error: cannot be displayed$1Service status." fi } @@ -522,21 +522,21 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) send_stats "Create a new container" - read -e -p "Please enter the creation command:" dockername + read -e -p "Please enter the create command:" dockername $dockername ;; 2) send_stats "Start the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + read -e -p "Please enter the container name (please separate multiple container names with spaces):" dockername docker start $dockername ;; 3) - send_stats "Stop the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + send_stats "Stop specified container" + read -e -p "Please enter the container name (please separate multiple container names with spaces):" dockername docker stop $dockername ;; 4) @@ -546,7 +546,7 @@ while true; do ;; 5) send_stats "Restart the specified container" - read -e -p "Please enter the container name (multiple container names separated by spaces):" dockername + read -e -p "Please enter the container name (please separate multiple container names with spaces):" dockername docker restart $dockername ;; 6) @@ -653,11 +653,11 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) send_stats "Pull image" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + read -e -p "Please enter the image name (please separate multiple image names with spaces):" imagenames for name in $imagenames; do echo -e "${gl_huang}Obtaining image:$name${gl_bai}" docker pull $name @@ -665,15 +665,15 @@ while true; do ;; 2) send_stats "Update image" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + read -e -p "Please enter the image name (please separate multiple image names with spaces):" imagenames for name in $imagenames; do echo -e "${gl_huang}Updating image:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "Delete the mirror" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + send_stats "Delete image" + read -e -p "Please enter the image name (please separate multiple image names with spaces):" imagenames for name in $imagenames; do docker rmi -f $name done @@ -761,7 +761,7 @@ install_crontab() { ;; esac else - echo "The operating system cannot be determined." + echo "Unable to determine operating system." return fi @@ -777,7 +777,7 @@ docker_ipv6_on() { local CONFIG_FILE="/etc/docker/daemon.json" local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}' - # Check if the configuration file exists, create the file and write the default settings if it does not exist + # Check if the configuration file exists, if not create the file and write the default settings if [ ! -f "$CONFIG_FILE" ]; then echo "$REQUIRED_IPV6_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -785,7 +785,7 @@ docker_ipv6_on() { # Use jq to handle configuration file updates local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # Check whether the current configuration already has ipv6 settings + # Check if the current configuration already has ipv6 settings local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') # Update configuration and enable IPv6 @@ -814,7 +814,7 @@ docker_ipv6_off() { # Check if the configuration file exists if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}The configuration file does not exist${gl_bai}" + echo -e "${gl_hong}Configuration file does not exist${gl_bai}" return fi @@ -827,7 +827,7 @@ docker_ipv6_off() { # Check current ipv6 status local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false') - # Comparing original configuration with new configuration + # Compare original configuration to new configuration if [[ "$CURRENT_IPV6" == "false" ]]; then echo -e "${gl_huang}IPv6 access is currently closed${gl_bai}" else @@ -883,7 +883,7 @@ open_port() { iptables -D INPUT -p tcp --dport $port -j DROP 2>/dev/null iptables -D INPUT -p udp --dport $port -j DROP 2>/dev/null - # Add Open Rules + # Add open rule 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 @@ -895,7 +895,7 @@ open_port() { done save_iptables_rules - send_stats "The port has been opened" + send_stats "Port opened" } @@ -950,7 +950,7 @@ allow_ip() { # Delete existing blocking rules iptables -D INPUT -s $ip -j DROP 2>/dev/null - # Add allow rules + # Add allow rule if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT echo "Released IP$ip" @@ -974,7 +974,7 @@ block_ip() { # Delete existing allow rules iptables -D INPUT -s $ip -j ACCEPT 2>/dev/null - # Add blocking rules + # Add blocking rule if ! iptables -C INPUT -s $ip -j DROP 2>/dev/null; then iptables -I INPUT 1 -s $ip -j DROP echo "IP blocked$ip" @@ -1005,7 +1005,7 @@ enable_ddos_defense() { send_stats "Turn on DDoS defense" } -# Turn off DDoS Defense +# Turn off DDoS defense disable_ddos_defense() { # Turn off DDoS protection iptables -D DOCKER-USER -p tcp --syn -m limit --limit 500/s --limit-burst 100 -j ACCEPT 2>/dev/null @@ -1086,7 +1086,7 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "Successfully lifted$country_codeIP address restrictions" + echo "Removed successfully$country_codeIP address restrictions" ;; *) @@ -1111,12 +1111,12 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "Advanced Firewall Management" + echo "Advanced firewall management" send_stats "Advanced firewall management" echo "------------------------" iptables -L INPUT echo "" - echo "Firewall Management" + echo "Firewall management" echo "------------------------" echo "1. Open the designated port 2. Close the designated port" echo "3. Open all ports 4. Close all ports" @@ -1126,14 +1126,14 @@ iptables_panel() { echo "------------------------" echo "11. Allow PING 12. Disable PING" echo "------------------------" - echo "13. Start DDOS Defense 14. Turn off DDOS Defense" + echo "13. Start DDOS defense 14. Turn off DDOS defense" echo "------------------------" - echo "15. Block specified country IP 16. Only specified country IPs are allowed" - echo "17. Release IP restrictions in designated countries" + echo "15. Block specified country IPs 16. Allow only specified country IPs" + echo "17. Lift IP restrictions in designated countries" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) read -e -p "Please enter the open port number:" o_port @@ -1143,7 +1143,7 @@ iptables_panel() { 2) read -e -p "Please enter the closed port number:" c_port close_port $c_port - send_stats "Close the specified port" + send_stats "Close specified port" ;; 3) # Open all ports @@ -1185,16 +1185,16 @@ iptables_panel() { ;; 6) # IP blacklist - read -e -p "Please enter the blocked IP or IP segment:" c_ip + read -e -p "Please enter the blocked IP or IP range:" c_ip block_ip $c_ip ;; 7) - # Clear the specified IP + # Clear specified IP read -e -p "Please enter the cleared 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 "Clear the specified IP" + send_stats "Clear specified IP" ;; 11) # Allow PING @@ -1218,9 +1218,9 @@ iptables_panel() { ;; 15) - read -e -p "Please enter the blocked country code (multiple country codes can be separated by spaces such as CN US JP):" country_code + read -e -p "Please enter the blocked country code (multiple country codes can be separated by spaces, such as CN US JP):" country_code manage_country_rules block $country_code - send_stats "Allowed countries$country_codeIP" + send_stats "allow countries$country_codeIP" ;; 16) read -e -p "Please enter the allowed country codes (multiple country codes can be separated by spaces, such as CN US JP):" country_code @@ -1231,7 +1231,7 @@ iptables_panel() { 17) read -e -p "Please enter the cleared country code (multiple country codes can be separated by spaces, such as CN US JP):" country_code manage_country_rules unblock $country_code - send_stats "Clear the country$country_codeIP" + send_stats "clear country$country_codeIP" ;; *) @@ -1260,7 +1260,7 @@ add_swap() { mkswap -f "$partition" done - # Make sure /swapfile is no longer used + # Make sure /swapfile is no longer in use swapoff /swapfile # Delete old /swapfile @@ -1281,7 +1281,7 @@ add_swap() { rc-update add local fi - echo -e "The virtual memory size has been resized to${gl_huang}${new_swap}${gl_bai}M" + echo -e "The virtual memory size has been adjusted to${gl_huang}${new_swap}${gl_bai}M" } @@ -1321,7 +1321,7 @@ ldnmp_v() { 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}" - # Get the redis version + # Get redis version 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}" @@ -1392,7 +1392,7 @@ install_ldnmp() { clear - echo "LDNMP environment has been installed" + echo "The LDNMP environment is installed" echo "------------------------" ldnmp_v @@ -1409,7 +1409,7 @@ install_certbot() { 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 "Renewal task has been updated" + echo "The renewal task has been updated" } @@ -1519,13 +1519,13 @@ certs_status() { local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" if [ -f "$file_path" ]; then - send_stats "Successful application for domain name certificate" + send_stats "Domain name certificate application successful" else send_stats "Domain name certificate application failed" echo -e "${gl_hong}Notice:${gl_bai}Certificate application failed, please check the following possible reasons and try again:" echo -e "1. Domain name is spelled incorrectly ➠ Please check whether the domain name is entered correctly" echo -e "2. DNS resolution problem ➠ Confirm that the domain name has been correctly resolved to the server IP" - echo -e "3. Network configuration issues ➠ If you use Cloudflare Warp and other virtual networks, please temporarily shut down" + echo -e "3. Network configuration issues ➠ If you use virtual networks such as Cloudflare Warp, please temporarily shut down" echo -e "4. Firewall restrictions ➠ Check whether port 80/443 is open and ensure that it is accessible" echo -e "5. The number of applications exceeds the limit ➠ Let's Encrypt has a weekly limit (5 times/domain name/week)" echo -e "6. Domestic registration restrictions ➠ For mainland China environment, please confirm whether the domain name is registered" @@ -1551,7 +1551,7 @@ fi add_yuming() { ip_address - echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}" read -e -p "Please enter your IP or resolved domain name:" yuming } @@ -1652,15 +1652,15 @@ cf_purge_cache() { # Check if the configuration file exists if [ -f "$CONFIG_FILE" ]; then - # Read API_TOKEN and zone_id from configuration files + # Read API_TOKEN and zone_id from configuration file read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # Convert ZONE_IDS to an array + # Convert ZONE_IDS to array ZONE_IDS=($ZONE_IDS) else - # Prompt the user whether to clean the cache + # Prompt user whether to clear cache read -e -p "Need to clear Cloudflare's cache? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF information is saved in$CONFIG_FILE, you can modify the CF information later" + echo "CF information is stored in$CONFIG_FILE, you can modify the CF information later" read -e -p "Please enter your API_TOKEN:" API_TOKEN read -e -p "Please enter your CF username:" EMAIL read -e -p "Please enter zone_id (separate multiple with spaces):" -a ZONE_IDS @@ -1680,7 +1680,7 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "The cache clear request has been sent." + echo "Cache clearing request has been sent." } @@ -1717,7 +1717,7 @@ web_del() { dbrootpasswd=$(grep -oP 'MYSQL_ROOT_PASSWORD:\s*\K.*' /home/web/docker-compose.yml | tr -d '[:space:]') # Check whether the database exists before deleting it to avoid errors. - echo "Deleting the database:$dbname" + echo "Deleting database:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1733,9 +1733,9 @@ nginx_waf() { wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf" fi - # Decide to turn on or off WAF according to the mode parameter + # Determine whether to turn on or off WAF according to the mode parameter if [ "$mode" == "on" ]; then - # Turn on WAF: Remove comments + # Turn on WAF: remove comments 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 @@ -1745,11 +1745,11 @@ nginx_waf() { 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 "Invalid parameter: Use 'on' or 'off'" + echo "Invalid argument: use 'on' or 'off'" return 1 fi - # Check nginx images and handle them according to the situation + # Check the nginx image and handle it accordingly if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1828,7 +1828,7 @@ patch_wp_debug() { sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # Insert a new definition before the line with "Happy publishing" + # Insert the new definition before the line containing "Happy publishing" awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1865,7 +1865,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Close Brotli: Add comments + # Close Brotli: add comments sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1881,7 +1881,7 @@ nginx_br() { }' /home/web/nginx.conf else - echo "Invalid parameter: Use 'on' or 'off'" + echo "Invalid argument: use 'on' or 'off'" return 1 fi @@ -1922,7 +1922,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # Close Zstd: Add comments + # Close Zstd: add comments sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1942,7 +1942,7 @@ nginx_zstd() { return 1 fi - # Check nginx images and handle them according to the situation + # Check the nginx image and handle it accordingly if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1969,7 +1969,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "Invalid parameter: Use 'on' or 'off'" + echo "Invalid argument: use 'on' or 'off'" return 1 fi @@ -1991,17 +1991,17 @@ web_security() { clear echo -e "Server website defense program${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. Install the defense program" + echo "1. Install a defense program" echo "------------------------" - echo "5. View SSH interception record 6. View website interception record" + echo "5. View SSH interception records 6. View website interception records" echo "7. View the list of defense rules 8. View logs for real-time monitoring" echo "------------------------" - echo "11. Configure intercept parameters 12. Clear all blocked IPs" + echo "11. Configure interception parameters 12. Clear all blocked IPs" echo "------------------------" echo "21. cloudflare mode 22. Enable 5 seconds shield under high load" echo "------------------------" echo "31. Turn on WAF 32. Turn off WAF" - echo "33. Turn on DDOS Defense 34. Turn off DDOS Defense" + echo "33. Turn on DDOS defense 34. Turn off DDOS defense" echo "------------------------" echo "9. Uninstall the defense program" echo "------------------------" @@ -2089,10 +2089,10 @@ web_security() { 21) send_stats "cloudflare mode" - echo "Go to the upper right corner of the cf background, select the API token on the left, and obtain the Global API Key" + echo "Go to my profile in the upper right corner of the cf backend, select the API token on the left, and get the Global API Key" echo "https://dash.cloudflare.com/login" - read -e -p "Enter CF account number:" cfuser - read -e -p "Enter the Global API Key for CF:" cftoken + read -e -p "Enter CF’s account number:" cfuser + read -e -p "Enter CF’s Global API Key:" 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 @@ -2115,8 +2115,8 @@ web_security() { echo -e "${gl_huang}The website automatically detects every 5 minutes. When it detects high load, it will automatically open the shield, and when it detects low load, it will automatically close the shield for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" - echo -e "Go to the upper right corner of the cf background, select the API token on the left, and obtain it${gl_huang}Global API Key${gl_bai}" - echo -e "Go to the bottom right of the cf background domain name summary page to get${gl_huang}Region ID${gl_bai}" + echo -e "Go to my profile in the upper right corner of the cf backend, select the API token on the left, and get${gl_huang}Global API Key${gl_bai}" + echo -e "Go to the bottom right of the cf backend domain name summary page to get it${gl_huang}Area ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" read -e -p "Enter CF’s account number:" cfuser @@ -2153,8 +2153,8 @@ web_security() { 32) nginx_waf off - echo "Site WAF has been closed" - send_stats "Site WAF has been closed" + echo "Site WAF is down" + send_stats "Site WAF is down" ;; 33) @@ -2239,7 +2239,7 @@ web_optimization() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) send_stats "site standards mode" @@ -2378,7 +2378,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv} has installed ${gl_bai}" # else -# check_docker="${gl_hui}${gl_bai} is not installed" +# check_docker="${gl_hui} is not installed ${gl_bai}" # fi # } @@ -2424,7 +2424,7 @@ check_docker_image_update() { return fi - # Get the container creation time and image name + # Get the creation time and image name of the container 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) @@ -2439,7 +2439,7 @@ check_docker_image_update() { # Add support for official images [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Get image publishing time from Docker Hub API + # Get image release time from 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) @@ -2487,7 +2487,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # Check and release the local network 127.0.0.0/8 + # Check and allow local network 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 @@ -2504,7 +2504,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # Check and release the local network 127.0.0.0/8 + # Check and allow local network 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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ ports have been blocked from accessing the service" + echo "IP+port has been blocked from accessing the service" save_iptables_rules } @@ -2540,12 +2540,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 - # Clear the rules for release local network 127.0.0.0/8 + # Clear the rules that allow local network 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 @@ -2559,7 +2559,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules for releasing the specified IP + # Clear the rules that allow specified IPs 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 @@ -2590,7 +2590,7 @@ block_host_port() { if [[ -z "$port" || -z "$allowed_ip" ]]; then echo "Error: Please provide port number and IP to allow access." - echo "Usage: block_host_port " + echo "Usage: block_host_port " return 1 fi @@ -2602,7 +2602,7 @@ block_host_port() { iptables -I INPUT -p tcp --dport "$port" -j DROP fi - # Allow specified IP access + # Allow access to specified 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 @@ -2616,7 +2616,7 @@ block_host_port() { - # Denied all other IP access + # Deny access from all other IPs if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi @@ -2648,7 +2648,7 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "Error: Please provide the port number and the IP that is allowed to access." + echo "Error: Please provide port number and IP to allow access." echo "Usage: clear_host_port_rules " return 1 fi @@ -2661,12 +2661,12 @@ clear_host_port_rules() { iptables -D INPUT -p tcp --dport "$port" -j DROP fi - # Clear rules that allow native access + # Clear rules that allow local access 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 - # Clear rules that allow specified IP access + # Clear rules that allow access from specified IPs 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 @@ -2677,18 +2677,18 @@ clear_host_port_rules() { iptables -D INPUT -p udp --dport "$port" -j DROP fi - # Clear rules that allow native access + # Clear rules that allow local access 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 - # Clear rules that allow specified IP access + # Clear rules that allow access from specified IPs 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+ports have been allowed to access the service" + echo "IP+port has been allowed to access the service" save_iptables_rules } @@ -2771,7 +2771,7 @@ while true; do add_app_id clear - echo "$docker_nameInstalled" + echo "$docker_nameInstallation completed" check_docker_app_ip echo "" $docker_use @@ -2805,15 +2805,15 @@ while true; do ;; 5) - echo "${docker_name}Domain access settings" - send_stats "${docker_name}Domain access settings" + echo "${docker_name}Domain name access settings" + send_stats "${docker_name}Domain name access settings" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "Domain name format example.com does not come with https://" + echo "Domain name format example.com without https://" web_del ;; @@ -2863,7 +2863,7 @@ docker_app_plus() { echo "1. Install 2. Update 3. Uninstall" echo "------------------------" echo "5. Add domain name access 6. Delete domain name access" - echo "7. Allow IP+ port access 8. Block IP+ port access" + echo "7. Allow IP+port access 8. Block IP+port access" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -2902,7 +2902,7 @@ docker_app_plus() { block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "Domain name format example.com does not come with https://" + echo "Domain name format example.com without https://" web_del ;; 7) @@ -2995,7 +2995,7 @@ tmux_run_d() { local base_name="tmuxd" local tmuxd_ID=1 -# Functions that check whether the session exists +# Function to check if session exists session_exists() { tmux has-session -t $1 2>/dev/null } @@ -3194,7 +3194,7 @@ ldnmp_web_on() { nginx_web_on() { clear - echo "Yours$webnameBuilt!" + echo "your$webnameIt's built!" echo "https://$yuming" } @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { fi if [ -z "$reverseproxy_port" ]; then - read -e -p "Please enter your multiple anti-generation IP+ ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port + read -e -p "Please enter your multiple anti-generation IP+ports separated by spaces (for example, 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3372,17 +3372,17 @@ ldnmp_web_status() { echo "" echo "operate" echo "------------------------" - echo "1. Apply for/update the domain name certificate 2. Change the site domain name" + echo "1. Apply/update domain name certificate 2. Clone site domain name" echo "3. Clear site cache 4. Create associated site" echo "5. View the access log 6. View the error log" echo "7. Edit global configuration 8. Edit site configuration" - echo "9. Manage site database 10. View site analysis report" + echo "9. Manage site database 10. View site analysis reports" echo "------------------------" echo "20. Delete specified site data" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) send_stats "Apply for a domain name certificate" @@ -3395,10 +3395,9 @@ ldnmp_web_status() { ;; 2) - send_stats "Change the site domain name" - echo -e "${gl_hong}Highly recommended:${gl_bai}Back up the entire site data first and then change the site domain name!" + send_stats "Clone site domain name" read -e -p "Please enter the old domain name:" oddyuming - read -e -p "Please enter the new domain name:" yuming + read -e -p "Please enter new domain name:" yuming install_certbot install_ssltls certs_status @@ -3410,7 +3409,7 @@ ldnmp_web_status() { 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;" + # 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 }') @@ -3422,18 +3421,18 @@ ldnmp_web_status() { done # Website directory replacement - mv /home/web/html/$oddyuming /home/web/html/$yuming + cp -r /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 + cp /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 + # rm /home/web/certs/${oddyuming}_key.pem + # rm /home/web/certs/${oddyuming}_cert.pem - docker exec nginx nginx -s reload + cd /home/web && docker compose restart ;; @@ -3442,10 +3441,10 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "Create an associated site" + send_stats "Create associated sites" echo -e "Associate a new domain name with the existing site for access" read -e -p "Please enter an existing domain name:" oddyuming - read -e -p "Please enter the new domain name:" yuming + read -e -p "Please enter new domain name:" yuming install_certbot install_ssltls certs_status @@ -3532,7 +3531,7 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case $choice in 1) check_disk_space 1 @@ -3598,7 +3597,7 @@ donlond_frp() { generate_frps_config() { - send_stats "Install the frp server" + send_stats "Install frp server" # Generate random ports and credentials local bind_port=8055 local dashboard_port=8056 @@ -3620,7 +3619,7 @@ EOF donlond_frp frps - # Output generated information + # Output the generated information ip_address echo "------------------------" echo "Parameters required for client deployment" @@ -3640,7 +3639,7 @@ EOF configure_frpc() { - send_stats "Install the frp client" + send_stats "Install frp client" read -e -p "Please enter the external network docking IP:" server_addr read -e -p "Please enter the external network docking token:" token echo @@ -3662,8 +3661,8 @@ EOF } add_forwarding_service() { - send_stats "Add FRP intranet service" - # Prompt the user to enter the service name and forwarding information + send_stats "Add frp intranet service" + # Prompts user for service name and forwarding information read -e -p "Please enter service name:" service_name read -e -p "Please enter the forwarding type (tcp/udp) [Enter to default to tcp]:" service_type local service_type=${service_type:-tcp} @@ -3683,7 +3682,7 @@ remote_port = ${remote_port} EOF # Output the generated information - echo "Serve$service_nameAdded successfully to frpc.toml" + echo "Serve$service_nameSuccessfully added to frpc.toml" docker restart frpc @@ -3697,9 +3696,9 @@ delete_forwarding_service() { send_stats "Delete frp intranet service" # Prompt the user to enter the name of the service that needs to be deleted read -e -p "Please enter the service name to be deleted:" service_name - # Use sed to delete the service and its related configurations + # Use sed to delete the service and its related configuration sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "Serve$service_nameDeleted successfully from frpc.toml" + echo "Serve$service_nameSuccessfully removed from frpc.toml" docker restart frpc @@ -3743,7 +3742,7 @@ list_forwarding_services() { if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # Clear the previous value + # Clear previous value local_ip="" local_port="" remote_port="" @@ -3785,14 +3784,14 @@ list_forwarding_services() { -# Get the FRP server port +# Get FRP server port get_frp_ports() { mapfile -t ports < <(ss -tulnape | grep frps | awk '{print $5}' | awk -F':' '{print $NF}' | sort -u) } # Generate access address generate_access_urls() { - # Get all ports first + # First get all ports get_frp_ports # Check if there is a port other than 8055/8056 @@ -3804,7 +3803,7 @@ generate_access_urls() { fi done - # Show title and content only when there is a valid port + # Show title and content only if there is a valid port if [ "$has_valid_ports" = true ]; then echo "FRP service external access address:" @@ -3815,7 +3814,7 @@ generate_access_urls() { fi done - # Process IPv6 addresses (if present) + # Handle IPv6 address if present if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3860,7 +3859,7 @@ frps_panel() { check_frp_app check_docker_image_update $docker_name echo -e "FRP server$check_frp $update_status" - echo "Build an FRP intranet penetration service environment to expose devices without public IP to the Internet" + echo "Build an FRP intranet penetration service environment and expose devices without public IP to the Internet" echo "Official website introduction: https://github.com/fatedier/frp/" echo "Video tutorial: https://www.bilibili.com/video/BV1yMw6e2EwL?t=124.0" if [ -d "/home/frp/" ]; then @@ -3873,11 +3872,11 @@ frps_panel() { echo "------------------------" echo "5. Intranet service domain name access 6. Delete domain name access" echo "------------------------" - echo "7. Allow IP+ port access 8. Block IP+ port access" + echo "7. Allow IP+port access 8. Block IP+port access" echo "------------------------" echo "00. Refresh service status 0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) install jq grep ss @@ -3910,7 +3909,7 @@ frps_panel() { ;; 5) echo "Reverse intranet penetration service into domain name access" - send_stats "FRP access to external domain names" + send_stats "FRP external domain name access" add_yuming read -e -p "Please enter your intranet penetration service port:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} @@ -3935,7 +3934,7 @@ frps_panel() { ;; 00) - send_stats "Refresh the FRP service status" + send_stats "Refresh FRP service status" echo "FRP service status has been refreshed" ;; @@ -3949,7 +3948,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP Client" + send_stats "FRP client" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,8 +3956,8 @@ frpc_panel() { clear check_frp_app check_docker_image_update $docker_name - echo -e "FRP Client$check_frp $update_status" - echo "Docking with the server, after docking, you can create intranet penetration service to the Internet access" + echo -e "FRP client$check_frp $update_status" + echo "Connect with the server. After the connection, you can create an intranet penetration service to access the Internet." echo "Official website introduction: https://github.com/fatedier/frp/" echo "Video tutorial: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" @@ -4003,7 +4002,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "App has been uninstalled" ;; 4) @@ -4051,7 +4050,7 @@ yt_menu_pro() { clear send_stats "yt-dlp download tool" echo -e "yt-dlp $YTDLP_STATUS" - echo -e "yt-dlp is a powerful video download tool that supports thousands of sites including YouTube, Bilibili, Twitter, etc." + echo -e "yt-dlp is a powerful video download tool that supports thousands of sites such as YouTube, Bilibili, Twitter, etc." echo -e "Official website address: https://github.com/yt-dlp/yt-dlp" echo "-------------------------" echo "Downloaded video list:" @@ -4078,7 +4077,7 @@ yt_menu_pro() { echo "The installation is complete. Press any key to continue..." read ;; 2) - send_stats "Update yt-dlp..." + send_stats "Updating yt-dlp..." echo "Updating yt-dlp..." yt-dlp -U @@ -4095,7 +4094,7 @@ yt_menu_pro() { read ;; 5) send_stats "Single video download" - read -e -p "Please enter the video link:" url + read -e -p "Please enter video link:" url yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4110,7 +4109,7 @@ yt_menu_pro() { echo -e "# Enter multiple video link addresses\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE - echo "Now start batch download..." + echo "Start batch download now..." yt-dlp -P "$VIDEO_DIR" -f "bv*+ba/b" --merge-output-format mp4 \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4118,10 +4117,10 @@ yt_menu_pro() { -a "$URL_FILE" \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "The batch download is completed, press any key to continue..." ;; + read -e -p "Batch download completed, press any key to continue..." ;; 7) send_stats "Custom video download" - read -e -p "Please enter the full yt-dlp parameter (excluding yt-dlp):" custom + read -e -p "Please enter the complete yt-dlp parameters (excluding yt-dlp):" custom yt-dlp -P "$VIDEO_DIR" $custom \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4131,18 +4130,18 @@ yt_menu_pro() { read -e -p "Execution completed, press any key to continue..." ;; 8) send_stats "MP3 download" - read -e -p "Please enter the video link:" url + read -e -p "Please enter video link:" 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 "The audio download is completed, press any key to continue..." ;; + read -e -p "Audio download complete, press any key to continue..." ;; 9) send_stats "Delete video" - read -e -p "Please enter the name of the delete video:" rmdir + read -e -p "Please enter the name of the deleted video:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4178,7 +4177,7 @@ set_timedate() { -# Fix dpkg interrupt problem +# Fix dpkg interruption problem fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4267,7 +4266,7 @@ linux_clean() { journalctl --vacuum-size=500M elif command -v opkg &>/dev/null; then - echo "Delete the system log..." + echo "Delete system log..." rm -rf /var/log/* echo "Delete temporary files..." rm -rf /tmp/* @@ -4275,7 +4274,7 @@ linux_clean() { elif command -v pkg &>/dev/null; then echo "Clean up unused dependencies..." pkg autoremove -y - echo "Clean the package manager cache..." + echo "Clean package manager cache..." pkg clean -y echo "Delete system log..." rm -rf /var/log/* @@ -4346,7 +4345,7 @@ while true; do echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" Limiting + read -e -p "Please enter your choice:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4392,7 +4391,7 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # If PasswordAuthentication is found, set to yes + # If found PasswordAuthentication is set to yes 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" @@ -4417,7 +4416,7 @@ correct_ssh_config() { new_ssh_port() { - # Backup SSH configuration files + # Back up SSH configuration files cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4470,7 +4469,7 @@ import_sshkey() { read -e -p "Please enter the contents of your SSH public key (usually starts with 'ssh-rsa' or 'ssh-ed25519'):" public_key if [[ -z "$public_key" ]]; then - echo -e "${gl_hong}Error: The public key content was not entered.${gl_bai}" + echo -e "${gl_hong}Error: Public key content not entered.${gl_bai}" return 1 fi @@ -4503,14 +4502,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion } @@ -4560,7 +4559,7 @@ dd_xitong() { root_use echo "Reinstall the system" echo "--------------------------------" - echo -e "${gl_hong}Notice:${gl_bai}Reinstallation may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." + echo -e "${gl_hong}Notice:${gl_bai}Reinstalling may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." echo -e "${gl_hui}Thanks to boss leitbogioro and boss bin456789 for their script support!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" @@ -4770,7 +4769,7 @@ dd_xitong() { ;; 36) - send_stats "Reload flying cow" + send_stats "Reinstall Feiniu" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4856,13 +4855,13 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "You have installed xanmod's BBRv3 kernel" + echo "You have xanmod's BBRv3 kernel installed" echo "Current kernel version:$kernel_version" echo "" echo "Kernel management" echo "------------------------" - echo "1. Update the BBRv3 kernel 2. Uninstall the BBRv3 kernel" + echo "1. Update BBRv3 kernel 2. Uninstall BBRv3 kernel" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -4912,9 +4911,9 @@ bbrv3() { echo "Video introduction: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "Only supports Debian/Ubuntu" - echo "Please back up the data and will enable BBR3 for you to upgrade the Linux kernel." + echo "Please back up your data and we will upgrade your Linux kernel and enable BBR3." echo "------------------------------------------------" - read -e -p "Are you sure to continue? (Y/N):" choice + read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) @@ -4922,12 +4921,12 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "The current environment does not support it, only supports Debian and Ubuntu systems" + echo "The current environment does not support it. Only Debian and Ubuntu systems are supported." break_end linux_Settings fi else - echo "Unable to determine the operating system type" + echo "Unable to determine operating system type" break_end linux_Settings fi @@ -4938,7 +4937,7 @@ bbrv3() { # 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 - # Step 3: Add a repository + # Step 3: Add repository 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+') @@ -4949,7 +4948,7 @@ bbrv3() { bbr_on - echo "XanMod kernel is installed and BBR3 is enabled successfully. Take effect after restart" + echo "The XanMod kernel is installed and BBR3 is enabled successfully. Take effect after restart" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4968,13 +4967,13 @@ bbrv3() { elrepo_install() { - # Import ELRepo GPG public key + # Import the ELRepo GPG public key echo "Import the ELRepo GPG public key..." rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - # Detect system version + # Check system version 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) - # Make sure we run on a supported operating system + # Make sure we're running on a supported operating system if [[ "$os_name" != *"Red Hat"* && "$os_name" != *"AlmaLinux"* && "$os_name" != *"Rocky"* && "$os_name" != *"Oracle"* && "$os_name" != *"CentOS"* ]]; then echo "Unsupported operating systems:$os_name" break_end @@ -4984,13 +4983,13 @@ elrepo_install() { echo "Detected operating systems:$os_name $os_version" # Install the corresponding ELRepo warehouse configuration according to the system version if [[ "$os_version" == 8 ]]; then - echo "Install ELRepo repository configuration (version 8)..." + echo "Installing the ELRepo repository configuration (version 8)..." yum -y install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm elif [[ "$os_version" == 9 ]]; then echo "Installing the ELRepo repository configuration (version 9)..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Install ELRepo repository configuration (version 10)..." + echo "Installing the ELRepo repository configuration (version 10)..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else echo "Unsupported system versions:$os_version" @@ -5014,11 +5013,11 @@ elrepo() { while true; do clear kernel_version=$(uname -r) - echo "You have installed the elrepo kernel" + echo "You have installed elrepo kernel" echo "Current kernel version:$kernel_version" echo "" - echo "Kernel Management" + echo "Kernel management" echo "------------------------" echo "1. Update elrepo kernel 2. Uninstall elrepo kernel" echo "------------------------" @@ -5056,7 +5055,7 @@ elrepo() { echo "Video introduction: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Only supports Red Hat series distributions CentOS/RedHat/Alma/Rocky/oracle" - echo "Upgrading the Linux kernel can improve system performance and security. It is recommended to try it if conditions permit and upgrade the production environment with caution!" + echo "Upgrading the Linux kernel can improve system performance and security. It is recommended to try it if possible, and upgrade the production environment with caution!" echo "------------------------------------------------" read -e -p "Are you sure you want to continue? (Y/N):" choice @@ -5113,7 +5112,7 @@ clamav_scan() { mkdir -p /home/docker/clamav/log/ > /dev/null 2>&1 > /home/docker/clamav/log/scan.log > /dev/null 2>&1 - # Execute Docker commands + # Execute Docker command docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5121,8 @@ clamav_scan() { clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS - echo -e "${gl_lv}$@ Scan is completed, virus report is stored${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" - echo -e "${gl_lv}If there is a virus, please${gl_huang}scan.log${gl_lv}Search for FOUND keyword in the file to confirm the location of the virus${gl_bai}" + echo -e "${gl_lv}$@ The scan is completed and the virus report is stored in${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}If there is a virus please${gl_huang}scan.log${gl_lv}Search the file for the FOUND keyword to confirm the location of the virus${gl_bai}" } @@ -5141,17 +5140,17 @@ clamav() { echo "clamav virus scanning tool" echo "Video introduction: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" - echo "It is an open source antivirus software tool, mainly used to detect and remove various types of malware." + echo "It is an open source antivirus software tool mainly used to detect and remove various types of malware." echo "Includes viruses, Trojan horses, spyware, malicious scripts and other harmful software." echo "------------------------" - echo -e "${gl_lv}1. Full disk scan${gl_bai} ${gl_huang}2. Scan important directories${gl_bai} ${gl_kjlan}3. Custom directory scanning${gl_bai}" + echo -e "${gl_lv}1. Full scan${gl_bai} ${gl_huang}2. Scan important directories${gl_bai} ${gl_kjlan}3. Custom directory scanning${gl_bai}" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) - send_stats "Full disk scan" + send_stats "Full scan" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5167,8 @@ clamav() { break_end ;; 3) - send_stats "Custom directory scanning" - read -e -p "Please enter the directory to scan, separated by spaces (for example: /etc /var /usr /home /root):" directories + send_stats "Custom directory scan" + read -e -p "Please enter the directories to scan, separated by spaces (for example: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5188,7 +5187,7 @@ clamav() { # High performance mode optimization function optimize_high_performance() { - echo -e "${gl_lv}Switch to${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}switch to${tiaoyou_moshi}...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -5219,7 +5218,7 @@ optimize_high_performance() { sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null echo -e "${gl_lv}Other optimizations...${gl_bai}" - # Disable large transparent pages to reduce latency + # Disable transparent huge pages to reduce latency echo never > /sys/kernel/mm/transparent_hugepage/enabled # Disable NUMA balancing sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5268,11 +5267,11 @@ optimize_balanced() { } -# Restore the default settings function +# Restore default settings function restore_defaults() { echo -e "${gl_lv}Revert to default settings...${gl_bai}" - echo -e "${gl_lv}Restore file descriptor...${gl_bai}" + echo -e "${gl_lv}Restore file descriptors...${gl_bai}" ulimit -n 1024 echo -e "${gl_lv}Restore virtual memory...${gl_bai}" @@ -5282,7 +5281,7 @@ restore_defaults() { sysctl -w vm.overcommit_memory=0 2>/dev/null sysctl -w vm.min_free_kbytes=16384 2>/dev/null - echo -e "${gl_lv}Restore network settings...${gl_bai}" + echo -e "${gl_lv}Reset network settings...${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 @@ -5301,7 +5300,7 @@ restore_defaults() { sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null echo -e "${gl_lv}Revert other optimizations...${gl_bai}" - # Restore transparent page + # Restore transparent huge pages echo always > /sys/kernel/mm/transparent_hugepage/enabled # Restore NUMA balancing sysctl -w kernel.numa_balancing=1 2>/dev/null @@ -5312,7 +5311,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -5357,17 +5356,17 @@ Kernel_optimize() { while true; do clear send_stats "Linux kernel tuning management" - echo "Optimization of kernel parameters in Linux system" + echo "Linux system kernel parameter optimization" echo "Video introduction: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" echo "Provides a variety of system parameter tuning modes, and users can choose to switch according to their own usage scenarios." - echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in the production environment!" + echo -e "${gl_huang}hint:${gl_bai}Please use it with caution in production environment!" echo "--------------------" echo "1. High-performance optimization mode: Maximize system performance and optimize file descriptors, virtual memory, network settings, cache management and CPU settings." echo "2. Balanced optimization mode: strikes a balance between performance and resource consumption, suitable for daily use." - echo "3. Website optimization mode: Optimize for the website server to improve concurrent connection processing capabilities, response speed and overall performance." - echo "4. Live broadcast optimization mode: Optimize the special needs of live broadcast streaming to reduce latency and improve transmission performance." - echo "5. Game server optimization mode: Optimize for game servers to improve concurrent processing capabilities and response speed." + echo "3. Website optimization mode: Optimize the website server to improve concurrent connection processing capabilities, response speed and overall performance." + echo "4. Live broadcast optimization mode: Optimize the special needs of live streaming to reduce delays and improve transmission performance." + echo "5. Game server optimization mode: Optimize the game server to improve concurrent processing capabilities and response speed." echo "6. Restore default settings: Restore system settings to default configuration." echo "--------------------" echo "0. Return to the previous menu" @@ -5391,7 +5390,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5438,7 +5437,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}The system language has been modified to:$langReconnecting SSH takes effect.${gl_bai}" + echo -e "${gl_lv}The system language has been modified to:$langReconnect to SSH to take effect.${gl_bai}" hash -r break_end @@ -5481,7 +5480,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "Switch to English" + send_stats "switch to english" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -5511,7 +5510,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}Change is completed. Reconnect SSH to view changes!${gl_bai}" +echo -e "${gl_lv}Change completed. Reconnect to SSH to see the changes!${gl_bai}" hash -r break_end @@ -5602,8 +5601,8 @@ linux_trash() { echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "Recycle bin is empty" echo "------------------------" - echo "1. Enable the Recycle Bin 2. Close the Recycle Bin" - echo "3. Restore content 4. Clear the recycling bin" + echo "1. Enable Recycle Bin 2. Close Recycle Bin" + echo "3. Restore content 4. Empty Recycle Bin" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -5615,7 +5614,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "The Recycle Bin is enabled and deleted files will be moved to the Recycle Bin." + echo "Recycle Bin is enabled, deleted files will be moved to Recycle Bin." sleep 2 ;; 2) @@ -5627,19 +5626,19 @@ linux_trash() { sleep 2 ;; 3) - read -e -p "Enter the file name to restore:" file_to_restore + read -e -p "Enter the file name to be restored:" file_to_restore if [ -e "$TRASH_DIR/$file_to_restore" ]; then mv "$TRASH_DIR/$file_to_restore" "$HOME/" - echo "$file_to_restoreRestored to the home directory." + echo "$file_to_restoreRestored to home directory." else - echo "The file does not exist." + echo "File does not exist." fi ;; 4) - read -e -p "Confirm to clear the recycling bin? [y/n]:" confirm + read -e -p "Are you sure you want to empty the Recycle Bin? [y/n]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "The recycling bin has been cleared." + echo "Recycle Bin has been emptied." fi ;; *) @@ -5654,19 +5653,19 @@ send_stats "Command Favorites" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# Create a backup +# Create backup create_backup() { send_stats "Create backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") - # Prompt the user to enter the backup directory + # Prompt user for backup directory echo "Example of creating a backup:" - echo "- Backup a single directory: /var/www" + echo "- Back up a single directory: /var/www" echo "- Back up multiple directories: /etc /home /var/log" echo "- Press Enter to use the default directory (/etc /usr /home)" - read -r -p "Please enter the directory to back up (multiple directories are separated by spaces, and if you enter directly, use the default directory):" input + read -r -p "Please enter the directory to be backed up (separate multiple directories with spaces, and press Enter to use the default directory):" input - # If the user does not enter a directory, use the default directory + # If the user does not enter a directory, the default directory is used if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5692,18 +5691,18 @@ create_backup() { # Generate backup file name local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" - # Print the directory selected by the user + # Print directory selected by user echo "The backup directory you selected is:" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" done # Create backup - echo "Creating a backup$BACKUP_NAME..." + echo "Creating backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" - # Check if the command is successful + # Check if the command was successful if [ $? -eq 0 ]; then echo "Backup created successfully:$BACKUP_DIR/$BACKUP_NAME" else @@ -5715,7 +5714,7 @@ create_backup() { # Restore backup restore_backup() { send_stats "Restore backup" - # Select the backup you want to restore + # Select the backup to restore read -e -p "Please enter the backup file name to be restored:" BACKUP_NAME # Check if the backup file exists @@ -5745,7 +5744,7 @@ list_backups() { delete_backup() { send_stats "Delete backup" - read -e -p "Please enter the backup file name to delete:" BACKUP_NAME + read -e -p "Please enter the backup file name to be deleted:" BACKUP_NAME # Check if the backup file exists if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then @@ -5775,7 +5774,7 @@ linux_backup() { echo "------------------------" list_backups echo "------------------------" - echo "1. Create a backup 2. Restore a backup 3. Delete the backup" + echo "1. Create backup 2. Restore backup 3. Delete backup" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -5800,16 +5799,16 @@ linux_backup() { # Show connection list list_connections() { - echo "Saved connection:" + echo "Saved connections:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" } -# Add a new connection +# Add new connection add_connection() { - send_stats "Add a new connection" + send_stats "Add new connection" echo "Example of creating a new connection:" echo "- Connection name: my_server" echo "- IP address: 192.168.1.100" @@ -5817,8 +5816,8 @@ add_connection() { echo "- Port: 22" echo "------------------------" read -e -p "Please enter a connection name:" name - read -e -p "Please enter your IP address:" ip - read -e -p "Please enter the username (default: root):" user + read -e -p "Please enter IP address:" ip + read -e -p "Please enter username (default: root):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root read -e -p "Please enter the port number (default: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 @@ -5830,18 +5829,18 @@ add_connection() { case $auth_choice in 1) - read -s -p "Please enter your password:" password_or_key + read -s -p "Please enter password:" password_or_key echo # 换行 ;; 2) - echo "Please paste the key content (press press Enter twice after pasting):" + echo "Please paste the key content (press Enter twice after pasting):" local password_or_key="" while IFS= read -r line; do - # If the input is empty and the key content already contains the beginning, the input ends + # If the input is a blank line and the key content already contains the beginning, end the input if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or the key content has been entered, continue to add + # If it is the first line or you have already started entering the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi @@ -5867,9 +5866,9 @@ add_connection() { -# Delete a connection +# Delete connection delete_connection() { - send_stats "Delete a connection" + send_stats "Delete connection" read -e -p "Please enter the connection number to be deleted:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") @@ -5886,7 +5885,7 @@ delete_connection() { fi sed -i "${num}d" "$CONFIG_FILE" - echo "The connection has been deleted!" + echo "Connection deleted!" } # Use connection @@ -5904,16 +5903,16 @@ use_connection() { echo "Connecting to$name ($ip)..." if [[ -f "$password_or_key" ]]; then - # Connect with a key + # Connect using a key ssh -o StrictHostKeyChecking=no -i "$password_or_key" -p "$port" "$user@$ip" if [[ $? -ne 0 ]]; then echo "Connection failed! Please check the following:" echo "1. Is the key file path correct?$password_or_key" - echo "2. Whether the key file permissions are correct (should be 600)." - echo "3. Whether the target server allows login using the key." + echo "2. Are the key file permissions correct (should be 600)." + echo "3. Whether the target server allows login using a key." fi else - # Connect with a password + # Connect using password if ! command -v sshpass &> /dev/null; then echo "Error: sshpass is not installed, please install sshpass first." echo "Installation method:" @@ -5938,7 +5937,7 @@ ssh_manager() { CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # Check if the configuration file and key directory exist, and if it does not exist, create it + # Check if the configuration file and key directory exist, create them if they do not exist if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5986,9 +5985,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# Mount the partition +# Mount partition mount_partition() { - send_stats "Mount the partition" + send_stats "Mount partition" read -e -p "Please enter the name of the partition to be mounted (e.g. sda1):" PARTITION # Check if the partition exists @@ -6003,11 +6002,11 @@ mount_partition() { return fi - # Create a mount point + # Create mount point MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # Mount the partition + # Mount partition mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6034,10 +6033,10 @@ unmount_partition() { umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "Partition uninstallation successfully:$MOUNT_POINT" + echo "Partition uninstalled successfully:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "Partition uninstallation failed!" + echo "Partition uninstall failed!" fi } @@ -6058,14 +6057,14 @@ format_partition() { return fi - # Check if the partition is already mounted + # Check whether the partition is mounted if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then echo "The partition has been mounted, please unmount it first!" return fi # Select file system type - echo "Please select the file system type:" + echo "Please select a file system type:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" @@ -6092,7 +6091,7 @@ format_partition() { mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "The partition format was successful!" + echo "Partition formatted successfully!" else echo "Partition formatting failed!" fi @@ -6110,7 +6109,7 @@ check_partition() { fi # Check partition status - echo "Check partition /dev/$PARTITIONStatus:" + echo "Check partition /dev/$PARTITIONstatus:" fsck "/dev/$PARTITION" } @@ -6125,7 +6124,7 @@ disk_manager() { list_partitions echo "------------------------" echo "1. Mount the partition 2. Unmount the partition 3. View the mounted partition" - echo "4. Format the partition 5. Check the partition status" + echo "4. Format partition 5. Check partition status" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -6147,20 +6146,20 @@ disk_manager() { # Show task list list_tasks() { - echo "Saved synchronization tasks:" + echo "Saved sync tasks:" echo "---------------------------------" awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE" echo "---------------------------------" } -# Add a new task +# Add new task add_task() { send_stats "Add new sync task" echo "Example of creating a new sync task:" echo "- Task name: backup_www" - echo "- Local Directory: /var/www" + echo "- Local directory: /var/www" echo "- Remote address: user@192.168.1.100" - echo "- Remote Directory: /backup/www" + echo "- Remote directory: /backup/www" echo "- Port number (default 22)" echo "---------------------------------" read -e -p "Please enter the task name:" name @@ -6170,7 +6169,7 @@ add_task() { read -e -p "Please enter the SSH port (default 22):" port port=${port:-22} - echo "Please select the authentication method:" + echo "Please select an authentication method:" echo "1. Password" echo "2. Key" read -e -p "Please select (1/2):" auth_choice @@ -6189,7 +6188,7 @@ add_task() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or the key content has been entered, continue to add + # If it is the first line or you have already started entering the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi @@ -6227,10 +6226,10 @@ add_task() { install rsync rsync - echo "Task saved!" + echo "Mission saved!" } -# Delete a task +# Delete task delete_task() { send_stats "Delete sync task" read -e -p "Please enter the task number to be deleted:" num @@ -6259,7 +6258,7 @@ run_task() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # Analyze parameters + # Parse parameters local direction="push" # 默认是推送到远端 local num @@ -6270,7 +6269,7 @@ run_task() { num="$1" fi - # If there is no incoming task number, prompt the user to enter + # If no task number is passed in, the user is prompted to enter if [[ -z "$num" ]]; then read -e -p "Please enter the task number to be executed:" num fi @@ -6283,9 +6282,9 @@ run_task() { IFS='|' read -r name local_path remote remote_path port options auth_method password_or_key <<< "$task" - # Adjust source and target path according to synchronization direction + # Adjust source and destination paths based on synchronization direction if [[ "$direction" == "pull" ]]; then - echo "Pulling synchronization to local:$remote:$local_path -> $remote_path" + echo "Pulling and synchronizing to local:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else @@ -6309,12 +6308,12 @@ run_task() { else # Check whether the key file exists and whether the permissions are correct if [[ ! -f "$password_or_key" ]]; then - echo "Error: The key file does not exist:$password_or_key" + echo "Error: Key file does not exist:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "Warning: The key file permissions are incorrect, and are being repaired..." + echo "Warning: Incorrect key file permissions, fixing..." chmod 600 "$password_or_key" fi @@ -6326,16 +6325,16 @@ run_task() { else echo "Sync failed! Please check the following:" echo "1. Is the network connection normal?" - echo "2. Is the remote host accessible?" + echo "2. Whether the remote host is accessible" echo "3. Is the authentication information correct?" - echo "4. Do local and remote directories have correct access permissions" + echo "4. Do the local and remote directories have correct access permissions?" fi } # Create a scheduled task schedule_task() { - send_stats "Add synchronization timing tasks" + send_stats "Add synchronization scheduled tasks" read -e -p "Please enter the task number to be synchronized regularly:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6345,7 +6344,7 @@ schedule_task() { echo "Please select the scheduled execution interval:" echo "1) Execute once every hour" - echo "2) Perform once a day" + echo "2) Execute once a day" echo "3) Execute once a week" read -e -p "Please enter options (1/2/3):" interval @@ -6369,7 +6368,7 @@ schedule_task() { # Create to user's crontab (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "The timing task has been created:$cron_job" + echo "Scheduled task has been created:$cron_job" } # View scheduled tasks @@ -6382,7 +6381,7 @@ view_tasks() { # Delete scheduled tasks delete_task_schedule() { - send_stats "Delete synchronization timing tasks" + send_stats "Delete synchronization scheduled tasks" read -e -p "Please enter the task number to be deleted:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "Error: Please enter a valid task number!" @@ -6390,7 +6389,7 @@ delete_task_schedule() { fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "Deleted task number$numTiming tasks" + echo "Task number deleted$numscheduled tasks" } @@ -6409,7 +6408,7 @@ rsync_manager() { view_tasks echo echo "1. Create a new task 2. Delete a task" - echo "3. Perform local synchronization to the remote end 4. Perform remote synchronization to the local end" + echo "3. Perform local synchronization to the remote site 4. Perform remote synchronization to the local site" echo "5. Create a scheduled task 6. Delete a scheduled task" echo "---------------------------------" echo "0. Return to the previous menu" @@ -6505,10 +6504,10 @@ linux_info() { echo -e "${gl_kjlan}System load:${gl_bai}$load" echo -e "${gl_kjlan}Physical memory:${gl_bai}$mem_info" echo -e "${gl_kjlan}Virtual memory:${gl_bai}$swap_info" - echo -e "${gl_kjlan}Hard disk occupation:${gl_bai}$disk_info" + echo -e "${gl_kjlan}Hard drive usage:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Total Receive:${gl_bai}$rx" - echo -e "${gl_kjlan}Total send:${gl_bai}$tx" + echo -e "${gl_kjlan}Total received:${gl_bai}$rx" + echo -e "${gl_kjlan}Total sent:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}Network algorithm:${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" @@ -6521,10 +6520,10 @@ linux_info() { echo -e "${gl_kjlan}IPv6 address:${gl_bai}$ipv6_address" fi echo -e "${gl_kjlan}DNS address:${gl_bai}$dns_addresses" - echo -e "${gl_kjlan}Geographical location:${gl_bai}$country $city" + echo -e "${gl_kjlan}Location:${gl_bai}$country $city" echo -e "${gl_kjlan}System time:${gl_bai}$timezone $current_time" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}Runtime:${gl_bai}$runtime" + echo -e "${gl_kjlan}Running time:${gl_bai}$runtime" echo @@ -6537,8 +6536,8 @@ linux_tools() { while true; do clear - # send_stats "Basic Tools" - echo -e "Basic tools" + # send_stats "Basic tools" + echo -e "basic tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}3. ${gl_bai}sudo super administrative privilege tool${gl_kjlan}4. ${gl_bai}socat communication connection tool" @@ -6546,19 +6545,19 @@ linux_tools() { echo -e "${gl_kjlan}7. ${gl_bai}unzip ZIP compression and decompression tool${gl_kjlan}8. ${gl_bai}tar GZ compression and decompression tool" echo -e "${gl_kjlan}9. ${gl_bai}tmux multi-channel background running tool${gl_kjlan}10. ${gl_bai}ffmpeg video encoding live streaming tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${gl_bai}btop modern monitoring tool${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}range file management tool" - echo -e "${gl_kjlan}13. ${gl_bai}ncdu disk occupation viewing tool${gl_kjlan}14. ${gl_bai}fzf global search tool" + echo -e "${gl_kjlan}11. ${gl_bai}btop modern monitoring tool${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger file management tool" + echo -e "${gl_kjlan}13. ${gl_bai}ncdu disk usage viewing tool${gl_kjlan}14. ${gl_bai}fzf global search tool" echo -e "${gl_kjlan}15. ${gl_bai}vim text editor${gl_kjlan}16. ${gl_bai}nano text editor${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}17. ${gl_bai}git version control system" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${gl_bai}The Matrix Screensaver${gl_kjlan}22. ${gl_bai}Train screen security" - echo -e "${gl_kjlan}26. ${gl_bai}Tetris mini game${gl_kjlan}27. ${gl_bai}Snake-eating game" + echo -e "${gl_kjlan}21. ${gl_bai}The Matrix Screensaver${gl_kjlan}22. ${gl_bai}Running train screensaver" + echo -e "${gl_kjlan}26. ${gl_bai}Tetris mini game${gl_kjlan}27. ${gl_bai}Snake mini game" echo -e "${gl_kjlan}28. ${gl_bai}space invaders mini game" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${gl_bai}Install all${gl_kjlan}32. ${gl_bai}All installations (excluding screen savers and games)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}31. ${gl_bai}Install all${gl_kjlan}32. ${gl_bai}Install all (excluding screensavers and games)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${gl_bai}Uninstall all" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}Install the specified tool${gl_kjlan}42. ${gl_bai}Uninstall the specified tool" + echo -e "${gl_kjlan}41. ${gl_bai}Install specified tools${gl_kjlan}42. ${gl_bai}Uninstall the specified tool" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -6569,7 +6568,7 @@ linux_tools() { clear install curl clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" curl --help send_stats "Install curl" ;; @@ -6593,7 +6592,7 @@ linux_tools() { clear install socat clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" socat -h send_stats "Install socat" ;; @@ -6615,15 +6614,15 @@ linux_tools() { clear install unzip clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" unzip - send_stats "Install unzip" + send_stats "installunzip" ;; 8) clear install tar clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" tar --help send_stats "Install tar" ;; @@ -6631,7 +6630,7 @@ linux_tools() { clear install tmux clear - echo "The tool has been installed and the usage method is as follows:" + echo "The tool has been installed and is used as follows:" tmux --help send_stats "Install tmux" ;; @@ -6767,13 +6766,13 @@ linux_tools() { clear read -e -p "Please enter the installed tool name (wget curl sudo htop):" installname install $installname - send_stats "Install the specified software" + send_stats "Install specified software" ;; 42) clear read -e -p "Please enter the uninstalled tool name (htop ufw tmux cmatrix):" removename remove $removename - send_stats "Uninstall the specified software" + send_stats "Uninstall specified software" ;; 0) @@ -6804,7 +6803,7 @@ linux_bbr() { echo "Current TCP blocking algorithm:$congestion_algorithm $queue_algorithm" echo "" - echo "BBR Management" + echo "BBR management" echo "------------------------" echo "1. Turn on BBRv3 2. Turn off BBRv3 (it will restart)" echo "------------------------" @@ -6864,14 +6863,14 @@ docker_ssh_migration() { # ---------------------------- - # Backup + # backup # ---------------------------- backup_docker() { send_stats "Docker backup" echo -e "${YELLOW}Backing up Docker containers...${NC}" docker ps --format '{{.Names}}' - read -e -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers + read -e -p "Please enter the name of the container to be backed up (separate multiple spaces and press Enter to back up all running containers):" containers install tar jq gzip install_docker @@ -6903,7 +6902,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}detected$cYes docker-compose container${NC}" + echo -e "${BLUE}detected$cis a docker-compose container${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -6913,7 +6912,7 @@ docker_ssh_migration() { # If the Compose project has already been packaged, skip if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose project [$project_name] Backed up, skip duplicate packaging...${NC}" + echo -e "${YELLOW}Compose project [$project_name] Already backed up, skip repeated packaging...${NC}" continue fi @@ -6924,7 +6923,7 @@ docker_ssh_migration() { echo "# docker-compose restore:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}Compose project [$project_name] Packed:${project_dir}${NC}" + echo -e "${GREEN}Compose project [$project_name] Packaged:${project_dir}${NC}" else echo -e "${RED}docker-compose.yml not found, skipping this container...${NC}" fi @@ -6947,11 +6946,11 @@ docker_ssh_migration() { mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # Volume Mapping + # volume mapping local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # Mirror + # mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -6961,11 +6960,11 @@ docker_ssh_migration() { done - # Backup all files under /home/docker (excluding subdirectories) + # Back up all files under /home/docker (excluding subdirectories) if [ -d "/home/docker" ]; then echo -e "${BLUE}Back up files under /home/docker...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}The file under /home/docker has been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}Files under /home/docker have been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" @@ -6989,7 +6988,7 @@ docker_ssh_migration() { install tar jq gzip install_docker - # ------------------------- + # --------- Prioritize restoring Compose projects --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then @@ -6998,10 +6997,10 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "Original path not found, please enter the restore directory path:" original_path - # Check if the container for the compose project is already running + # Check whether the container of the compose project is already running running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}Compose project [$project_name] There is already a container running, skip restore...${NC}" + echo -e "${YELLOW}Compose project [$project_name] Containers are already running, skip restore...${NC}" continue fi @@ -7010,17 +7009,17 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}Compose project [$project_name] Decompressed to:$original_path${NC}" + echo -e "${GREEN}Compose project [$project_name] has been extracted to:$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}Compose project [$project_name] Restore is complete!${NC}" + echo -e "${GREEN}Compose project [$project_name] Restore completed!${NC}" fi done - # ------------------------- - echo -e "${BLUE}Check and restore a normal Docker container...${NC}" + # --------- Continue to restore normal containers --------- + echo -e "${BLUE}Check and restore normal Docker containers...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue @@ -7035,7 +7034,7 @@ docker_ssh_migration() { fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information was not found, skip:$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information not found, skip:$container${NC}"; continue; } # port mapping PORT_ARGS="" @@ -7073,14 +7072,14 @@ docker_ssh_migration() { docker rm -f "$container" fi - # Start the container + # Start container echo "Execute the restore command: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done [[ "$has_container" == false ]] && echo -e "${YELLOW}No backup information for common containers found${NC}" - # Restore the file under /home/docker + # Restore files under /home/docker if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}Restoring files under /home/docker...${NC}" mkdir -p /home/docker @@ -7100,7 +7099,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker migration" install jq - read -e -p "Please enter the backup directory to migrate:" BACKUP_DIR + read -e -p "Please enter the backup directory to be migrated:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; } read -e -p "Target server IP:" TARGET_IP @@ -7112,7 +7111,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in with key + # Log in using key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7133,7 +7132,7 @@ docker_ssh_migration() { # Main menu # ---------------------------- main_menu() { - send_stats "Docker backup migration and restore" + send_stats "Docker backup migration restore" while true; do clear echo "------------------------" @@ -7174,7 +7173,7 @@ linux_docker() { while true; do clear # send_stats "docker management" - echo -e "Docker Management" + echo -e "Docker management" docker_tato echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}Install and update the Docker environment${gl_huang}★${gl_bai}" @@ -7188,18 +7187,18 @@ linux_docker() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}7. ${gl_bai}Clean up useless docker containers and mirror network data volumes" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}8. ${gl_bai}Replace Docker source" + echo -e "${gl_kjlan}8. ${gl_bai}Change Docker source" echo -e "${gl_kjlan}9. ${gl_bai}Edit daemon.json file" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}Enable Docker-ipv6 access" - echo -e "${gl_kjlan}12. ${gl_bai}Close Docker-ipv6 access" + echo -e "${gl_kjlan}12. ${gl_bai}Turn off Docker-ipv6 access" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}19. ${gl_bai}Backup/migrate/restore Docker environment" echo -e "${gl_kjlan}20. ${gl_bai}Uninstall the Docker environment" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) @@ -7275,7 +7274,7 @@ linux_docker() { echo "1. Create a network" echo "2. Join the network" echo "3. Exit the network" - echo "4. Delete the network" + echo "4. Delete network" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -7284,13 +7283,13 @@ linux_docker() { case $sub_choice in 1) send_stats "Create network" - read -e -p "Set a new network name:" dockernetwork + read -e -p "Set new network name:" dockernetwork docker network create $dockernetwork ;; 2) send_stats "Join the network" read -e -p "Add network name:" dockernetwork - read -e -p "Those containers are added to the network (multiple container names are separated by spaces):" dockernames + read -e -p "Which containers join the network (please separate multiple container names with spaces):" dockernames for dockername in $dockernames; do docker network connect $dockernetwork $dockername @@ -7309,7 +7308,7 @@ linux_docker() { 4) send_stats "delete network" - read -e -p "Please enter the network name to delete:" dockernetwork + read -e -p "Please enter the network name to be deleted:" dockernetwork docker network rm $dockernetwork ;; @@ -7339,7 +7338,7 @@ linux_docker() { case $sub_choice in 1) - send_stats "Create a new volume" + send_stats "Create new volume" read -e -p "Set new volume name:" dockerjuan docker volume create $dockerjuan @@ -7376,7 +7375,7 @@ linux_docker() { ;; 7) clear - send_stats "Docker cleaning" + send_stats "Docker cleanup" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7472,15 +7471,15 @@ linux_test() { echo -e "${gl_kjlan}4. ${gl_bai}xykt IP quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}Network speed measurement" + echo -e "${gl_kjlan}Network line speed test" echo -e "${gl_kjlan}11. ${gl_bai}besttrace three network backhaul delay routing test" echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace triple network backhaul line test" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed three-net speed measurement" + echo -e "${gl_kjlan}13. ${gl_bai}Superspeed triple network speed test" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" echo -e "${gl_kjlan}15. ${gl_bai}nxtrace specifies IP backhaul test script" echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three network line test" - echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunction speed test script" - echo -e "${gl_kjlan}18. ${gl_bai}NetQuality Network Quality Physical Examination Script${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc multi-function speed test script" + echo -e "${gl_kjlan}18. ${gl_bai}NetQuality network quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}Hardware performance testing" @@ -7488,13 +7487,13 @@ linux_test() { echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU performance test script" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}Comprehensive test" + echo -e "${gl_kjlan}Comprehensive testing" echo -e "${gl_kjlan}31. ${gl_bai}bench performance test" - echo -e "${gl_kjlan}32. ${gl_bai}Spiritysdx Fusion Monster Review${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx fusion monster evaluation${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) @@ -7515,7 +7514,7 @@ linux_test() { ;; 4) clear - send_stats "xykt_IP quality physical examination script" + send_stats "xykt_IP quality check script" bash <(curl -Ls IP.Check.Place) ;; @@ -7528,12 +7527,12 @@ linux_test() { ;; 12) clear - send_stats "mtr_trace three network return line test" + send_stats "mtr_trace triple network backhaul line test" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "Superspeed three-net speed measurement" + send_stats "Superspeed triple network speed test" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) @@ -7545,7 +7544,7 @@ linux_test() { 15) clear send_stats "nxtrace specifies IP backhaul test script" - echo "List of IPs that can be referenced" + echo "Reference IP list" echo "------------------------" echo "Beijing Telecom: 219.141.136.12" echo "Beijing Unicom: 202.106.50.1" @@ -7564,7 +7563,7 @@ linux_test() { echo "Hunan Mobile: 39.134.254.6" echo "------------------------" - read -e -p "Enter a specified IP:" testip + read -e -p "Enter a specific IP:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; @@ -7577,7 +7576,7 @@ linux_test() { 17) clear - send_stats "i-abc multifunction speed test script" + send_stats "i-abc multifunctional speed test script" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; @@ -7589,13 +7588,13 @@ linux_test() { 21) clear - send_stats "yabs performance testing" + send_stats "yabs performance test" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; 22) clear - send_stats "iicu/gb5 CPU performance test script" + send_stats "icu/gb5 CPU performance test script" check_swap bash <(curl -sL bash.icu/gb5) ;; @@ -7640,17 +7639,17 @@ linux_Oracle() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}3. ${gl_bai}DD reinstall system script" echo -e "${gl_kjlan}4. ${gl_bai}Detective R startup script" - echo -e "${gl_kjlan}5. ${gl_bai}Turn on ROOT password login mode" + echo -e "${gl_kjlan}5. ${gl_bai}Enable ROOT password login mode" echo -e "${gl_kjlan}6. ${gl_bai}IPV6 recovery tool" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) clear - echo "Active script: CPU occupies 10-20% memory occupies 20%" + echo "Active script: CPU usage 10-20% Memory usage 20%" read -e -p "Are you sure you want to install it? (Y/N):" choice case "$choice" in [Yy]) @@ -7663,17 +7662,17 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # Prompt the user to enter the number of CPU cores and occupancy percentage, and if entered, use the default value. - read -e -p "Please enter the number of CPU cores [default:$DEFAULT_CPU_CORE]: " cpu_core + # Prompts the user to enter the number of CPU cores and occupancy percentage. If the user presses Enter, the default value will be used. + read -e -p "Please enter the number of CPU cores [Default:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} read -e -p "Please enter the CPU usage percentage range (e.g. 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util local cpu_util=${cpu_util:-$DEFAULT_CPU_UTIL} - read -e -p "Please enter the memory usage percentage [default:$DEFAULT_MEM_UTIL]: " mem_util + read -e -p "Please enter the memory usage percentage [Default:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "Please enter the Speedtest interval time (seconds) [default:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "Please enter Speedtest interval time (seconds) [Default:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # Run Docker container @@ -7706,13 +7705,13 @@ linux_Oracle() { clear echo "Reinstall the system" echo "--------------------------------" - echo -e "${gl_hong}Notice:${gl_bai}Reinstallation may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." - read -e -p "Are you sure to continue? (Y/N):" choice + echo -e "${gl_hong}Notice:${gl_bai}Reinstalling may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." + read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) while true; do - read -e -p "Please select the system to reinstall: 1. Debian12 | 2. Ubuntu20.04:" sys_choice + read -e -p "Please select the system you want to reinstall: 1. Debian12 | 2. Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7732,7 +7731,7 @@ linux_Oracle() { read -e -p "Please enter your password after reinstallation:" 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 Reinstall System Script" + send_stats "Oracle Cloud reinstall system script" ;; [Nn]) echo "Canceled" @@ -7745,7 +7744,7 @@ linux_Oracle() { 4) clear - send_stats "Detective R start script" + send_stats "Detective R startup script" bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) @@ -7757,7 +7756,7 @@ linux_Oracle() { clear bash <(curl -L -s jhb.ovh/jb/v6.sh) echo "This function is provided by jhb, thank him!" - send_stats "ipv6 fix" + send_stats "ipv6 repair" ;; 0) kejilion @@ -7806,7 +7805,7 @@ 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}The environment is installed${gl_bai}Site:$outputdatabase:$db_output" + echo -e "${gl_lv}Environment is installed${gl_bai}Site:$outputdatabase:$db_output" fi fi @@ -7839,26 +7838,26 @@ linux_ldnmp() { ldnmp_tato echo -e "${gl_huang}------------------------" echo -e "${gl_huang}1. ${gl_bai}Install LDNMP environment${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}Install WordPress${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Install Discuz Forum${gl_huang}4. ${gl_bai}Install the Kadao Cloud Desktop" + echo -e "${gl_huang}3. ${gl_bai}Install Discuz Forum${gl_huang}4. ${gl_bai}Install Kedao Cloud Desktop" echo -e "${gl_huang}5. ${gl_bai}Install Apple CMS Movie and TV Station${gl_huang}6. ${gl_bai}Install Unicorn Digital Card Network" echo -e "${gl_huang}7. ${gl_bai}Install flarum forum website${gl_huang}8. ${gl_bai}Install typecho lightweight blog website" - echo -e "${gl_huang}9. ${gl_bai}Install LinkStack Shared Link Platform${gl_huang}20. ${gl_bai}Custom dynamic site" + echo -e "${gl_huang}9. ${gl_bai}Install LinkStack sharing link platform${gl_huang}20. ${gl_bai}Custom dynamic site" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}21. ${gl_bai}Only install nginx${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}Site redirection" + echo -e "${gl_huang}21. ${gl_bai}Only install nginx${gl_huang}★${gl_bai} ${gl_huang}22. ${gl_bai}site redirect" echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy-domain name" echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden Password Management Platform${gl_huang}26. ${gl_bai}Install Halo Blog Site" - echo -e "${gl_huang}27. ${gl_bai}Install AI Painting Prompt Word Generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" + echo -e "${gl_huang}27. ${gl_bai}Install the AI ​​painting prompt word generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" echo -e "${gl_huang}30. ${gl_bai}Custom static site" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up the entire site data" - echo -e "${gl_huang}33. ${gl_bai}Scheduled remote backup${gl_huang}34. ${gl_bai}Restore the entire site data" + echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up site-wide data" + echo -e "${gl_huang}33. ${gl_bai}Scheduled remote backup${gl_huang}34. ${gl_bai}Restore whole site data" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}35. ${gl_bai}Protect LDNMP environments${gl_huang}36. ${gl_bai}Optimize LDNMP environment" - echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall LDNMP environment" + echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall the LDNMP environment" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}0. ${gl_bai}Return to main menu" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -7909,7 +7908,7 @@ linux_ldnmp() { 4) clear - # Kedao Cloud Desktop + # Kedao cloud desktop webname="可道云桌面" send_stats "Install$webname" echo "Start deployment$webname" @@ -7987,7 +7986,7 @@ linux_ldnmp() { 6) clear - # One-legged counting card + # One-legged number card webname="独脚数卡" send_stats "Install$webname" echo "Start deployment$webname" @@ -8035,7 +8034,7 @@ linux_ldnmp() { 7) clear - # Flarum Forum + # flarum forum webname="flarum论坛" send_stats "Install$webname" echo "Start deployment$webname" @@ -8182,7 +8181,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/6${gl_bai}] Upload PHP source code" echo "-------------" - echo "Currently, only zip-format source code packages are allowed. Please put the source code packages in /home/web/html/${yuming}In the directory" + echo "Currently, only source code packages in zip format are allowed to be uploaded. Please put the source code packages in /home/web/html/${yuming}under directory" read -e -p "You can also enter the download link to download the source code package remotely. Press Enter directly to skip the remote download:" url_download if [ -n "$url_download" ]; then @@ -8198,7 +8197,7 @@ linux_ldnmp() { # find "$(realpath .)" -name "index.php" -print find "$(realpath .)" -name "index.php" -print | xargs -I {} dirname {} - read -e -p "Please enter the path of index.php, similar to (/home/web/html/$yuming/wordpress/): " index_lujing + read -e -p "Please enter the path to index.php, similar to (/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 @@ -8223,7 +8222,7 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}4/6${gl_bai}] Install the specified extension" + echo -e "[${gl_huang}4/6${gl_bai}] Install specified extension" echo "-------------" echo "Installed extensions" docker exec php php -m @@ -8252,8 +8251,8 @@ linux_ldnmp() { echo ;; 2) - echo "The database backup must be a .gz-end compressed package. Please put it in the /home/ directory to support the import of backup data of Pagoda/1panel." - read -e -p "You can also enter the download link to remotely download the backup data. Directly press Enter will skip remote download:" url_download_db + echo "Database backup must be a compressed package ending in .gz. Please put it in the /home/ directory to support the import of Pagoda/1panel backup data." + read -e -p "You can also enter the download link to download the backup data remotely. Press Enter directly to skip the remote download:" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8336,7 +8335,7 @@ linux_ldnmp() { echo "Start deployment$webname" add_yuming echo -e "Domain name format:${gl_huang}google.com${gl_bai}" - read -e -p "Please enter your anti-generation domain name:" fandai_yuming + read -e -p "Please enter your reverse proxy domain name:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8451,7 +8450,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/2${gl_bai}] Upload static source code" echo "-------------" - echo "Currently, only source code packages in zip format are allowed to be uploaded. Please put the source code packages in /home/web/html/${yuming}In the directory" + echo "Currently, only source code packages in zip format are allowed to be uploaded. Please put the source code packages in /home/web/html/${yuming}under directory" read -e -p "You can also enter the download link to download the source code package remotely. Press Enter directly to skip the remote download:" url_download if [ -n "$url_download" ]; then @@ -8557,7 +8556,7 @@ linux_ldnmp() { ;; 2) check_crontab_installed - read -e -p "Select the time for daily backup (hours, 0-23):" hour + read -e -p "Select daily backup time (hour, 0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8583,7 +8582,7 @@ linux_ldnmp() { linux_ldnmp fi - # If the user does not enter the file name, use the latest compressed package + # If the user does not enter a file name, the latest compressed package is used if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8593,7 +8592,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" + echo -e "${gl_huang}Unzipping$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8650,7 +8649,7 @@ linux_ldnmp() { echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8755,7 +8754,7 @@ linux_ldnmp() { 38) root_use - send_stats "Uninstall LDNMP environment" + send_stats "Uninstall the LDNMP environment" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8813,58 +8812,58 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Official version of Baota Panel${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" + echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" - echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB Offline BT Magnetic Download Panel" - echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multiplayer online chat system" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" + echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}ZenTao project management software${gl_kjlan}12. ${color12}Qinglong Panel Timed Task Management Platform" + echo -e "${gl_kjlan}11. ${color11}ZenTao project management software${gl_kjlan}12. ${color12}Qinglong panel scheduled task management platform" echo -e "${gl_kjlan}13. ${color13}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}Simple picture bed picture management program" echo -e "${gl_kjlan}15. ${color15}emby multimedia management system${gl_kjlan}16. ${color16}Speedtest speed test panel" echo -e "${gl_kjlan}17. ${color17}AdGuardHome removes adware${gl_kjlan}18. ${color18}onlyofficeOnline office OFFICE" - echo -e "${gl_kjlan}19. ${color19}Thunder Pool WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" + echo -e "${gl_kjlan}19. ${color19}Leichi WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" echo -e "${gl_kjlan}23. ${color23}Memos web memo${gl_kjlan}24. ${color24}Webtop remote desktop web version${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today timing task management framework" - echo -e "${gl_kjlan}27. ${color27}Dockge Container Stack Management Panel${gl_kjlan}28. ${color28}LibreSpeed ​​Speed ​​Test Tool" + echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today scheduled task management framework" + echo -e "${gl_kjlan}27. ${color27}Dockge container stack management panel${gl_kjlan}28. ${color28}LibreSpeed ​​speed test tool" echo -e "${gl_kjlan}29. ${color29}searxng aggregated search station${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF tool collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF Tools Collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel Navigation Panel${gl_kjlan}34. ${color34}Pingvin-Share file sharing platform" - echo -e "${gl_kjlan}35. ${color35}Minimalist circle of friends${gl_kjlan}36. ${color36}LobeChatAI Chat Aggregation Website" + echo -e "${gl_kjlan}35. ${color35}Minimalist circle of friends${gl_kjlan}36. ${color36}LobeChatAI chat aggregation website" echo -e "${gl_kjlan}37. ${color37}MyIP Toolbox${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist family bucket" echo -e "${gl_kjlan}39. ${color39}Bililive live broadcast recording tool${gl_kjlan}40. ${color40}webssh web version SSH connection tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}Mouse Management Panel${gl_kjlan}42. ${color42}Nexte remote connection tool" - echo -e "${gl_kjlan}43. ${color43}RustDesk Remote Desk (Server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk remote desktop (relay)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}41. ${color41}Mouse management panel${gl_kjlan}42. ${color42}Nexterm remote connection tool" + echo -e "${gl_kjlan}43. ${color43}RustDesk remote desktop (server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk remote desktop (relay)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub acceleration station${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}Prometheus monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (Container Monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tool" + echo -e "${gl_kjlan}49. ${color49}Prometheus (container monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}51. ${color51}PVE open chick panel${gl_kjlan}52. ${color52}DPanel container management panel" - echo -e "${gl_kjlan}53. ${color53}llama3 chat AI large model${gl_kjlan}54. ${color54}AMH Host Website Building Management Panel" - echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server side)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI large model${gl_kjlan}58. ${color58}Dify big model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI Big Model Asset Management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" + echo -e "${gl_kjlan}53. ${color53}llama3 chat AI large model${gl_kjlan}54. ${color54}AMH host website building management panel" + echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI large model${gl_kjlan}58. ${color58}Dify large model knowledge base${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI large model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow large model knowledge base" echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" - echo -e "${gl_kjlan}65. ${color65}n8n Automation Workflow Platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" - echo -e "${gl_kjlan}67. ${color67}ddns-go Dynamic DNS Management Tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL Certificate Management Platform" - echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot Chat Robot Framework" + echo -e "${gl_kjlan}65. ${color65}n8n automated workflow platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" + echo -e "${gl_kjlan}67. ${color67}ddns-go dynamic DNS management tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL certificate management platform" + echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot chatbot framework" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome Private Music Server${gl_kjlan}72. ${color72}bitwarden password manager${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}LibreTV Private Film and Television${gl_kjlan}74. ${color74}MoonTV private movies" + echo -e "${gl_kjlan}71. ${color71}Navidrome private music server${gl_kjlan}72. ${color72}bitwarden password manager${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}73. ${color73}LibreTV Private Movies${gl_kjlan}74. ${color74}MoonTV private movies" echo -e "${gl_kjlan}75. ${color75}Melody music wizard${gl_kjlan}76. ${color76}Online DOS old games" echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki intelligent document management system" echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet Video Conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet video conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tool" echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" - echo -e "${gl_kjlan}87. ${color87}SyncTV is a great tool for watching movies together${gl_kjlan}88. ${color88}Owncast self-hosted live broadcast platform" + echo -e "${gl_kjlan}87. ${color87}SyncTV is a great tool for watching movies together${gl_kjlan}88. ${color88}Owncast self-hosted live streaming platform" echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser file manager" @@ -8873,13 +8872,14 @@ while true; do echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server)${gl_kjlan}98. ${color98}WireGuard networking (client)" echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing peer-to-peer file synchronization tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multiplayer online chat system" + echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multi-person online chat system" + echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data" + echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice fi case $sub_choice in @@ -9075,9 +9075,9 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezha Monitoring$check_docker $update_status" + echo -e "Nezha monitoring$check_docker $update_status" echo "Open source, lightweight, easy-to-use server monitoring and operation and maintenance tool" - echo "Official website construction document: https://nezha.wiki/guide/dashboard.html" + echo "Official website construction documentation: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip @@ -9155,7 +9155,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "Post Office Services$check_docker $update_status" + echo -e "postal service$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9192,7 +9192,7 @@ while true; do echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "Parse these DNS records first" + echo "First parse these DNS records" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9259,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "The app has been uninstalled" + echo "App has been uninstalled" ;; *) @@ -9293,7 +9293,7 @@ while true; do clear ip_address - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -9411,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -9573,7 +9573,7 @@ while true; do echo "" echo "------------------------" - echo "1. Install 2. Update 3. Reset Password 4. Uninstall" + echo "1. Install 2. Update 3. Reset password 4. Uninstall" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -9587,7 +9587,7 @@ while true; do add_app_id clear - echo "The Thunder Pool WAF panel has been installed" + echo "The Leichi WAF panel has been installed" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9611,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "If you are the default installation directory, the project has now been uninstalled. If you are customizing the installation directory, you need to go to the installation directory to execute it yourself:" + echo "If you are in the default installation directory, the project has been uninstalled now. If you customize the installation directory, you need to go to the installation directory and execute it yourself:" echo "docker compose down && docker compose down --rmi all" ;; *) @@ -9731,7 +9731,7 @@ while true; do docker_rum() { read -e -p "Set login username:" admin - read -e -p "Set the login user password:" admin_password + read -e -p "Set login user password:" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10072,7 +10072,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya Family Bucket" + send_stats "Xiaoya family bucket" clear install_docker check_disk_space 1 @@ -10296,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10383,7 +10383,7 @@ while true; do 51|pve) clear - send_stats "PVE Chicken" + send_stats "PVE open chick" 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 ;; @@ -10503,7 +10503,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10518,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10561,7 +10561,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10569,7 +10569,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10657,7 +10657,7 @@ while true; do sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10673,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10970,7 +10970,7 @@ while true; do docker_app_install() { read -e -p "Set login username:" admin - read -e -p "Set the login user password:" admin_password + read -e -p "Set login user password:" admin_password read -e -p "Enter authorization code:" shouquanma @@ -10987,7 +10987,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11001,7 +11001,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11222,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11290,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "set up${docker_name}The login key (sk-staring letters and numbers combinations) such as: sk-159kejilionyyds163:" app_passwd + read -e -p "set up${docker_name}Login key (sk-a combination of letters and numbers starting with) such as: sk-159kejilionyyds163:" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11634,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11826,7 +11826,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11846,7 +11846,7 @@ while true; do read -e -p "Please enter the number of clients in the network (default 5):" COUNT COUNT=${COUNT:-5} - read -e -p "Please enter the WireGuard segment (default 10.13.13.0):" NETWORK + read -e -p "Please enter the WireGuard network segment (default 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11925,8 +11925,8 @@ while true; do sleep 2 echo -e "${gl_lv}${COUNT}Configure all outputs for each client. The usage method is as follows:${gl_bai}" echo -e "${gl_lv}1. Download the wg APP on your mobile phone and scan the QR code above to quickly connect to the Internet.${gl_bai}" - echo -e "${gl_lv}2. Download the Windows client and copy the configuration code to connect to the network.${gl_bai}" - echo -e "${gl_lv}3. Linux uses scripts to deploy WG clients and copy configuration code to connect to the network.${gl_bai}" + echo -e "${gl_lv}2. Download the client for Windows and copy the configuration code to connect to the network.${gl_bai}" + echo -e "${gl_lv}3. Use a script to deploy the WG client on Linux and copy the configuration code to connect to the network.${gl_bai}" echo -e "${gl_lv}Official client download method: https://www.wireguard.com/install/${gl_bai}" break_end @@ -11955,10 +11955,10 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # Create a directory (if it does not exist) + # Create directory if it does not exist mkdir -p "$(dirname "$CONFIG_FILE")" - echo "Please paste your client configuration and press Enter twice in a row to save:" + echo "Please paste your client configuration and press Enter twice to save:" # initialize variables input="" @@ -11977,7 +11977,7 @@ while true; do fi done - # Write to the configuration file + # Write configuration file echo "$input" > "$CONFIG_FILE" echo "Client configuration saved to$CONFIG_FILE" @@ -12059,7 +12059,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12129,7 +12129,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "The app has been uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12165,10 +12165,51 @@ while true; do ;; + 103|umami) + local app_id="103" + local app_name="Umami网站统计工具" + local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" + local app_url="官方网站: https://github.com/umami-software/umami" + local docker_name="umami-umami-1" + local docker_port="8103" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml + + docker compose up -d + clear + echo "Installation completed" + check_docker_app_ip + echo "Initial username: admin" + echo "Initial password: umami" + } + + docker_app_update() { + cd /home/docker/umami/ && docker compose down --rmi all + cd /home/docker/umami/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml + cd /home/docker/umami/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/umami/ && docker compose down --rmi all + rm -rf /home/docker/umami + echo "App has been uninstalled" + } + + docker_app_plus + + ;; + + b) clear - send_stats "All applications backup" + send_stats "All application backup" local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" echo -e "${gl_huang}Backing up$backup_filename ...${gl_bai}" @@ -12176,7 +12217,7 @@ while true; do while true; do clear - echo "The backup file has been created: /$backup_filename" + echo "Backup file created: /$backup_filename" read -e -p "Do you want to transfer backup data to a remote server? (Y/N):" choice case "$choice" in [Yy]) @@ -12200,7 +12241,7 @@ while true; do break ;; *) - echo "Note: Currently, the backup only includes docker projects, and does not include data backup of website building panels such as Pagoda and 1panel." + echo "Note: The current backup only includes docker projects, and does not include data backup of website building panels such as Pagoda and 1panel." break ;; esac @@ -12210,8 +12251,8 @@ while true; do r) root_use - send_stats "All applications restore" - echo "Available app backups" + send_stats "Restore all apps" + echo "Available application backups" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12222,17 +12263,17 @@ while true; do linux_panel fi - # If the user does not enter the file name, use the latest compressed package + # If the user does not enter a file name, the latest compressed package is used if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}Decompression is being done$filename ...${gl_bai}" + echo -e "${gl_huang}Unzipping$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "The application data has been restored. Please manually enter the specified application menu and update the application to restore the application." + echo "The application data has been restored. Currently, please manually enter the specified application menu and update the application to restore the application." else - echo "No compression package was found." + echo "No compressed package found." fi ;; @@ -12258,28 +12299,28 @@ linux_work() { send_stats "Backend workspace" echo -e "Backend workspace" echo -e "The system will provide you with a workspace that can run permanently in the background, which you can use to perform long-term tasks." - echo -e "Even if you disconnect SSH, tasks in the workspace will not be interrupted, and tasks in the background will be resident." - echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and press d alone to exit the workspace!" + echo -e "Even if you disconnect SSH, the tasks in the workspace will not be interrupted, and the tasks will remain in the background." + echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and then press d alone to exit the workspace!" echo -e "${gl_kjlan}------------------------" echo "List of currently existing workspaces" echo -e "${gl_kjlan}------------------------" tmux list-sessions echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Workspace No. 1" + echo -e "${gl_kjlan}1. ${gl_bai}Work Area 1" echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" - echo -e "${gl_kjlan}3. ${gl_bai}Workspace No. 3" - echo -e "${gl_kjlan}4. ${gl_bai}Workspace No. 4" + echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" + echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" - echo -e "${gl_kjlan}8. ${gl_bai}Workspace No. 8" + echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" echo -e "${gl_kjlan}10. ${gl_bai}Workspace 10" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}SSH resident mode${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}22. ${gl_bai}Create/enter workspace" echo -e "${gl_kjlan}23. ${gl_bai}Inject commands into the background workspace" - echo -e "${gl_kjlan}24. ${gl_bai}Delete the specified workspace" + echo -e "${gl_kjlan}24. ${gl_bai}Delete specified workspace" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -12299,7 +12340,7 @@ linux_work() { clear install tmux local SESSION_NAME="work2" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 3) @@ -12334,7 +12375,7 @@ linux_work() { clear install tmux local SESSION_NAME="work7" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 8) @@ -12369,9 +12410,9 @@ linux_work() { fi send_stats "SSH resident mode" echo -e "SSH resident mode${tmux_sshd_status}" - echo "After SSH connection is enabled, it will directly enter the resident mode and return to the previous working state." + echo "After opening the SSH connection, it will directly enter the resident mode and return directly to the previous working state." echo "------------------------" - echo "1. Turn on 2. Turn off" + echo "1. On 2. Off" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -12380,7 +12421,7 @@ linux_work() { 1) install tmux local SESSION_NAME="sshd" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" grep -q "tmux attach-session -t sshd" ~/.bashrc || echo -e "\n# Automatically enter tmux session\nif [[ -z \"\$TMUX\" ]]; then\n tmux attach-session -t sshd || tmux new-session -s sshd\nfi" >> ~/.bashrc source ~/.bashrc tmux_run @@ -12447,20 +12488,20 @@ linux_Settings() { # send_stats "System Tools" echo -e "system tools" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut keys${gl_kjlan}2. ${gl_bai}Change login password" + echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut key${gl_kjlan}2. ${gl_bai}Change login password" echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" - echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify the SSH connection port" + echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify SSH connection port" echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}Reinstall the system with one click${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account and create new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}Check port occupation status${gl_kjlan}12. ${gl_bai}Modify virtual memory size" - echo -e "${gl_kjlan}13. ${gl_bai}User Management${gl_kjlan}14. ${gl_bai}User/password generator" + echo -e "${gl_kjlan}13. ${gl_bai}User management${gl_kjlan}14. ${gl_bai}User/password generator" echo -e "${gl_kjlan}15. ${gl_bai}System time zone adjustment${gl_kjlan}16. ${gl_bai}Set up BBR3 acceleration" - echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify the host name" + echo -e "${gl_kjlan}17. ${gl_bai}Firewall Advanced Manager${gl_kjlan}18. ${gl_bai}Modify hostname" echo -e "${gl_kjlan}19. ${gl_bai}Switch system update source${gl_kjlan}20. ${gl_bai}Scheduled task management" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}Native host resolution${gl_kjlan}22. ${gl_bai}SSH defense program" - echo -e "${gl_kjlan}23. ${gl_bai}Automatic shutdown of current limit${gl_kjlan}24. ${gl_bai}ROOT private key login mode" + echo -e "${gl_kjlan}23. ${gl_bai}Current limiting automatic shutdown${gl_kjlan}24. ${gl_bai}ROOT private key login mode" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot system monitoring and early warning${gl_kjlan}26. ${gl_bai}Fix OpenSSH high-risk vulnerabilities" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux kernel upgrade${gl_kjlan}28. ${gl_bai}Linux system kernel parameter optimization${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}Virus scanning tools${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}file manager" @@ -12471,13 +12512,13 @@ linux_Settings() { echo -e "${gl_kjlan}37. ${gl_bai}Command line history${gl_kjlan}38. ${gl_bai}rsync remote synchronization tool" echo -e "${gl_kjlan}39. ${gl_bai}Command Favorites${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}Message board${gl_kjlan}66. ${gl_bai}One-stop system optimization${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}41. ${gl_bai}message board${gl_kjlan}66. ${gl_bai}One-stop system tuning${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}99. ${gl_bai}Restart the server${gl_kjlan}100. ${gl_bai}Privacy and security" echo -e "${gl_kjlan}101. ${gl_bai}Advanced usage of k command${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}Uninstall tech lion script" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) @@ -12490,7 +12531,7 @@ 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 "Shortcut keys are set" + echo "Shortcut keys have been set" send_stats "Script shortcut key has been set" break_end linux_Settings @@ -12515,12 +12556,12 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This feature seamlessly installs any version officially supported by python!" + echo "This function can seamlessly install any version officially supported by python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" - echo "Recommended version: 3.12 3.11 3.10 3.9 3.8 2.7" - echo "Query more versions: https://www.python.org/downloads/" + echo "Recommended versions: 3.12 3.11 3.10 3.9 3.8 2.7" + echo "Check more versions: https://www.python.org/downloads/" echo "------------" read -e -p "Enter the python version number you want to install (enter 0 to exit):" py_new_v @@ -12630,12 +12671,12 @@ EOF send_stats "Exit SSH port modification" break else - echo "The port number is invalid, please enter a number between 1 and 65535." - send_stats "Invalid SSH port input" + echo "The port number is invalid. Please enter a number between 1 and 65535." + send_stats "Invalid SSH port entered" break_end fi else - echo "The input is invalid, please enter the number." + echo "Invalid input, please enter a number." send_stats "Invalid SSH port entered" break_end fi @@ -12655,7 +12696,7 @@ EOF ;; 9) root_use - send_stats "New users disable root" + send_stats "Disable root for new users" read -e -p "Please enter a new username (enter 0 to exit):" new_username if [ "$new_username" == "0" ]; then break_end @@ -12692,11 +12733,11 @@ EOF echo "" echo "------------------------" - echo "1. IPv4 priority 2. IPv6 priority 3. IPv6 repair tool" + echo "1. IPv4 first 2. IPv6 first 3. IPv6 repair tool" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Choose a preferred network:" choice + read -e -p "Choose your preferred network:" choice case $choice in 1) @@ -12715,7 +12756,7 @@ EOF clear bash <(curl -L -s jhb.ovh/jb/v6.sh) echo "This function is provided by jhb, thank him!" - send_stats "ipv6 fix" + send_stats "ipv6 repair" ;; *) @@ -12743,11 +12784,11 @@ EOF echo -e "Current virtual memory:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. Assign 1024M 2. Assign 2048M 3. Assign 4096M 4. Custom size" + echo "1. Allocate 1024M 2. Allocate 2048M 3. Allocate 4096M 4. Custom size" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case "$choice" in 1) @@ -12794,7 +12835,7 @@ EOF echo "" - echo "Account operation" + echo "Account operations" echo "------------------------" echo "1. Create a regular account 2. Create a premium account" echo "------------------------" @@ -12804,29 +12845,29 @@ EOF echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) # Prompt user for new username read -e -p "Please enter a new username:" new_username - # Create a new user and set a password + # Create new user and set password useradd -m -s /bin/bash "$new_username" passwd "$new_username" - echo "The operation has been completed." + echo "The operation is complete." ;; 2) - # Prompt the user to enter a new username + # Prompt user for new username read -e -p "Please enter a new username:" new_username # Create new user and set password useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # Grant new users sudo permissions + # Give the new user sudo permissions echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12835,8 +12876,8 @@ EOF ;; 3) - read -e -p "Please enter your username:" username - # Grant new users sudo permissions + read -e -p "Please enter username:" username + # Give the new user sudo permissions echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12848,7 +12889,7 @@ EOF ;; 5) - read -e -p "Please enter the username to delete:" username + read -e -p "Please enter the username you want to delete:" username # Delete users and their home directories userdel -r "$username" ;; @@ -12862,12 +12903,12 @@ EOF 14) clear - send_stats "User Information Generator" - echo "Random username" + send_stats "User information generator" + echo "random username" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "Random username$i: $username" + echo "random username$i: $username" done echo "" @@ -12893,7 +12934,7 @@ EOF done echo "" - echo "16-bit random password" + echo "16-digit random password" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) @@ -12905,7 +12946,7 @@ EOF echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32) - echo "Random password$i: $password" + echo "random password$i: $password" done echo "" @@ -12935,24 +12976,24 @@ EOF echo "1. Shanghai, China time 2. Hong Kong time, China" echo "3. Tokyo, Japan time 4. Seoul, South Korea time" echo "5. Singapore time 6. Kolkata, India time" - echo "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Time in Bangkok, Thailand" + echo "7. Dubai, United Arab Emirates time 8. Sydney, Australia time" + echo "9. Bangkok, Thailand time" echo "------------------------" echo "Europe" - echo "11. London time in the UK 12. Paris time in France" + echo "11. London, UK time 12. Paris, France time" echo "13. Berlin, Germany time 14. Moscow, Russia time" - echo "15. Utrecht time in the Netherlands 16. Madrid time in Spain" + echo "15. Utracht Time, Netherlands 16. Madrid Time, Spain" echo "------------------------" echo "America" echo "21. US Western Time 22. US Eastern Time" - echo "23. Canadian time 24. Mexican time" - echo "25. Brazil Time 26. Argentina Time" + echo "23. Canada time 24. Mexico time" + echo "25. Brazil time 26. Argentina time" echo "------------------------" echo "31. UTC global standard time" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -13000,9 +13041,9 @@ EOF while true; do clear local current_hostname=$(uname -n) - echo -e "Current host name:${gl_huang}$current_hostname${gl_bai}" + echo -e "Current hostname:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "Please enter the new host name (enter 0 to exit):" new_hostname + read -e -p "Please enter a new hostname (enter 0 to exit):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine @@ -13031,7 +13072,7 @@ EOF send_stats "Hostname changed" sleep 1 else - echo "Exited, hostname not changed." + echo "Exited without changing hostname." break fi done @@ -13039,16 +13080,16 @@ EOF 19) root_use - send_stats "Change the system update source" + send_stats "Change system update source" clear - echo "Select the update source area" - echo "Connect to LinuxMirrors to switch system update source" + echo "Select update source region" + echo "Access LinuxMirrors to switch system update sources" echo "------------------------" echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas regions" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -13060,7 +13101,7 @@ EOF bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "Overseas origin" + send_stats "Overseas sources" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) @@ -13095,7 +13136,7 @@ EOF echo "1. Monthly tasks 2. Weekly tasks" echo "3. Daily tasks 4. Hourly tasks" echo "------------------------" - read -e -p "Please enter your selection:" dingshi + read -e -p "Please enter your choice:" dingshi case $dingshi in 1) @@ -13103,7 +13144,7 @@ EOF (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) - read -e -p "Choose what week to perform the task? (0-6, 0 represents Sunday):" weekday + read -e -p "Choose a day of the week to perform the task? (0-6, 0 represents Sunday):" weekday (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) @@ -13118,16 +13159,16 @@ EOF break # 跳出 ;; esac - send_stats "Add timed tasks" + send_stats "Add a scheduled task" ;; 2) - read -e -p "Please enter the keywords that need to be deleted:" kquest + read -e -p "Please enter the keyword of the task to be deleted:" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "Delete timing tasks" + send_stats "Delete scheduled tasks" ;; 3) crontab -e - send_stats "Edit timing tasks" + send_stats "Edit scheduled tasks" ;; *) break # 跳出循环,退出菜单 @@ -13142,8 +13183,8 @@ EOF send_stats "Local host resolution" while true; do clear - echo "Native host parsing list" - echo "If you add parse matches here, dynamic parsing will no longer be used" + echo "Native host resolution list" + echo "If you add parsing matching here, dynamic parsing will no longer be used" cat /etc/hosts echo "" echo "operate" @@ -13156,9 +13197,9 @@ EOF case $host_dns in 1) - read -e -p "Please enter a new parsing record Format: 110.25.5.33 kejilion.pro:" addhost + read -e -p "Please enter a new parsing record format: 110.25.5.33 kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "Local host parsing has been added" + send_stats "Local host resolution is added" ;; 2) @@ -13180,10 +13221,10 @@ EOF check_f2b_status echo -e "SSH defense program$check_f2b_status" - echo "fail2ban is an SSH tool to prevent brute force" + echo "fail2ban is an SSH tool to prevent brute force cracking" echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. Install the defense program" + echo "1. Install a defense program" echo "------------------------" echo "2. View SSH interception records" echo "3. Real-time log monitoring" @@ -13227,7 +13268,7 @@ EOF 23) root_use - send_stats "Current limit shutdown function" + send_stats "Current limiting shutdown function" while true; do clear echo "Current limiting shutdown function" @@ -13236,38 +13277,38 @@ EOF echo "The current traffic usage will be cleared when the server is restarted!" output_status echo -e "${gl_kjlan}Total received:${gl_bai}$rx" - echo -e "${gl_kjlan}Total send:${gl_bai}$tx" + echo -e "${gl_kjlan}Total sent:${gl_bai}$tx" # Check if Limiting_Shut_down.sh file exists if [ -f ~/Limiting_Shut_down.sh ]; then # Get the value of threshold_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}The current set entry-station current limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" - echo -e "${gl_lv}The current outbound current limit threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" + echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" + echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}Current limit shutdown function is not enabled${gl_bai}" + echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" fi echo echo "------------------------------------------------" echo "The system will detect whether the actual traffic reaches the threshold every minute, and will automatically shut down the server after reaching the threshold!" echo "------------------------" - echo "1. Turn on the current limit shutdown function 2. Deactivate the current limit shutdown function" + echo "1. Enable the current limiting shutdown function 2. Disable the current limiting shutdown function" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" Limiting + read -e -p "Please enter your choice:" Limiting case "$Limiting" in 1) - # Enter the new virtual memory size + # Enter new virtual memory size echo "If the actual server only has 100G traffic, you can set the threshold to 95G and shut down in advance to avoid traffic errors or overflows." read -e -p "Please enter the inbound traffic threshold (unit is G, default is 100G):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "Please enter the outbound traffic threshold (unit is G, default is 100G):" tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "Please enter the traffic reset date (default reset on the 1st of each month):" cz_day + read -e -p "Please enter the traffic reset date (default resets on the 1st of every month):" cz_day cz_day=${cz_day:-1} cd ~ @@ -13280,15 +13321,15 @@ EOF (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 "Current limit shutdown has been set" - send_stats "Current limit shutdown has been set" + echo "Current limiting shutdown has been set" + send_stats "Current limiting shutdown has been set" ;; 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 "Current limit shutdown function has been turned off" + echo "Current limiting shutdown function is turned off" ;; *) break @@ -13309,11 +13350,11 @@ EOF echo "------------------------------------------------" echo "A key pair will be generated, a more secure way to log in via SSH" echo "------------------------" - echo "1. Generate a new key 2. Import an existing key 3. View the native key" + echo "1. Generate a new key 2. Import an existing key 3. View the local key" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" - read -e -p "Please enter your selection:" host_dns + read -e -p "Please enter your choice:" host_dns case $host_dns in 1) @@ -13323,13 +13364,13 @@ EOF ;; 2) - send_stats "Import an existing public key" + send_stats "Import existing public key" import_sshkey break_end ;; 3) - send_stats "View the local secret key" + send_stats "View local key" echo "------------------------" echo "Public key information" cat ~/.ssh/authorized_keys @@ -13355,13 +13396,13 @@ EOF echo "Video introduction: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" echo "You need to configure the tg robot API and the user ID to receive alerts to achieve real-time monitoring and alerts of local CPU, memory, hard disk, traffic, and SSH login." - echo "After reaching the threshold, the user will be sent to the user" + echo "When the threshold is reached, a warning message will be sent to the user." echo -e "${gl_hui}- Regarding traffic, restarting the server will recalculate -${gl_bai}" read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) - send_stats "Telegram warning is enabled" + send_stats "Telegram warning enabled" cd ~ install nano tmux bc jq check_crontab_installed @@ -13395,7 +13436,7 @@ EOF clear echo "TG-bot early warning system has been activated" - 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}" + echo -e "${gl_hui}You can also put the TG-check-notify.sh warning file in the root directory on other machines and use it directly!${gl_bai}" ;; [Nn]) echo "Canceled" @@ -13476,7 +13517,7 @@ EOF 41) clear send_stats "message board" - echo "Visit the official message board of Technology lion. If you have any ideas about scripts, please leave a message and communicate!" + echo "Visit the official message board of Technology Lion. If you have any ideas about the script, please leave a message to exchange!" echo "https://board.kejilion.pro" echo "Public password: kejilion.sh" ;; @@ -13494,17 +13535,17 @@ EOF echo -e "4. Set the SSH port number to${gl_huang}5522${gl_bai}" echo -e "5. Open all ports" echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" - echo -e "7. Set the time zone to${gl_huang}Shanghai${gl_bai}" + echo -e "7. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "8. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" echo -e "9. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" - echo -e "10. Switch to kernel parameter optimization in Linux system${gl_huang}Balanced optimization mode${gl_bai}" + echo -e "10. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" - read -e -p "Are you sure to have one-click maintenance? (Y/N):" choice + read -e -p "Are you sure you want one-click maintenance? (Y/N):" choice case "$choice" in [Yy]) clear - send_stats "One-stop tuning start" + send_stats "One-stop tuning starts" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" @@ -13552,12 +13593,12 @@ EOF echo "------------------------------------------------" install_docker install wget sudo tar unzip socat btop nano vim - echo -e "[${gl_lv}OK${gl_bai}] 9/10. Install the basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 9/10. Install basic tools${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. Optimization of kernel parameters for Linux system" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux system kernel parameter optimization" echo -e "${gl_lv}One-stop system tuning has been completed${gl_bai}" ;; @@ -13591,7 +13632,7 @@ EOF echo "Privacy and security" echo "The script will collect data on users’ use of functions, optimize the script experience, and create more fun and useful functions." - echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used," + echo "The script version number, time of use, system version, CPU architecture, country of the machine and name of the function used will be collected," echo "------------------------------------------------" echo -e "Current status:$status_message" echo "--------------------" @@ -13634,7 +13675,7 @@ EOF echo "Uninstall tech lion script" echo "------------------------------------------------" echo "The kejilion script will be completely uninstalled without affecting your other functions." - read -e -p "Are you sure to continue? (Y/N):" choice + read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) @@ -13642,7 +13683,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "The script has been uninstalled, goodbye!" + echo "The script has been uninstalled, bye!" break_end clear exit @@ -13679,7 +13720,7 @@ EOF linux_file() { root_use - send_stats "File Manager" + send_stats "file manager" while true; do clear echo "file manager" @@ -13689,11 +13730,11 @@ linux_file() { echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. Enter the directory 2. Create the directory 3. Modify the directory permissions 4. Rename the directory" + echo "1. Enter the directory 2. Create the directory 3. Modify directory permissions 4. Rename the directory" echo "5. Delete the directory 6. Return to the previous menu directory" echo "------------------------" - echo "11. Create a file 12. Edit a file 13. Modify file permissions 14. Rename a file" - echo "15. Delete the file" + echo "11. Create files 12. Edit files 13. Modify file permissions 14. Rename files" + echo "15. Delete files" echo "------------------------" echo "21. Compress file directory 22. Unzip file directory 23. Move file directory 24. Copy file directory" echo "25. Transfer files to other servers" @@ -13705,7 +13746,7 @@ linux_file() { case "$Limiting" in 1) # 进入目录 read -e -p "Please enter the directory name:" dirname - cd "$dirname" 2>/dev/null || echo "Unable to enter the directory" + cd "$dirname" 2>/dev/null || echo "Unable to enter directory" send_stats "Enter directory" ;; 2) # 创建目录 @@ -13715,7 +13756,7 @@ linux_file() { ;; 3) # 修改目录权限 read -e -p "Please enter the directory name:" dirname - read -e -p "Please enter permissions (such as 755):" perm + read -e -p "Please enter permissions (e.g. 755):" perm chmod "$perm" "$dirname" && echo "Permissions have been modified" || echo "Modification failed" send_stats "Modify directory permissions" ;; @@ -13723,24 +13764,24 @@ linux_file() { read -e -p "Please enter the current directory name:" current_name read -e -p "Please enter a new directory name:" new_name mv "$current_name" "$new_name" && echo "Directory has been renamed" || echo "Rename failed" - send_stats "Rename the directory" + send_stats "Rename directory" ;; 5) # 删除目录 read -e -p "Please enter the directory name to be deleted:" dirname rm -rf "$dirname" && echo "Directory deleted" || echo "Delete failed" - send_stats "Delete Directory" + send_stats "delete directory" ;; 6) # 返回上一级选单目录 cd .. send_stats "Return to the previous menu directory" ;; 11) # 创建文件 - read -e -p "Please enter the file name to create:" filename + read -e -p "Please enter the file name to be created:" filename touch "$filename" && echo "File created" || echo "Creation failed" - send_stats "Create a file" + send_stats "Create file" ;; 12) # 编辑文件 - read -e -p "Please enter the file name to edit:" filename + read -e -p "Please enter the file name to be edited:" filename install nano nano "$filename" send_stats "Edit file" @@ -13754,12 +13795,12 @@ linux_file() { 14) # 重命名文件 read -e -p "Please enter the current file name:" current_name read -e -p "Please enter a new file name:" new_name - mv "$current_name" "$new_name" && echo "File renamed" || echo "Rename failed" + mv "$current_name" "$new_name" && echo "File has been renamed" || echo "Rename failed" send_stats "Rename file" ;; 15) # 删除文件 - read -e -p "Please enter the file name to delete:" filename - rm -f "$filename" && echo "File deleted" || echo "Deletion failed" + read -e -p "Please enter the file name to be deleted:" filename + rm -f "$filename" && echo "File deleted" || echo "Delete failed" send_stats "Delete files" ;; 21) # 压缩文件/目录 @@ -13769,7 +13810,7 @@ linux_file() { send_stats "Compressed files/directories" ;; 22) # 解压文件/目录 - read -e -p "Please enter the file name (.tar.gz):" filename + read -e -p "Please enter the file name to be extracted (.tar.gz):" filename install tar tar -xzvf "$filename" && echo "Unzipped$filename" || echo "Decompression failed" send_stats "Unzip files/directories" @@ -13778,8 +13819,8 @@ linux_file() { 23) # 移动文件或目录 read -e -p "Please enter the file or directory path to be moved:" src_path if [ ! -e "$src_path" ]; then - echo "Error: The file or directory does not exist." - send_stats "Failed to move a file or directory: The file or directory does not exist" + echo "Error: File or directory does not exist." + send_stats "Failed to move file or directory: File or directory does not exist" continue fi @@ -13790,16 +13831,16 @@ linux_file() { continue fi - mv "$src_path" "$dest_path" && echo "The file or directory has been moved to$dest_path" || echo "Failed to move files or directories" - send_stats "Move files or directories" + mv "$src_path" "$dest_path" && echo "File or directory moved to$dest_path" || echo "Failed to move file or directory" + send_stats "Move a file or directory" ;; 24) # 复制文件目录 read -e -p "Please enter the file or directory path to copy:" src_path if [ ! -e "$src_path" ]; then - echo "Error: The file or directory does not exist." - send_stats "Failed to copy a file or directory: The file or directory does not exist" + echo "Error: File or directory does not exist." + send_stats "Copying file or directory failed: File or directory does not exist" continue fi @@ -13810,9 +13851,9 @@ linux_file() { continue fi - # Use the -r option to copy the directory recursively - cp -r "$src_path" "$dest_path" && echo "The file or directory has been copied to$dest_path" || echo "Failed to copy a file or directory" - send_stats "Copy files or directories" + # Use the -r option to copy directories recursively + cp -r "$src_path" "$dest_path" && echo "File or directory copied to$dest_path" || echo "Failed to copy file or directory" + send_stats "Copy a file or directory" ;; @@ -13868,7 +13909,7 @@ EOF 0) # 返回上一级选单 - send_stats "Return to the previous menu menu" + send_stats "Return to the previous menu" break ;; *) # 处理无效输入 @@ -13899,7 +13940,7 @@ run_commands_on_servers() { local SERVERS_FILE="$HOME/cluster/servers.py" local SERVERS=$(grep -oP '{"name": "\K[^"]+|"hostname": "\K[^"]+|"port": \K[^,]+|"username": "\K[^"]+|"password": "\K[^"]+' "$SERVERS_FILE") - # Convert extracted information into an array + # Convert the extracted information into an array IFS=$'\n' read -r -d '' -a SERVER_ARRAY <<< "$SERVERS" # Traverse the server and execute commands @@ -13937,22 +13978,22 @@ while true; do cat ~/cluster/servers.py echo echo -e "${gl_kjlan}------------------------${gl_bai}" - echo -e "${gl_kjlan}Server List Management${gl_bai}" - echo -e "${gl_kjlan}1. ${gl_bai}Add server${gl_kjlan}2. ${gl_bai}Delete server${gl_kjlan}3. ${gl_bai}Edit the server" + echo -e "${gl_kjlan}Server list management${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Add server${gl_kjlan}2. ${gl_bai}Delete server${gl_kjlan}3. ${gl_bai}Edit server" echo -e "${gl_kjlan}4. ${gl_bai}Backup cluster${gl_kjlan}5. ${gl_bai}Restore cluster" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" - echo -e "${gl_kjlan}11. ${gl_bai}Install the tech lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" + echo -e "${gl_kjlan}11. ${gl_bai}Install technology lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom commands" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom instructions" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) - send_stats "Add a cluster server" + send_stats "Add cluster server" read -e -p "Server name:" server_name read -e -p "Server IP:" server_ip read -e -p "Server port (22):" server_port @@ -13965,12 +14006,12 @@ while true; do ;; 2) - send_stats "Delete the cluster server" - read -e -p "Please enter the keywords you need to delete:" rmserver + send_stats "Delete cluster server" + read -e -p "Please enter the keywords to be deleted:" rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) - send_stats "Edit the cluster server" + send_stats "Edit cluster server" install nano nano ~/cluster/servers.py ;; @@ -13978,15 +14019,15 @@ while true; do 4) clear send_stats "Backup cluster" - echo -e "Please${gl_huang}/root/cluster/servers.py${gl_bai}Download the file and complete the backup!" + echo -e "please change${gl_huang}/root/cluster/servers.py${gl_bai}Download the file and complete the backup!" break_end ;; 5) clear - send_stats "Restore the cluster" + send_stats "Restore cluster" echo "Please upload your servers.py and press any key to start uploading!" - echo -e "Please upload your${gl_huang}servers.py${gl_bai}file to${gl_huang}/root/cluster/${gl_bai}Complete the restore!" + echo -e "Please upload your${gl_huang}servers.py${gl_bai}file to${gl_huang}/root/cluster/${gl_bai}Restore completed!" break_end ;; @@ -14041,27 +14082,27 @@ echo "Advertising column" echo "------------------------" echo "It will provide users with a simpler and more elegant promotion and purchasing experience!" echo "" -echo -e "Server Offers" +echo -e "Server Discount" echo "------------------------" echo -e "${gl_lan}Laika Cloud Hong Kong CN2 GIA Korean dual ISP US CN2 GIA promotions${gl_bai}" echo -e "${gl_bai}Website: https://www.lcayun.com/aff/ZEXUQBIM${gl_bai}" echo "------------------------" echo -e "${gl_lan}RackNerd $10.99 per year, USA, 1 core, 1G memory, 20G hard drive, 1T traffic per month${gl_bai}" -echo -e "${gl_bai}Website: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" +echo -e "${gl_bai}URL: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" echo "------------------------" -echo -e "${gl_zi}Hostinger 52.7 dollars per year United States 1 core 4G memory 50G hard drive 4T traffic per month${gl_bai}" +echo -e "${gl_zi}Hostinger $52.7 per year United States 1 core 4G memory 50G hard drive 4T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${gl_bai}" echo "------------------------" -echo -e "${gl_huang}Brickworker, $49 per quarter, US CN2GIA, Japan SoftBank, 2 cores, 1G memory, 20G hard drive, 1T traffic per month${gl_bai}" +echo -e "${gl_huang}Bricklayer 49 dollars per quarter US CN2GIA Japan SoftBank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}Website: https://bandwagonhost.com/aff.php?aff=69004&pid=87${gl_bai}" echo "------------------------" echo -e "${gl_lan}DMIT $28 per quarter US CN2GIA 1 core 2G memory 20G hard drive 800G traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS $6.9 per month Tokyo SoftBank 2 core 1G memory 20G hard drive 1T traffic per month${gl_bai}" +echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14104,7 +14145,7 @@ while true; do echo -e "${gl_lv}You are already on the latest version!${gl_huang}v$sh_v${gl_bai}" send_stats "The script is already up to date and does not need to be updated" else - echo "Discover a new version!" + echo "New version discovered!" echo -e "Current version v$sh_vlatest version${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14114,15 +14155,15 @@ while true; do if [ -n "$existing_cron" ]; then echo "------------------------" - echo -e "${gl_lv}Automatic update is enabled, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" + echo -e "${gl_lv}Automatic updates are turned on, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" fi echo "------------------------" - echo "1. Update now 2. Turn on automatic update 3. Turn off automatic update" + echo "1. Update now 2. Turn on automatic updates 3. Turn off automatic updates" echo "------------------------" echo "0. Return to main menu" echo "------------------------" - read -e -p "Please enter your selection:" choice + read -e -p "Please enter your choice:" choice case "$choice" in 1) clear @@ -14158,14 +14199,14 @@ while true; do # (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}Automatic updates are turned on, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" - send_stats "Turn on automatic script update" + send_stats "Enable automatic script updates" break_end ;; 3) clear (crontab -l | grep -v "kejilion.sh") | crontab - - echo -e "${gl_lv}Automatic update is closed${gl_bai}" - send_stats "Close script automatic update" + echo -e "${gl_lv}Automatic updates are turned off${gl_bai}" + send_stats "Turn off automatic script updates" break_end ;; *) @@ -14188,13 +14229,13 @@ echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" echo -e "Technology lion script toolbox v$sh_v" -echo -e "Command line input${gl_huang}k${gl_kjlan}Quickly start scripts${gl_bai}" +echo -e "Command line input${gl_huang}k${gl_kjlan}Quick start script${gl_bai}" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}1. ${gl_bai}System information query" echo -e "${gl_kjlan}2. ${gl_bai}System update" -echo -e "${gl_kjlan}3. ${gl_bai}System Cleanup" +echo -e "${gl_kjlan}3. ${gl_bai}System cleanup" echo -e "${gl_kjlan}4. ${gl_bai}basic tools" -echo -e "${gl_kjlan}5. ${gl_bai}BBR Management" +echo -e "${gl_kjlan}5. ${gl_bai}BBR management" echo -e "${gl_kjlan}6. ${gl_bai}Docker management" echo -e "${gl_kjlan}7. ${gl_bai}WARP management" echo -e "${gl_kjlan}8. ${gl_bai}Test script collection" @@ -14212,7 +14253,7 @@ echo -e "${gl_kjlan}00. ${gl_bai}Script update" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Exit script" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "Please enter your selection:" choice +read -e -p "Please enter your choice:" choice case $choice in 1) linux_info ;; @@ -14251,45 +14292,45 @@ echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "The following is a reference use case for the k command:" echo "Start script k" -echo "Install software package k install nano wget | k add nano wget | k Install nano wget" -echo "Uninstall the package k remove nano wget | k del nano wget | k uninstall nano wget | k Uninstall nano wget" +echo "Install packages k install nano wget | k add nano wget | k install nano wget" +echo "Uninstall a package k remove nano wget | k del nano wget | k uninstall nano wget | k uninstall nano wget" echo "Update system k update | k update" -echo "Clean system garbage k clean | k clean" +echo "Clean system junk k clean | k clean" echo "Reinstall the system panel k dd | k reinstall" echo "bbr3 control panel k bbr3 | k bbrv3" echo "Kernel Tuning Panel k nhyh | k Kernel Optimization" echo "Set virtual memory k swap 2048" echo "Set virtual time zone k time Asia/Shanghai | k time zone Asia/Shanghai" -echo "System Recycling Bin k trash | k hsz | k Recycling Bin" +echo "System Recycle Bin k trash | k hsz | k Recycle Bin" echo "System backup function k backup | k bf | k backup" echo "ssh remote connection tool k ssh | k remote connection" echo "rsync remote synchronization tool k rsync | k remote synchronization" echo "Hard disk management tool k disk | k hard disk management" echo "Intranet penetration (server) k frps" echo "Intranet penetration (client) k frpc" -echo "Software start k start sshd | k start sshd" +echo "Software startup k start sshd | k start sshd" echo "Software stop k stop sshd | k stop sshd" echo "Software restart k restart sshd | k restart sshd" echo "Check software status k status sshd | k status sshd" echo "k enable docker | k autostart docker | k enable docker when booting the software" echo "Domain name certificate application k ssl" -echo "Domain name certificate expiration query k ssl ps" +echo "Domain name certificate expiry query k ssl ps" echo "docker management plane k docker" echo "docker environment installation k docker install |k docker installation" echo "docker container management k docker ps |k docker container" echo "docker image management k docker img |k docker image" echo "LDNMP site management k web" -echo "LDNMP cache cleanup k web cache" -echo "Install WordPress k wp |k wordpress |k wp xxx.com" +echo "LDNMP cache cleaning k web cache" +echo "Install WordPress k wp | k wordpress | k wp xxx.com" echo "Install reverse proxy k fd |k rp |k reverse proxy |k fd xxx.com" echo "Install load balancing k loadbalance |k load balancing" -echo "Firewall panel k fhq |k firewall" -echo "Open port k dkdk 8080 |k Open port 8080" +echo "firewall panel k fhq |k firewall" +echo "open port k dkdk 8080 |k open port 8080" echo "Close port k gbdk 7800 |k Close port 7800" echo "Release IP k fxip 127.0.0.0/8 |k Release IP 127.0.0.0/8" echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" -echo "Command favorites k fav | k command favorites" -echo "App Market Management k app" +echo "command favorites k fav | k command favorites" +echo "Application market management k app" echo "Quick management of application numbers k app 26 | k app 1panel | k app npm" echo "Display system information k info" } @@ -14309,7 +14350,7 @@ else ;; remove|del|uninstall|卸载) shift - send_stats "Uninstall the software" + send_stats "Uninstall software" remove "$@" ;; update|更新) @@ -14343,7 +14384,7 @@ else rsync_run) shift - send_stats "Timed rsync synchronization" + send_stats "Scheduled rsync synchronization" run_task "$@" ;; @@ -14362,7 +14403,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ ports have been blocked from accessing the service" + echo "IP+port has been blocked from accessing the service" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14464,7 +14505,7 @@ else send_stats "Apply for a certificate quickly" elif [ -n "$1" ]; then add_ssl "$1" - send_stats "Quickly apply for a certificate" + send_stats "Apply for a certificate quickly" else k_info fi diff --git a/jp/kejilion.sh b/jp/kejilion.sh index a96968ff1..146f811f2 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.8" +sh_v="4.1.9" gl_hui='\e[37m' @@ -34,7 +34,7 @@ quanju_canshu -# コマンドを実行する関数を定義します +# コマンドを実行する関数を定義する run_command() { if [ "$zhushi" -eq 0 ]; then "$@" @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -114,9 +114,9 @@ CheckFirstRun_false() { # ユーザーに規約への同意を求めるプロンプトを表示する UserLicenseAgreement() { clear - echo -e "${gl_kjlan}Tech Lion Script Toolboxへようこそ${gl_bai}" + echo -e "${gl_kjlan}テクノロジー ライオン スクリプト ツールボックスへようこそ${gl_bai}" echo "初めてスクリプトを使用する場合は、ユーザー使用許諾契約を読み、同意してください。" - echo "ユーザー使用許諾契約: https://blog.kejilion.pro/user-license-agreement/" + echo "ユーザー使用許諾契約書: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "上記の条件に同意しますか? (y/n):" user_input @@ -170,7 +170,7 @@ ipv6_address=$(curl -s --max-time 1 https://v6.ipinfo.io/ip && echo) install() { if [ $# -eq 0 ]; then - echo "パッケージパラメーターは提供されていません!" + echo "パッケージパラメータが指定されていません!" return 1 fi @@ -204,7 +204,7 @@ install() { pkg update pkg install -y "$package" else - echo "不明なパッケージマネージャー!" + echo "不明なパッケージマネージャーです!" return 1 fi fi @@ -221,8 +221,8 @@ check_disk_space() { if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}ヒント:${gl_bai}ディスク容量が足りません!" - echo "現在の利用可能なスペース: $((available_space_mb/1024))G" - echo "最小需要スペース:${required_gb}G" + echo "現在利用可能なスペース: $((available_space_mb/1024))G" + echo "最低限必要なスペース:${required_gb}G" echo "インストールを続行できません。ディスク容量をクリアして、再試行してください。" send_stats "ディスク容量が足りない" break_end @@ -243,7 +243,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストール$package...${gl_bai}" + 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 @@ -268,7 +268,7 @@ remove() { } -# さまざまな分布に適したUniversal SystemCTL関数 +# さまざまなディストリビューションに適したユニバーサル systemctl 関数 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -281,17 +281,17 @@ systemctl() { } -# サービスを再起動します +# サービスを再起動する restart() { systemctl restart "$1" if [ $? -eq 0 ]; then - echo "$1サービスは再開されました。" + echo "$1サービスが再開されました。" else - echo "エラー:再起動$1サービスが失敗しました。" + echo "エラー: 再起動$1サービスが失敗しました。" fi } -# サービスを開始します +# サービス開始 start() { systemctl start "$1" if [ $? -eq 0 ]; then @@ -305,19 +305,19 @@ start() { stop() { systemctl stop "$1" if [ $? -eq 0 ]; then - echo "$1サービスは停止しました。" + echo "$1サービスが停止されました。" else - echo "エラー: 停止$1サービスに失敗しました。" + echo "エラー: 停止$1サービスが失敗しました。" fi } -# サービスのステータスを確認します +# サービスステータスを確認する status() { systemctl status "$1" if [ $? -eq 0 ]; then echo "$1サービスのステータスが表示されます。" else - echo "エラー: 表示できません$1サービスステータス。" + echo "エラー: 表示できません$1サービスのステータス。" fi } @@ -330,7 +330,7 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME電源を入れるように設定します。" + echo "$SERVICE_NAME起動時に自動で起動するように設定してあります。" } @@ -427,7 +427,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker環境のインストール...${gl_bai}" + echo -e "${gl_huang}Docker 環境をインストールしています...${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 @@ -508,17 +508,17 @@ while true; do echo "" echo "コンテナの運用" echo "------------------------" - echo "1.新しいコンテナを作成します" + echo "1. 新しいコンテナを作成する" echo "------------------------" - echo "2。指定されたコンテナを起動します。6。すべての容器を起動します" + echo "2. 指定したコンテナを起動します。 6. すべてのコンテナを起動します。" echo "3. 指定したコンテナを停止します。 7. すべてのコンテナを停止します。" - echo "4.指定されたコンテナ8を削除します。すべてのコンテナを削除します" - echo "5。指定されたコンテナを再起動9。すべてのコンテナを再起動します" + echo "4. 指定したコンテナを削除します。 8. すべてのコンテナを削除します。" + echo "5. 指定したコンテナを再起動します。 9. すべてのコンテナを再起動します。" echo "------------------------" - echo "11。指定されたコンテナを入力します12。コンテナログを表示します" - echo "13.コンテナネットワークを表示14。コンテナ占有を表示します" + echo "11. 指定したコンテナを入力します。 12. コンテナのログを表示します。" + echo "13. コンテナネットワークを確認します。 14. コンテナ占有率を確認します。" echo "------------------------" - echo "15.コンテナポートアクセスをオンにする16.コンテナポートアクセスをオフにする" + echo "15. コンテナ ポート アクセスを有効にする 16. コンテナ ポート アクセスを閉じる" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -536,7 +536,7 @@ while true; do ;; 3) send_stats "指定したコンテナを停止する" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker stop $dockername ;; 4) @@ -546,7 +546,7 @@ while true; do ;; 5) send_stats "指定したコンテナを再起動します" - read -e -p "コンテナ名(スペースで区切られた複数のコンテナ名)を入力してください。" dockername + read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker restart $dockername ;; 6) @@ -558,7 +558,7 @@ while true; do docker stop $(docker ps -q) ;; 8) - send_stats "すべてのコンテナを削除します" + send_stats "すべてのコンテナを削除する" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -567,7 +567,7 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -577,13 +577,13 @@ while true; do ;; 11) send_stats "コンテナに入る" - read -e -p "コンテナ名を入力してください:" dockername + read -e -p "コンテナ名を入力してください:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) send_stats "コンテナログの表示" - read -e -p "コンテナ名を入力してください:" dockername + read -e -p "コンテナ名を入力してください:" dockername docker logs $dockername break_end ;; @@ -612,8 +612,8 @@ while true; do ;; 15) - send_stats "コンテナポートアクセスを許可します" - read -e -p "コンテナ名を入力してください:" docker_name + send_stats "コンテナポートへのアクセスを許可する" + read -e -p "コンテナ名を入力してください:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -622,7 +622,7 @@ while true; do ;; 16) - send_stats "コンテナポートアクセスをブロックします" + send_stats "コンテナポートへのアクセスをブロックする" read -e -p "コンテナ名を入力してください:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" @@ -642,7 +642,7 @@ done docker_image() { while true; do clear - send_stats "Docker画像管理" + send_stats "Dockerイメージ管理" echo "Dockerイメージリスト" docker image ls echo "" @@ -656,15 +656,15 @@ while true; do read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) - send_stats "鏡を引っ張ります" - read -e -p "ミラー名を入力してください(スペースで複数のミラー名を分離してください):" imagenames + 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 "画像を更新します" + send_stats "画像を更新" read -e -p "イメージ名を入力してください (複数のイメージ名はスペースで区切ってください):" imagenames for name in $imagenames; do echo -e "${gl_huang}画像の更新:$name${gl_bai}" @@ -761,7 +761,7 @@ install_crontab() { ;; esac else - echo "オペレーティングシステムを決定することはできません。" + echo "オペレーティング システムを特定できません。" return fi @@ -797,7 +797,7 @@ docker_ipv6_on() { # 元の構成と新しい構成を比較する if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then - echo -e "${gl_huang}現在、IPv6アクセスが有効になっています${gl_bai}" + echo -e "${gl_huang}IPv6 アクセスは現在有効です${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -812,28 +812,28 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 構成ファイルが存在するかどうかを確認します + # 設定ファイルが存在するかどうかを確認する if [ ! -f "$CONFIG_FILE" ]; then - echo -e "${gl_hong}構成ファイルは存在しません${gl_bai}" + echo -e "${gl_hong}設定ファイルが存在しません${gl_bai}" return fi - # 現在の構成をお読みください + # 現在の構成を読み取る local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # JQを使用して、構成ファイルの更新を処理します + # 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}" + echo -e "${gl_huang}IPv6アクセスは現在停止中です${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6アクセスは正常に閉じられています${gl_bai}" + echo -e "${gl_huang}IPv6 アクセスが正常に終了しました${gl_bai}" fi } @@ -872,7 +872,7 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + echo "少なくとも 1 つのポート番号を入力してください" return 1 fi @@ -883,14 +883,14 @@ open_port() { 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" + echo "ポートがオープンされました$port" fi done @@ -902,14 +902,14 @@ open_port() { close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "少なくとも1つのポート番号を提供してください" + echo "少なくとも 1 つのポート番号を入力してください" 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 @@ -928,7 +928,7 @@ close_port() { iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null - # 最初に新しいルールを挿入します + # 最初のルールに新しいルールを挿入します iptables -I INPUT 1 -i lo -j ACCEPT iptables -I FORWARD 1 -i lo -j ACCEPT @@ -950,34 +950,34 @@ allow_ip() { # 既存のブロック ルールを削除する 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" + echo "リリース済みIP$ip" fi done save_iptables_rules - send_stats "リリースされたIP" + send_stats "リリース済みIP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "少なくとも1つのIPアドレスまたはIPセグメントを提供してください" + echo "少なくとも 1 つの 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" + echo "IPがブロックされました$ip" fi done @@ -992,7 +992,7 @@ block_ip() { enable_ddos_defense() { - # 防御DDOをオンにします + # DDoS 保護を有効にする 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 @@ -1007,7 +1007,7 @@ enable_ddos_defense() { # DDoS 防御をオフにする disable_ddos_defense() { - # 防御DDOをオフにします + # DDoS 保護をオフにする 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 @@ -1086,7 +1086,7 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "正常に持ち上げられました$country_codeIPアドレスの制限" + echo "正常に削除されました$country_codeIPアドレス制限" ;; *) @@ -1118,25 +1118,25 @@ iptables_panel() { echo "" echo "ファイアウォール管理" echo "------------------------" - echo "1.指定されたポート2を開きます。指定されたポートを閉じます" - echo "3.すべてのポートを開きます。4。すべてのポートを閉じます" + echo "1. 指定されたポートをオープンします。 2. 指定されたポートを閉じます。" + echo "3. すべてのポートを開く 4. すべてのポートを閉じる" echo "------------------------" echo "5. IP ホワイトリスト 6. IP ブラックリスト" - echo "7.指定されたIPをクリアします" + echo "7. 指定したIPをクリアします" echo "------------------------" echo "11. PING を許可する 12. PING を無効にする" echo "------------------------" echo "13. DDOS 防御を開始します。 14. DDOS 防御をオフにします。" echo "------------------------" - echo "15.ブロック指定された国IP16。指定された国のIPのみが許可されます" - echo "17.指定国でのIP制限をリリースします" + echo "15. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" + echo "17. 指定国における知的財産制限を解除する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) - read -e -p "オープンポート番号を入力してください:" o_port + read -e -p "開いているポート番号を入力してください:" o_port open_port $o_port send_stats "指定したポートを開く" ;; @@ -1159,7 +1159,7 @@ iptables_panel() { 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 "すべてのポートを開きます" + send_stats "すべてのポートを開く" ;; 4) # すべてのポートを閉じます @@ -1180,7 +1180,7 @@ iptables_panel() { 5) # IPホワイトリスト - read -e -p "リリースするには、IPまたはIPセグメントを入力してください。" o_ip + read -e -p "許可された IP または IP セグメントを入力してください:" o_ip allow_ip $o_ip ;; 6) @@ -1194,17 +1194,17 @@ iptables_panel() { 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をクリアします" + send_stats "指定したIPをクリア" ;; 11) - # pingを許可します + # PINGを許可する 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 "pingを許可します" + send_stats "PINGを許可する" ;; 12) - # pingを無効にします + # PINGを無効にする 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 @@ -1218,20 +1218,20 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; 16) read -e -p "許可されている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules allow $country_code - send_stats "国をブロックします$country_codeIP" + send_stats "ブロック国$country_codeIP" ;; 17) read -e -p "クリアされた国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules unblock $country_code - send_stats "国をきれいにします$country_codeIP" + send_stats "澄んだ国$country_codeIP" ;; *) @@ -1250,23 +1250,23 @@ iptables_panel() { 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が使用されなくなったことを確認してください + # /swapfile が使用されていないことを確認してください swapoff /swapfile - # 古い /swapfileを削除します + # 古い /swapfile を削除する rm -f /swapfile - # 新しいスワップパーティションを作成します + # 新しいスワップ パーティションを作成する fallocate -l ${new_swap}M /swapfile chmod 600 /swapfile mkswap /swapfile @@ -1312,7 +1312,7 @@ ldnmp_v() { 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バージョンを取得します + # 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}" @@ -1343,11 +1343,11 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.ymlファイルをダウンロードして置き換えます + # 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ファイルに置き換えます + # 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 @@ -1392,7 +1392,7 @@ install_ldnmp() { clear - echo "LDNMP環境がインストールされています" + echo "LDNMP環境がインストールされている" echo "------------------------" ldnmp_v @@ -1449,7 +1449,7 @@ 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}" + echo -e "${gl_huang}$yuming秘密鍵情報${gl_bai}" cat /etc/letsencrypt/live/$yuming/privkey.pem echo "" echo -e "${gl_huang}証明書の保存パス${gl_bai}" @@ -1463,7 +1463,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL証明書をすばやく申請し、有効期限が切れる前に署名を自動的に更新します${gl_bai}" +echo -e "${gl_huang}SSL 証明書をすばやく申請し、有効期限が切れる前に自動的に更新します${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1479,8 +1479,8 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}適用された証明書の有効期限${gl_bai}" - echo "サイト情報証明書の有効期限" + echo -e "${gl_huang}適用された証明書の有効期限ステータス${gl_bai}" + echo "サイト情報 証明書の有効期限" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -1524,14 +1524,14 @@ certs_status() { send_stats "ドメイン名証明書の申請に失敗しました" echo -e "${gl_hong}知らせ:${gl_bai}証明書の申請に失敗しました。次の考えられる理由を確認して、再試行してください。" echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" - echo -e "2。DNS解像度の問題domainドメイン名がこのサーバーIPに対して正しく解決されたことを確認します" + echo -e "2. DNS 解決の問題 ➠ ドメイン名がサーバー IP に正しく解決されていることを確認します。" echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" - echo -e "5.アプリケーションの数が制限を超えています➠暗号化を毎週制限(5回/ドメイン名/週)があります" + echo -e "5. アプリケーション数が制限を超えている ➠ Let's Encrypt には週制限あり (5 回/ドメイン名/週)" echo -e "6. 国内登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかをご確認ください。" break_end clear - echo "もう一度展開してみてください$webname" + echo "もう一度デプロイしてみてください$webname" add_yuming install_ssltls certs_status @@ -1551,8 +1551,8 @@ fi add_yuming() { ip_address - echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" - read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming + echo -e "まず、ドメイン名をローカル IP に解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}" + read -e -p "IP または解決されたドメイン名を入力してください:" yuming } @@ -1616,7 +1616,7 @@ nginx_upgrade() { docker exec nginx chown -R nginx:nginx /var/cache/nginx/fastcgi docker restart $ldnmp_pods > /dev/null 2>&1 - send_stats "更新します$ldnmp_pods" + send_stats "更新する$ldnmp_pods" echo "更新する${ldnmp_pods}仕上げる" } @@ -1636,8 +1636,8 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "ログイン情報:" - echo "ユーザー名:$dbuse" + echo "ログイン情報:" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo send_stats "起動する$ldnmp_pods" @@ -1650,19 +1650,19 @@ cf_purge_cache() { local EMAIL local ZONE_IDS - # 構成ファイルが存在するかどうかを確認します + # 設定ファイルが存在するかどうかを確認する if [ -f "$CONFIG_FILE" ]; then # 構成ファイルから API_TOKEN とzone_idを読み取ります read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # ゾーン_idsを配列に変換します + # ZONE_IDS を配列に変換する ZONE_IDS=($ZONE_IDS) else # キャッシュをクリアするかどうかをユーザーに確認する read -e -p "Cloudflareのキャッシュをクリアする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF情報が保存されます$CONFIG_FILECF 情報は後で変更できます。" + echo "CF情報は以下に保存されます。$CONFIG_FILECF 情報は後で変更できます。" read -e -p "API_TOKEN を入力してください:" API_TOKEN - read -e -p "CFユーザ​​ー名を入力してください:" EMAIL + read -e -p "CF ユーザー名を入力してください:" EMAIL read -e -p "zone_id を入力してください (複数の場合はスペースで区切ります):" -a ZONE_IDS mkdir -p /home/web/config/ @@ -1670,9 +1670,9 @@ cf_purge_cache() { fi fi - # 各ZONE_IDをループして、Clear Cacheコマンドを実行します + # 各zone_idをループし、キャッシュクリアコマンドを実行します。 for ZONE_ID in "${ZONE_IDS[@]}"; do - echo "ゾーン_idのキャッシュのクリア:$ZONE_ID" + 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" \ @@ -1686,7 +1686,7 @@ cf_purge_cache() { web_cache() { - send_stats "サイトキャッシュをクリーンアップします" + send_stats "サイトキャッシュをクリアする" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1712,12 +1712,12 @@ web_del() { 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" + echo "データベースを削除しています:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1735,7 +1735,7 @@ nginx_waf() { # モードパラメータに従ってWAFをオンにするかオフにするかを決定します。 if [ "$mode" == "on" ]; then - # WAFをオンにしてください:コメントを削除します + # 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 @@ -1745,11 +1745,11 @@ nginx_waf() { 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 "無効なパラメーター:「オン」または「オフ」を使用します" + echo "無効な引数: 'on' または 'off' を使用してください" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # nginx イメージを確認し、それに応じて処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1828,7 +1828,7 @@ patch_wp_debug() { sed -i "/define(['\"]WP_DEBUG_DISPLAY['\"].*/d" "$FILE" sed -i "/define(['\"]WP_DEBUG_LOG['\"].*/d" "$FILE" - # 「Happy Publishing」で行の前に新しい定義を挿入する + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /Happy publishing/ { @@ -1865,7 +1865,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる:コメントを追加します + # Brotliを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1881,11 +1881,11 @@ nginx_br() { }' /home/web/nginx.conf else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "無効な引数: 'on' または 'off' を使用してください" return 1 fi - # nginx画像を確認し、状況に応じてそれらを処理します + # nginx イメージを確認し、それに応じて処理します if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1907,7 +1907,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTDをオンにしてください:コメントを削除します + # Zstd をオンにする: コメントを削除する sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1922,7 +1922,7 @@ nginx_zstd() { elif [ "$mode" == "off" ]; then - # ZSTDを閉じる:コメントを追加します + # Zstdを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1938,7 +1938,7 @@ nginx_zstd() { else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "無効な引数: 'on' または 'off' を使用してください" return 1 fi @@ -1969,7 +1969,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "無効なパラメーター:「オン」または「オフ」を使用します" + echo "無効な引数: 'on' または 'off' を使用してください" return 1 fi @@ -1989,16 +1989,16 @@ web_security() { check_waf_status check_cf_mode clear - echo -e "サーバーWebサイト防衛プログラム${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" + echo -e "サーバー Web サイト防御プログラム${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1.防衛プログラムをインストールします" + echo "1. 防御プログラムをインストールする" echo "------------------------" - echo "5。SSHインターセプトレコード6を表示6。ウェブサイト傍受記録を見る" + echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" echo "------------------------" - echo "21。CloudFlareモード22。5秒シールドの高負荷" + echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" echo "31. WAF をオンにする 32. WAF をオフにする" echo "33. DDOS 防御をオンにする 34. DDOS 防御をオフにする" @@ -2007,7 +2007,7 @@ web_security() { echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -2072,7 +2072,7 @@ web_security() { remove fail2ban rm -rf /etc/fail2ban crontab -l | grep -v "CF-Under-Attack.sh" | crontab - 2>/dev/null - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; @@ -2089,7 +2089,7 @@ web_security() { 21) send_stats "クラウドフレアモード" - echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" + echo "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択し、グローバル API キーを取得します。" echo "https://dash.cloudflare.com/login" read -e -p "CF の口座番号を入力してください:" cfuser read -e -p "CF のグローバル API キーを入力します。" cftoken @@ -2111,17 +2111,17 @@ web_security() { ;; 22) - send_stats "5秒シールドでの高負荷" + send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" - echo "CFパラメーターを取得します:" - echo -e "CFバックグラウンドの右上隅に移動し、左側のAPIトークンを選択して、取得します${gl_huang}Global API Key${gl_bai}" + echo "CF パラメータを取得します。" + echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" read -e -p "CF の口座番号を入力してください:" cfuser - read -e -p "CFのグローバルAPIキーを入力してください。" cftoken - read -e -p "CFにドメイン名の領域IDを入力します。" cfzonID + read -e -p "CF のグローバル API キーを入力します。" cftoken + read -e -p "CF にドメイン名のゾーン ID を入力します。" cfzonID cd ~ install jq bc @@ -2138,7 +2138,7 @@ web_security() { if [ -z "$existing_cron" ]; then (crontab -l 2>/dev/null; echo "$cron_job") | crontab - - echo "高負荷自動シールドオープニングスクリプトが追加されました" + echo "高負荷自動シールド開放スクリプトを追加しました" else echo "自動シールド開放スクリプトはすでに存在するため、追加する必要はありません" fi @@ -2153,7 +2153,7 @@ web_security() { 32) nginx_waf off - echo "サイトWAFは閉鎖されています" + echo "サイト WAF がダウンしています" send_stats "サイト WAF がダウンしています" ;; @@ -2179,10 +2179,10 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 現在のworker_processesの設定値を取得します +# 現在のworker_processes設定値を取得します current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') -# 値に応じてモード情報を設定します +# 値に基づいてモード情報を設定します if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2205,7 +2205,7 @@ check_nginx_compression() { zstd_status="" fi - # Brotliが有効になっており、コメントされていないかどうかを確認してください + # Brotli が有効になっていてコメントが解除されているかどうかを確認します if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then br_status=" br压缩已开启" else @@ -2228,12 +2228,12 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP環境を最適化します" + send_stats "LDNMP環境の最適化" echo -e "LDNMP環境の最適化${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" + echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" echo "------------------------" - echo "3。GZIP圧縮をオンにします4。GZIP圧縮をオフにします" + echo "3. gzip 圧縮をオンにする 4. gzip 圧縮をオフにする" echo "5. br 圧縮をオンにする 6. br 圧縮をオフにする" echo "7. zstd 圧縮をオンにする 8. zstd 圧縮をオフにする" echo "------------------------" @@ -2248,7 +2248,7 @@ web_optimization() { 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チューニング + # 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 @@ -2284,7 +2284,7 @@ web_optimization() { 2) send_stats "サイトハイパフォーマンスモード" - # nginxチューニング + # 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 @@ -2306,7 +2306,7 @@ web_optimization() { fix_phpfpm_conf php fix_phpfpm_conf php74 - # mysqlチューニング + # 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 @@ -2378,7 +2378,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv} は ${gl_bai} をインストールしました" # else -# check_docker = "$ {gl_hui} $ {gl_bai}はインストールされていません" +# check_docker="${gl_hui} がインストールされていません ${gl_bai}" # fi # } @@ -2433,22 +2433,22 @@ check_docker_image_update() { local image_repo=${image_name%%:*} local image_tag=${image_name##*:} - # デフォルトのラベルは最新です + # デフォルトのタグはlatestです [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" # 公式画像のサポートを追加 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIから画像公開時間を取得します + # 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 @@ -2467,7 +2467,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # コンテナのIPアドレスを取得します + # コンテナのIPアドレスを取得する local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2477,12 +2477,12 @@ block_container_port() { install iptables - # 他のすべてのIPSを確認してブロックします + # 他のすべての 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を確認してリリースします + # 指定した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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -2540,12 +2540,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 指定されたIPをリリースするためのルールをクリアします + # 指定した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 + # ローカルネットワーク 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 @@ -2554,7 +2554,7 @@ clear_container_rules() { - # 他のすべてのIPをブロックするルールを明確にします + # 他のすべての 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 @@ -2564,7 +2564,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク 127.0.0.0/8 を許可するルールをクリアします。 + # ローカルネットワーク 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 @@ -2597,7 +2597,7 @@ block_host_port() { install iptables - # 他のすべてのIPアクセスを拒否しました + # 他のすべての IP からのアクセスを拒否する if ! iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p tcp --dport "$port" -j DROP fi @@ -2607,7 +2607,7 @@ block_host_port() { 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 @@ -2621,7 +2621,7 @@ block_host_port() { iptables -I INPUT -p udp --dport "$port" -j DROP fi - # 指定されたIPアクセスを許可します + # 指定した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 @@ -2631,12 +2631,12 @@ block_host_port() { 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+ポートは、サービスへのアクセスをブロックされています" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -2648,7 +2648,7 @@ clear_host_port_rules() { local allowed_ip=$2 if [[ -z "$port" || -z "$allowed_ip" ]]; then - echo "エラー:アクセスを許可されているポート番号とIPを提供してください。" + echo "エラー: アクセスを許可するには、ポート番号と IP を入力してください。" echo "使用法: clear_host_port_rules <ポート番号> <許可された IP>" return 1 fi @@ -2661,12 +2661,12 @@ clear_host_port_rules() { 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アクセスを許可するルールを明確にします + # 指定した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 @@ -2677,18 +2677,18 @@ clear_host_port_rules() { 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アクセスを許可するルールを明確にします + # 指定した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+ポートはサービスにアクセスすることが許可されています" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2747,19 +2747,19 @@ while true; do fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. インストール 2. アップデート 3. アンインストール" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. ドメイン名アクセスを追加します。 6. ドメイン名アクセスを削除します。" + echo "7. IP+ポートアクセスを許可します。 8. IP+ポートアクセスをブロックします。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case $choice in 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーション外部サービスポートを入力し、デフォルトを入力します${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2771,7 +2771,7 @@ while true; do add_app_id clear - echo "$docker_nameインストール" + echo "$docker_nameインストール完了" check_docker_app_ip echo "" $docker_use @@ -2786,7 +2786,7 @@ while true; do add_app_id clear - echo "$docker_nameインストール" + echo "$docker_nameインストール完了" check_docker_app_ip echo "" $docker_use @@ -2805,15 +2805,15 @@ while true; do ;; 5) - echo "${docker_name}ドメインアクセス設定" - send_stats "${docker_name}ドメインアクセス設定" + echo "${docker_name}ドメイン名アクセス設定" + send_stats "${docker_name}ドメイン名アクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "ドメイン名の形式 example.com (https:// なし)" web_del ;; @@ -2860,14 +2860,14 @@ docker_app_plus() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. インストール 2. アップデート 3. アンインストール" echo "------------------------" - echo "5.ドメイン名アクセスを追加6。ドメイン名アクセスを削除する" - echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス" + echo "5. ドメイン名アクセスを追加します。 6. ドメイン名アクセスを削除します。" + echo "7. IP+ポートアクセスを許可します。 8. IP+ポートアクセスをブロックします。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) setup_docker_dir @@ -2902,15 +2902,15 @@ docker_app_plus() { block_container_port "$docker_name" "$ipv4_address" ;; 6) - echo "ドメイン名フォーマットexample.comにはhttps://が付属していません" + echo "ドメイン名の形式 example.com (https:// なし)" web_del ;; 7) - send_stats "IPアクセスを許可します${docker_name}" + send_stats "IPアクセスを許可する${docker_name}" clear_container_rules "$docker_name" "$ipv4_address" ;; 8) - send_stats "IPアクセスをブロックします${docker_name}" + send_stats "IPアクセスをブロックする${docker_name}" block_container_port "$docker_name" "$ipv4_address" ;; *) @@ -3005,7 +3005,7 @@ while session_exists "$base_name-$tmuxd_ID"; do local tmuxd_ID=$((tmuxd_ID + 1)) done -# 新しいTMUXセッションを作成します +# 新しい tmux セッションを作成する tmux new -d -s "$base_name-$tmuxd_ID" "$tmuxd" @@ -3063,7 +3063,7 @@ server_reboot() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}现在重启服务器吗?(Y/N): ")" rboot case "$rboot" in [Yy]) - echo "再起動" + echo "再起動しました" reboot ;; *) @@ -3110,8 +3110,8 @@ ldnmp_install_status_one() { if docker inspect "php" &>/dev/null; then clear - send_stats "LDNMP環境を再度インストールできません" - echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイトの建設環境がインストールされています。再度インストールする必要はありません!" + send_stats "LDNMP環境を再インストールできません" + echo -e "${gl_huang}ヒント:${gl_bai}ウェブサイト構築環境を導入しました。再度インストールする必要はありません。" break_end linux_ldnmp fi @@ -3121,10 +3121,10 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP環境をインストールします" +send_stats "LDNMP環境をインストールする" root_use clear -echo -e "${gl_huang}LDNMP環境はインストールされていません。LDNMP環境のインストールを開始します...${gl_bai}" +echo -e "${gl_huang}LDNMP環境がインストールされていません。 LDNMP 環境のインストールを開始します...${gl_bai}" check_disk_space 3 /home check_port install_dependency @@ -3153,7 +3153,7 @@ 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 -e "現在のバージョン:${gl_huang}v$nginx_version${gl_bai}" echo "" } @@ -3164,7 +3164,7 @@ echo "" ldnmp_install_status() { if ! docker inspect "php" &>/dev/null; then - send_stats "LDNMP環境を最初にインストールしてください" + send_stats "最初に LDNMP 環境をインストールしてください" ldnmp_install_all fi @@ -3174,7 +3174,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "最初にNGINX環境をインストールしてください" + send_stats "まずnginx環境をインストールしてください" nginx_install_all fi @@ -3194,7 +3194,7 @@ ldnmp_web_on() { nginx_web_on() { clear - echo "あなたの$webname建てられた!" + echo "あなたの$webname建てられました!" echo "https://$yuming" } @@ -3207,7 +3207,7 @@ ldnmp_wp() { webname="WordPress" yuming="${1:-}" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3248,7 +3248,7 @@ ldnmp_Proxy() { port="${3:-}" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3257,7 +3257,7 @@ ldnmp_Proxy() { fi if [ -z "$port" ]; then - read -e -p "発生防止ポートを入力してください。" port + read -e -p "アンチジェネレーションポートを入力してください:" port fi nginx_install_status install_ssltls @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { fi if [ -z "$reverseproxy_port" ]; then - read -e -p "スペースで区切られた複数の生成防止IP+ポートを入力してください(たとえば、127.0.0.1:3000 127.0.1:3002):" reverseproxy_port + read -e -p "複数のアンチジェネレーション IP + ポートをスペースで区切って入力してください (例: 127.0.0.1:3000 127.0.0.1:3002):" reverseproxy_port fi nginx_install_status @@ -3358,7 +3358,7 @@ ldnmp_web_status() { echo "------------------------" echo "" - echo -e "データベース:${db_output}" + 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" @@ -3370,23 +3370,23 @@ ldnmp_web_status() { 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 "------------------------" - echo "1.ドメイン名証明書を適用/更新する2。サイトドメイン名を変更します" - echo "3.サイトキャッシュをクリーンアップ4。関連するサイトを作成する" + echo "1. ドメイン名証明書の適用/更新 2. サイトのドメイン名の複製" + echo "3. サイトのキャッシュをクリアします。 4. 関連するサイトを作成します。" echo "5. アクセスログの表示 6. エラーログの表示" echo "7. グローバル構成の編集 8. サイト構成の編集" - echo "9.サイトデータベースの管理10。サイト分析レポートを表示します" + echo "9. サイトデータベースの管理 10. サイト分析レポートの表示" echo "------------------------" echo "20. 指定したサイトデータを削除する" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) - send_stats "ドメイン名証明書を申請します" - read -e -p "ドメイン名を入力してください:" yuming + 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 @@ -3395,10 +3395,9 @@ ldnmp_web_status() { ;; 2) - send_stats "サイトのドメイン名を変更する" - echo -e "${gl_hong}強くお勧めします:${gl_bai}まずサイト全体のデータをバックアップしてから、サイトのドメイン名を変更してください。" - read -e -p "古いドメイン名を入力してください:" oddyuming - read -e -p "新しいドメイン名を入力してください:" yuming + send_stats "クローンサイトのドメイン名" + read -e -p "古いドメイン名を入力してください:" oddyuming + read -e -p "新しいドメイン名を入力してください:" yuming install_certbot install_ssltls certs_status @@ -3410,7 +3409,7 @@ ldnmp_web_status() { 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;" + # 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 }') @@ -3421,19 +3420,19 @@ ldnmp_web_status() { done done - # ウェブサイトディレクトリの交換 - mv /home/web/html/$oddyuming /home/web/html/$yuming + # Web サイトのディレクトリの置き換え + cp -r /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 + cp /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 + # rm /home/web/certs/${oddyuming}_key.pem + # rm /home/web/certs/${oddyuming}_cert.pem - docker exec nginx nginx -s reload + cd /home/web && docker compose restart ;; @@ -3442,8 +3441,8 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "関連するサイトを作成します" - echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスします" + send_stats "関連サイトの作成" + echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスする" read -e -p "既存のドメイン名を入力してください:" oddyuming read -e -p "新しいドメイン名を入力してください:" yuming install_certbot @@ -3459,17 +3458,17 @@ ldnmp_web_status() { ;; 5) - send_stats "アクセスログを表示します" + send_stats "アクセスログを見る" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "エラーログを表示します" + send_stats "エラーログを表示する" tail -n 200 /home/web/log/nginx/error.log break_end ;; 7) - send_stats "グローバル構成を編集します" + send_stats "グローバル構成の編集" install nano nano /home/web/nginx.conf docker exec nginx nginx -s reload @@ -3477,7 +3476,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3554,7 +3553,7 @@ while true; do panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}アンインストール" + send_stats "${panelname}アンインストールする" ;; *) break @@ -3623,14 +3622,14 @@ EOF # 生成された情報を出力する ip_address echo "------------------------" - echo "クライアントの展開に必要なパラメーター" - echo "サービスIP:$ipv4_address" + 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 "FRP パネルのユーザー名:$dashboard_user" + echo "FRPパネルのパスワード:$dashboard_pwd" echo open_port 8055 8056 @@ -3640,7 +3639,7 @@ EOF configure_frpc() { - send_stats "FRPクライアントをインストールします" + send_stats "FRPクライアントをインストールする" read -e -p "外部ネットワークのドッキング IP を入力してください:" server_addr read -e -p "外部ネットワーク ドッキング トークンを入力してください:" token echo @@ -3663,8 +3662,8 @@ EOF add_forwarding_service() { send_stats "FRPイントラネットサービスを追加" - # ユーザーにサービス名と転送情報を入力するように促します - read -e -p "サービス名を入力してください:" service_name + # ユーザーにサービス名と転送情報の入力を求めるプロンプトを表示します + read -e -p "サービス名を入力してください:" service_name read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp を入力する]:" service_type local service_type=${service_type:-tcp} read -e -p "イントラネット IP を入力してください [Enter キーを押すときのデフォルトは 127.0.0.1]:" local_ip @@ -3694,12 +3693,12 @@ EOF delete_forwarding_service() { - send_stats "FRPイントラネットサービスを削除します" - # ユーザーに削除する必要があるサービス名を入力するように促します + send_stats "FRPイントラネットサービスの削除" + # 削除する必要があるサービスの名前を入力するようにユーザーに求めます read -e -p "削除するサービス名を入力してください:" service_name - # SEDを使用して、サービスとその関連構成を削除します + # sed を使用してサービスとその関連構成を削除します sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml - echo "仕える$service_nameFRPC.TOMLから削除されました" + echo "仕える$service_namefrpc.toml から正常に削除されました" docker restart frpc @@ -3743,7 +3742,7 @@ list_forwarding_services() { if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前の値をクリアします + # 前回の値をクリア local_ip="" local_port="" remote_port="" @@ -3772,7 +3771,7 @@ list_forwarding_services() { } END { - # 最後のサービスの情報を印刷します + # 最後のサービスに関する情報を出力します if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3792,7 +3791,7 @@ get_frp_ports() { # アクセスアドレスの生成 generate_access_urls() { - # 最初にすべてのポートを取得します + # まずすべてのポートを取得します get_frp_ports # 8055/8056以外のポートがあるか確認する @@ -3815,7 +3814,7 @@ generate_access_urls() { fi done - # IPv6アドレスを処理する(存在する場合) + # IPv6 アドレスが存在する場合は処理します if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3824,7 +3823,7 @@ generate_access_urls() { done fi - # HTTPS構成の処理 + # HTTPS 構成を処理する for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -3861,7 +3860,7 @@ frps_panel() { check_docker_image_update $docker_name echo -e "FRPサーバー$check_frp $update_status" echo "FRPイントラネットペネトレーションサービス環境を構築し、パブリックIPを持たないデバイスをインターネットに公開" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/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 @@ -3869,7 +3868,7 @@ frps_panel() { fi echo "" echo "------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. インストール 2. アップデート 3. アンインストール" echo "------------------------" echo "5. イントラネット サービスのドメイン名アクセス 6. ドメイン名アクセスの削除" echo "------------------------" @@ -3877,7 +3876,7 @@ frps_panel() { echo "------------------------" echo "00. サービスステータスを更新します。 0. 前のメニューに戻ります。" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) install jq grep ss @@ -3885,7 +3884,7 @@ frps_panel() { generate_frps_config add_app_id - echo "FRPサーバーがインストールされています" + echo "FRPサーバーを導入しました" ;; 2) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3895,7 +3894,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRPサーバーが更新されました" + echo "FRPサーバーを更新しました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3910,9 +3909,9 @@ frps_panel() { ;; 5) echo "ドメイン名アクセスへのイントラネット侵入サービスのリバース" - send_stats "FRP外部ドメイン名へのアクセス" + send_stats "FRP 外部ドメイン名アクセス" add_yuming - read -e -p "イントラネット侵入サービスポートを入力してください:" frps_port + read -e -p "イントラネット侵入サービス ポートを入力してください:" frps_port ldnmp_Proxy ${yuming} 127.0.0.1 ${frps_port} block_host_port "$frps_port" "$ipv4_address" ;; @@ -3922,21 +3921,21 @@ frps_panel() { ;; 7) - send_stats "IPアクセスを許可します" - read -e -p "リリースするポートを入力してください:" frps_port + 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 + send_stats "IPアクセスをブロックする" + echo "ドメイン名アクセスを逆にしている場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全になります。" + read -e -p "ブロックするポートを入力してください:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) - send_stats "FRPサービスステータスを更新します" - echo "FRPサービスステータスは更新されました" + send_stats "FRPサービスステータスを更新" + echo "FRPサービスステータスが更新されました" ;; *) @@ -3959,8 +3958,8 @@ frpc_panel() { check_docker_image_update $docker_name echo -e "FRPクライアント$check_frp $update_status" echo "サーバーに接続します。接続後、インターネットにアクセスするためのイントラネット侵入サービスを作成できます。" - echo "公式ウェブサイトの紹介:https://github.com/fatedier/frp/" - echo "ビデオ教育:https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + echo "公式サイト紹介:https://github.com/fatedier/frp/" + echo "ビデオチュートリアル: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then [ -f /home/frp/frpc.toml ] || cp /home/frp/frp_0.61.0_linux_amd64/frpc.toml /home/frp/frpc.toml @@ -3970,7 +3969,7 @@ frpc_panel() { echo "------------------------" echo "1. インストール 2. アップデート 3. アンインストール" echo "------------------------" - echo "4.外部サービスの追加5.外部サービスを削除6。サービスを手動で構成する" + echo "4. 外部サービスの追加 5. 外部サービスの削除 6. サービスの手動構成" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4003,7 +4002,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" ;; 4) @@ -4054,36 +4053,36 @@ yt_menu_pro() { echo -e "yt-dlp は、YouTube、Bilibili、Twitter などの何千ものサイトをサポートする強力な動画ダウンロード ツールです。" echo -e "公式サイトアドレス:https://github.com/yt-dlp/yt-dlp" echo "-------------------------" - echo "ダウンロードされたビデオリスト:" + echo "ダウンロードしたビデオのリスト:" ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(まだありません)" echo "-------------------------" - echo "1。インストール2。更新3。アンインストール" + echo "1. インストール 2. アップデート 3. アンインストール" echo "-------------------------" echo "5. 単一ビデオのダウンロード 6. バッチビデオのダウンロード 7. カスタムパラメータのダウンロード" echo "8. MP3 オーディオとしてダウンロード 9. ビデオ ディレクトリを削除 10. Cookie 管理 (開発中)" echo "-------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "-------------------------" read -e -p "オプション番号を入力してください:" choice case $choice in 1) send_stats "yt-dlp をインストールしています..." - echo "YT-DLPのインストール..." + echo "yt-dlp をインストールしています..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp add_app_id - echo "インストールが完了しました。任意のキーを押して続行します..." + echo "インストールが完了しました。続行するには任意のキーを押してください..." read ;; 2) - send_stats "yt-dlpを更新..." - echo "yt-dlpを更新..." + send_stats "yt-dlp を更新しています..." + echo "yt-dlp を更新しています..." yt-dlp -U add_app_id - echo "更新が完了しました。任意のキーを押して続行します..." + echo "アップデートが完了しました。続行するには任意のキーを押してください..." read ;; 3) send_stats "yt-dlp をアンインストールしています..." @@ -4091,18 +4090,18 @@ yt_menu_pro() { rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アンインストールが完了しました。任意のキーを押して続行します..." + echo "アンインストールが完了しました。続行するには任意のキーを押してください..." read ;; 5) send_stats "単一のビデオのダウンロード" - read -e -p "ビデオリンクを入力してください:" url + 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 "ダウンロードが完了したら、任意のキーを押して続行します..." ;; + read -e -p "ダウンロードが完了しました。続行するには任意のキーを押してください..." ;; 6) send_stats "ビデオのバッチダウンロード" install nano @@ -4121,7 +4120,7 @@ yt_menu_pro() { read -e -p "バッチダウンロードが完了しました。続行するには任意のキーを押してください..." ;; 7) send_stats "カスタムビデオのダウンロード" - read -e -p "完全なYT-DLPパラメーター(YT-DLPを除く)を入力してください。" custom + read -e -p "完全な yt-dlp パラメータを入力してください (yt-dlp を除く)。" custom yt-dlp -P "$VIDEO_DIR" $custom \ --write-subs --sub-langs all \ --write-thumbnail --embed-thumbnail \ @@ -4141,7 +4140,7 @@ yt_menu_pro() { read -e -p "音声のダウンロードが完了しました。続行するには任意のキーを押してください..." ;; 9) - send_stats "ビデオを削除します" + send_stats "ビデオを削除する" read -e -p "削除されたビデオの名前を入力してください:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; @@ -4187,7 +4186,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}システムの更新...${gl_bai}" + echo -e "${gl_huang}システムアップデート中です...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4245,7 +4244,7 @@ linux_clean() { elif command -v apk &>/dev/null; then echo "パッケージマネージャーのキャッシュをクリーンアップ..." apk cache clean - echo "システムログを削除してください..." + echo "システムログを削除します..." rm -rf /var/log/* echo "APKキャッシュを削除..." rm -rf /var/cache/apk/* @@ -4277,7 +4276,7 @@ linux_clean() { pkg autoremove -y echo "パッケージマネージャーのキャッシュをクリーンアップ..." pkg clean -y - echo "システムログを削除してください..." + echo "システムログを削除します..." rm -rf /var/log/* echo "一時ファイルを削除します..." rm -rf /tmp/* @@ -4327,19 +4326,19 @@ chattr +i /etc/resolv.conf set_dns_ui() { root_use -send_stats "DNSを最適化します" +send_stats "DNSの最適化" while true; do clear - echo "DNSアドレスを最適化します" + echo "DNSアドレスを最適化する" echo "------------------------" echo "現在のDNSアドレス" cat /etc/resolv.conf echo "------------------------" echo "" - echo "1。外国DNS最適化:" + 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 "2.国内DNSの最適化:" echo " v4: 223.5.5.5 183.60.83.19" echo " v6: 2400:3200::1 2400:da00::6666" echo "3. DNS 設定を手動で編集する" @@ -4354,7 +4353,7 @@ while true; do local dns1_ipv6="2606:4700:4700::1111" local dns2_ipv6="2001:4860:4860::8888" set_dns - send_stats "外国のDNS最適化" + send_stats "外部DNSの最適化" ;; 2) local dns1_ipv4="223.5.5.5" @@ -4362,7 +4361,7 @@ while true; do local dns1_ipv6="2400:3200::1" local dns2_ipv6="2400:da00::6666" set_dns - send_stats "国内のDNS最適化" + send_stats "国内DNS最適化" ;; 3) install nano @@ -4417,7 +4416,7 @@ correct_ssh_config() { new_ssh_port() { - # バックアップSSH構成ファイル + # SSH設定ファイルをバックアップする cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config @@ -4448,7 +4447,7 @@ add_sshkey() { chmod 600 ~/.ssh/authorized_keys ip_address - echo -e "秘密のキー情報が生成されました。必ずコピーして保存してください。${gl_huang}${ipv4_address}_ssh.key${gl_bai}今後の SSH ログイン用のファイル" + echo -e "秘密鍵情報が生成されました。必ずコピーして保存してください。として保存できます${gl_huang}${ipv4_address}_ssh.key${gl_bai}今後の SSH ログイン用のファイル" echo "--------------------------------" cat ~/.ssh/sshkey @@ -4460,14 +4459,14 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ルートプライベートキーログインが有効になり、ルートパスワードログインが閉じられ、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}ROOT 秘密キー ログインがオンになり、ROOT パスワード ログインがオフになり、再接続が有効になります。${gl_bai}" } import_sshkey() { - read -e -p "SSH公開キーの内容を入力してください(通常は「SSH-RSA」または「SSH-ED25519」から始まります):" public_key + read -e -p "SSH 公開キーの内容を入力してください (通常は「ssh-rsa」または「ssh-ed25519」で始まります):" public_key if [[ -z "$public_key" ]]; then echo -e "${gl_hong}エラー: 公開キーの内容が入力されていません。${gl_bai}" @@ -4497,20 +4496,20 @@ import_sshkey() { add_sshpasswd() { -echo "ルートパスワードを設定します" +echo "ROOTパスワードを設定する" 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を使用するには、root ユーザーが実行する必要があります。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion } @@ -4527,7 +4526,7 @@ dd_xitong() { } dd_xitong_1() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}初期パスワード:${gl_huang}LeitboGi0ro${gl_bai}初期ポート:${gl_huang}22${gl_bai}" + 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 @@ -4535,7 +4534,7 @@ dd_xitong() { } dd_xitong_2() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}Administrator${gl_bai}初期パスワード:${gl_huang}Teddysun.com${gl_bai}初期ポート:${gl_huang}3389${gl_bai}" + 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 @@ -4543,15 +4542,15 @@ dd_xitong() { } dd_xitong_3() { - echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}最初のパスワード:${gl_huang}123@@@${gl_bai}初期ポート:${gl_huang}22${gl_bai}" - echo -e "任意のキーを押して続行します..." + 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 "任意のキーを押して続行します..." + 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 } @@ -4560,8 +4559,8 @@ dd_xitong() { root_use echo "システムを再インストールする" echo "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - echo -e "${gl_hui}LeitbogioroとBin456789のスクリプトサポートのおかげです!${gl_bai} " + echo -e "${gl_hong}知らせ:${gl_bai}再インストールすると接続が切れる可能性がありますので、不安な方はご注意ください。再インストールには 15 分程度かかることが予想されますので、事前にデータをバックアップしてください。" + echo -e "${gl_hui}スクリプトをサポートしてくれたボス leitbogioro とボス bin456789 に感謝します。${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -4577,7 +4576,7 @@ dd_xitong() { echo "------------------------" echo "31. Alpine Linux 32. Arch Linux" echo "33. Kali Linux 34. openEuler" - echo "35。OpenSuseTumbleWeed36。FNOSFEINIU PUBLIC BETAバージョン" + echo "35. openSUSE Tumbleweed 36. fnos Feiniu パブリックベータ版" echo "------------------------" echo "41. Windows 11 42. Windows 10" echo "43. Windows 7 44. Windows Server 2025" @@ -4586,7 +4585,7 @@ dd_xitong() { echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "再インストールするシステムを選択してください:" sys_choice + read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in @@ -4620,7 +4619,7 @@ dd_xitong() { exit ;; 11) - send_stats "Ubuntu 24.04を再インストールします" + send_stats "ubuntu 24.04を再インストールします" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot @@ -4666,7 +4665,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールします" + send_stats "alma10を再インストールする" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4714,7 +4713,7 @@ dd_xitong() { ;; 29) - send_stats "CENTOS10を再インストールします" + send_stats "centos10を再インストールする" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4721,7 @@ dd_xitong() { ;; 30) - send_stats "CENTOS9を再インストールします" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4738,7 +4737,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールします" + send_stats "アーチを再インストールする" dd_xitong_3 bash reinstall.sh arch reboot @@ -4754,7 +4753,7 @@ dd_xitong() { ;; 34) - send_stats "Openeulerを再インストールします" + send_stats "オープニューラーを再インストールする" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4802,7 +4801,7 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 25を再インストールします" + send_stats "Windowsサーバー25を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2025 -lang "cn" reboot @@ -4826,7 +4825,7 @@ dd_xitong() { ;; 47) - send_stats "Windows11アームを再インストールします" + send_stats "Windows11 ARMを再インストールする" dd_xitong_4 bash reinstall.sh dd --img https://r2.hotdog.eu.org/win11-arm-with-pagefile-15g.xz reboot @@ -4843,7 +4842,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3管理" + send_stats "bbrv3管理" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4856,17 +4855,17 @@ bbrv3() { while true; do clear local kernel_version=$(uname -r) - echo "XanmodのBBRV3カーネルをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "xanmod の BBRv3 カーネルがインストールされている" + echo "現在のカーネル バージョン:$kernel_version" echo "" echo "カーネル管理" echo "------------------------" - echo "1。BBRV3カーネルを更新します2。BBRV3カーネルをアンインストールします" + echo "1. BBRv3 カーネルを更新します。 2. BBRv3 カーネルをアンインストールします。" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) @@ -4895,7 +4894,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "Xanmodカーネルはアンインストールされています。再起動後に有効になります" + echo "XanMod カーネルがアンインストールされました。再起動後に有効になります" server_reboot ;; @@ -4911,7 +4910,7 @@ bbrv3() { echo "BBR3アクセラレーションの設定" echo "ビデオ紹介: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "Debian/Ubuntuのみをサポートします" + echo "Debian/Ubuntu のみをサポートします" echo "データをバックアップしてください。Linux カーネルをアップグレードして BBR3 を有効にします。" echo "------------------------------------------------" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice @@ -4949,7 +4948,7 @@ bbrv3() { bbr_on - echo "Xanmodカーネルがインストールされ、BBR3が正常に有効になります。再起動後に有効になります" + echo "XanMod カーネルがインストールされ、BBR3 が正常に有効になります。再起動後に有効になります" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4959,7 +4958,7 @@ bbrv3() { echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac fi @@ -4969,28 +4968,28 @@ bbrv3() { elrepo_install() { # ELRepo GPG 公開キーをインポートする - echo "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" - # システムバージョンに応じて、対応するElrepo Warehouse構成をインストールする + # 検出されたオペレーティング システム情報を印刷する + echo "検出されたオペレーティング システム:$os_name $os_version" + # システムのバージョンに応じて、対応する ELRepo ウェアハウス構成をインストールします。 if [[ "$os_version" == 8 ]]; then - echo "Elrepoリポジトリ構成(バージョン8)をインストールしてください..." + 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)をインストールしてください..." + echo "ELRepo リポジトリ構成 (バージョン 9) をインストールしています..." yum -y install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm elif [[ "$os_version" == 10 ]]; then - echo "Elrepoリポジトリ構成(バージョン10)をインストールしてください..." + echo "ELRepo リポジトリ構成 (バージョン 10) をインストールしています..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else echo "サポートされていないシステム バージョン:$os_version" @@ -5001,7 +5000,7 @@ elrepo_install() { echo "ELRepo カーネル リポジトリを有効にし、最新のメインライン カーネルをインストールします..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml - echo "Elrepoリポジトリ構成がインストールされ、最新のメインラインカーネルに更新されます。" + echo "ELRepo リポジトリ構成をインストールし、最新のメインライン カーネルに更新しました。" server_reboot } @@ -5009,12 +5008,12 @@ elrepo_install() { elrepo() { root_use - send_stats "レッドハットカーネル管理" + send_stats "Red Hat カーネル管理" if uname -r | grep -q 'elrepo'; then while true; do clear kernel_version=$(uname -r) - echo "Elrepo Kernelをインストールしました" + echo "elrepo カーネルがインストールされています" echo "現在のカーネル バージョン:$kernel_version" echo "" @@ -5024,7 +5023,7 @@ elrepo() { echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) @@ -5038,8 +5037,8 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "Elrepoカーネルはアンインストールされています。再起動後に有効になります" - send_stats "レッドハットカーネルをアンインストールします" + echo "elrepo カーネルがアンインストールされました。再起動後に有効になります" + send_stats "Red Hat カーネルをアンインストールする" server_reboot ;; @@ -5055,8 +5054,8 @@ elrepo() { echo "データをバックアップしてください。Linux カーネルをアップグレードします。" echo "ビデオ紹介: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "レッドハットシリーズの分布のみをサポートしますCentos/Redhat/Alma/Rocky/Oracle" - echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" + echo "Red Hat シリーズのディストリビューション CentOS/RedHat/Alma/Rocky/oracle のみをサポートします" + echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試して、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice @@ -5096,7 +5095,7 @@ clamav_scan() { return fi - echo -e "${gl_huang}スキャンディレクトリ$@...${gl_bai}" + echo -e "${gl_huang}ディレクトリ $@ をスキャンしています...${gl_bai}" # ビルドマウントパラメータ local MOUNT_PARAMS="" @@ -5104,7 +5103,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # CLAMSCANコマンドパラメーターを作成します + # clamscan コマンドパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5122,8 +5121,8 @@ clamav_scan() { 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}" + 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}" } @@ -5139,19 +5138,19 @@ clamav() { while true; do clear echo "Clamav ウイルス スキャン ツール" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1tqvze4eqm?t=0.1" + 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 -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 "フルディスクスキャン" + send_stats "フルスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5160,7 +5159,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリスキャン" + send_stats "重要なディレクトリのスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5186,9 +5185,9 @@ clamav() { -# 高性能モード最適化関数 +# ハイパフォーマンスモード最適化機能 optimize_high_performance() { - echo -e "${gl_lv}に切り替えます${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}に切り替える${tiaoyou_moshi}...${gl_bai}" echo -e "${gl_lv}ファイル記述子を最適化します...${gl_bai}" ulimit -n 65535 @@ -5221,13 +5220,13 @@ optimize_high_performance() { echo -e "${gl_lv}その他の最適化...${gl_bai}" # 透明な巨大ページを無効にして遅延を軽減する echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # NUMA バランシングを無効にする sysctl -w kernel.numa_balancing=0 2>/dev/null } -# イコライゼーションモード最適化関数 +# バランスモード最適化機能 optimize_balanced() { echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" @@ -5260,17 +5259,17 @@ optimize_balanced() { 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バランスを復元します + # NUMA バランスを復元する sysctl -w kernel.numa_balancing=1 2>/dev/null } -# デフォルト設定関数を復元します +# デフォルト設定に戻す機能 restore_defaults() { - echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}" + echo -e "${gl_lv}デフォルト設定に戻す...${gl_bai}" echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}" ulimit -n 1024 @@ -5282,7 +5281,7 @@ restore_defaults() { 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}" + 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 @@ -5303,7 +5302,7 @@ restore_defaults() { echo -e "${gl_lv}他の最適化を元に戻します...${gl_bai}" # 透明な巨大ページを復元する echo always > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを復元します + # NUMA バランスを復元する sysctl -w kernel.numa_balancing=1 2>/dev/null } @@ -5345,7 +5344,7 @@ optimize_web_server() { echo -e "${gl_lv}その他の最適化...${gl_bai}" # 透明な巨大ページを無効にして遅延を軽減する echo never > /sys/kernel/mm/transparent_hugepage/enabled - # numaバランスを無効にします + # NUMA バランシングを無効にする sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5357,29 +5356,29 @@ Kernel_optimize() { while true; do clear send_stats "Linuxカーネルチューニング管理" - echo "Linuxシステムにおけるカーネルパラメーターの最適化" + echo "Linuxシステムのカーネルパラメータの最適化" 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 "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常の使用に適しています。" echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" - echo "5。ゲームサーバーの最適化モード:ゲームサーバーを最適化して、同時処理機能と応答速度を改善します。" + echo "5. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" echo "6. デフォルト設定の復元: システム設定をデフォルト構成に復元します。" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "--------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) cd ~ clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能モードの最適化" + send_stats "ハイパフォーマンスモードの最適化" ;; 2) cd ~ @@ -5391,14 +5390,14 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイトの最適化モデル" + send_stats "ウェブサイト最適化モード" ;; 4) cd ~ clear local tiaoyou_moshi="直播优化模式" optimize_high_performance - send_stats "ライブストリーミング最適化" + send_stats "ライブストリーミングの最適化" ;; 5) cd ~ @@ -5438,7 +5437,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}システム言語は次のように変更されています。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されました。$lang有効にするには、SSH に再接続します。${gl_bai}" hash -r break_end @@ -5447,12 +5446,12 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}システム言語は次のように変更されました。$langSSHの再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}システム言語は次のように変更されました。$lang有効にするには、SSH に再接続します。${gl_bai}" hash -r break_end ;; *) - echo "サポートされていないシステム:$ID" + echo "サポートされていないシステム:$ID" break_end ;; esac @@ -5467,16 +5466,16 @@ update_locale() { linux_language() { root_use -send_stats "システム言語を切り替えます" +send_stats "システム言語を切り替える" while true; do clear - echo "現在のシステム言語:$LANG" + echo "現在のシステム言語:$LANG" echo "------------------------" echo "1. 英語 2. 簡体字中国語 3. 繁体字中国語" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -5511,7 +5510,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}変更が完了します。 SSHを再接続して変更を表示します!${gl_bai}" +echo -e "${gl_lv}変更が完了しました。 SSH に再接続して変更を確認してください。${gl_bai}" hash -r break_end @@ -5522,7 +5521,7 @@ break_end shell_bianse() { root_use - send_stats "コマンドラインの美化ツール" + send_stats "コマンドライン美化ツール" while true; do clear echo "コマンドライン美化ツール" @@ -5535,9 +5534,9 @@ shell_bianse() { 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 "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -5582,7 +5581,7 @@ shell_bianse() { linux_trash() { root_use - send_stats "システムリサイクルステーション" + send_stats "システムのごみ箱" local bashrc_profile="/root/.bashrc" local TRASH_DIR="$HOME/.local/share/Trash/files" @@ -5597,13 +5596,13 @@ linux_trash() { fi clear - echo -e "現在のリサイクルビン${trash_status}" + echo -e "現在のごみ箱${trash_status}" echo -e "有効にすると、重要なファイルを誤って削除することを防ぐために、rm によって削除されたファイルは最初にごみ箱に入れられます。" echo "------------------------------------------------" - ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "リサイクルビンは空です" + ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "ごみ箱が空です" echo "------------------------" - echo "1.リサイクルビン2を有効にします。リサイクルビンを閉じます" - echo "3。コンテンツを復元4。リサイクルビンをクリアします" + echo "1. ごみ箱を有効にする 2. ごみ箱を閉じる" + echo "3. コンテンツを復元する 4. ごみ箱を空にする" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -5615,7 +5614,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='trash-put'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが有効になり、削除されたファイルがリサイクルビンに移動されます。" + echo "ごみ箱が有効になっていると、削除されたファイルはごみ箱に移動されます。" sleep 2 ;; 2) @@ -5623,11 +5622,11 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "リサイクルビンが閉じられ、ファイルが直接削除されます。" + echo "ごみ箱が閉じられ、ファイルは直接削除されます。" sleep 2 ;; 3) - read -e -p "復元するにはファイル名を入力してください。" file_to_restore + 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ホームディレクトリに復元されました。" @@ -5636,10 +5635,10 @@ linux_trash() { fi ;; 4) - read -e -p "リサイクルビンをクリアすることを確認しますか? [Y/N]:" confirm + read -e -p "ごみ箱を空にしてもよろしいですか? [y/n]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "リサイクルビンがクリアされました。" + echo "ごみ箱が空になりました。" fi ;; *) @@ -5654,17 +5653,17 @@ send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップを作成します +# バックアップの作成 create_backup() { send_stats "バックアップの作成" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する echo "バックアップの作成例:" - echo "- 単一のディレクトリをバックアップします: /var /www" - echo "- バックアップ複数のディレクトリ: /etc /home /var /log" - echo "-directEnterはデフォルトのディレクトリ( /etc /usr /home)を使用します" - read -r -p "ディレクトリを入力してバックアップしてください(複数のディレクトリがスペースで区切られています。直接入力する場合は、デフォルトのディレクトリを使用してください):" input + echo "- 単一ディレクトリをバックアップします: /var/www" + echo "- 複数のディレクトリをバックアップします: /etc /home /var/log" + echo "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" + read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" input # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリが使用されます。 if [ -z "$input" ]; then @@ -5692,7 +5691,7 @@ create_backup() { # バックアップファイル名の生成 local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" - # ユーザーが選択したディレクトリを印刷します + # ユーザーが選択した印刷ディレクトリ echo "選択したバックアップ ディレクトリは次のとおりです。" for path in "${BACKUP_PATHS[@]}"; do echo "- $path" @@ -5715,27 +5714,27 @@ create_backup() { # バックアップを復元する restore_backup() { send_stats "バックアップを復元する" - # 復元するバックアップを選択します - read -e -p "復元するには、バックアップファイル名を入力してください。" BACKUP_NAME + # 復元するバックアップを選択してください + read -e -p "復元するバックアップ ファイル名を入力してください:" BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # バックアップファイルが存在するか確認する if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then - echo "バックアップファイルは存在しません!" + echo "バックアップファイルが存在しません!" exit 1 fi - echo "バックアップの回復$BACKUP_NAME..." + echo "バックアップの復元$BACKUP_NAME..." tar -xzvf "$BACKUP_DIR/$BACKUP_NAME" -C / if [ $? -eq 0 ]; then - echo "バックアップと復元を正常に!" + echo "バックアップと復元が成功しました。" else - echo "バックアップリカバリが失敗しました!" + echo "バックアップ復元に失敗しました!" exit 1 fi } -# バックアップをリストします +# バックアップの一覧表示 list_backups() { echo "利用可能なバックアップ:" ls -1 "$BACKUP_DIR" @@ -5745,9 +5744,9 @@ list_backups() { delete_backup() { send_stats "バックアップの削除" - read -e -p "削除するには、バックアップファイル名を入力してください。" BACKUP_NAME + read -e -p "削除するバックアップ ファイル名を入力してください:" BACKUP_NAME - # バックアップファイルが存在するかどうかを確認します + # バックアップファイルが存在するか確認する if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then echo "バックアップファイルが存在しません!" exit 1 @@ -5757,7 +5756,7 @@ delete_backup() { rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "バックアップは正常に削除されました!" + echo "バックアップが正常に削除されました。" else echo "バックアップの削除に失敗しました!" exit 1 @@ -5777,16 +5776,16 @@ linux_backup() { echo "------------------------" echo "1. バックアップの作成 2. バックアップの復元 3. バックアップの削除" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case $choice in 1) create_backup ;; 2) restore_backup ;; 3) delete_backup ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -5807,47 +5806,47 @@ list_connections() { } -# 新しい接続を追加します +# 新しい接続を追加 add_connection() { send_stats "新しい接続を追加" echo "新しい接続を作成する例:" echo "- 接続名: my_server" echo "- IP アドレス: 192.168.1.100" - echo "- ユーザー名:root" - echo "- ポート:22" + echo "- ユーザー名: root" + echo "- ポート: 22" echo "------------------------" - read -e -p "接続名を入力してください:" name - read -e -p "IPアドレスを入力してください:" ip - read -e -p "ユーザー名(デフォルト:root)を入力してください:" user + read -e -p "接続名を入力してください:" name + read -e -p "IP アドレスを入力してください:" ip + read -e -p "ユーザー名を入力してください (デフォルト: root):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "ポート番号を入力してください(デフォルト:22):" port + read -e -p "ポート番号を入力してください (デフォルト: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 echo "認証方法を選択してください:" echo "1. パスワード" echo "2. キー" - read -e -p "選択(1/2)を入力してください:" auth_choice + read -e -p "選択肢を入力してください (1/2):" auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 ;; 2) echo "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" 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" @@ -5867,10 +5866,10 @@ add_connection() { -# 接続を削除します +# 接続の削除 delete_connection() { - send_stats "接続を削除します" - read -e -p "削除するには、接続番号を入力してください。" num + send_stats "接続の削除" + read -e -p "削除する接続番号を入力してください:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then @@ -5880,23 +5879,23 @@ delete_connection() { 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 "接続が削除されました!" + echo "接続が削除されました!" } # 接続を使用する use_connection() { - send_stats "接続を使用します" + send_stats "接続を使用する" read -e -p "使用する接続番号を入力してください:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "エラー:対応する接続​​は見つかりませんでした。" + echo "エラー: 対応する接続​​が見つかりません。" return fi @@ -5904,11 +5903,11 @@ use_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 "接続に失敗しました!以下の点をご確認ください。" + echo "1. キーファイルのパスは正しいですか?$password_or_key" echo "2. キー ファイルのアクセス許可は正しいか (600 である必要があります)。" echo "3. ターゲットサーバーがキーを使用したログインを許可するかどうか。" fi @@ -5925,7 +5924,7 @@ use_connection() { if [[ $? -ne 0 ]]; then echo "接続に失敗しました!以下の点をご確認ください。" echo "1. ユーザー名とパスワードは正しいですか?" - echo "2。ターゲットサーバーがパスワードログインを許可するかどうか。" + echo "2. ターゲットサーバーがパスワードログインを許可するかどうか。" echo "3. 対象サーバのSSHサービスが正常に動作しているか。" fi fi @@ -5951,14 +5950,14 @@ ssh_manager() { while true; do clear echo "SSHリモート接続ツール" - echo "SSHを介して他のLinuxシステムに接続できます" + echo "SSH経由で他のLinuxシステムに接続可能" echo "------------------------" list_connections echo "1. 新しい接続を作成します。 2. 接続を使用します。 3. 接続を削除します。" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case $choice in 1) add_connection ;; 2) use_connection ;; @@ -5986,14 +5985,14 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントします +# パーティションのマウント mount_partition() { - send_stats "パーティションをマウントします" + send_stats "パーティションのマウント" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "パーティションが存在しません!" return fi @@ -6007,65 +6006,65 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントします + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "パーティションマウントに正常に:$MOUNT_POINT" + echo "パーティションは正常にマウントされました:$MOUNT_POINT" else - echo "パーティションマウントは失敗しました!" + echo "パーティションのマウントに失敗しました!" rmdir "$MOUNT_POINT" fi } -# パーティションをアンインストールします +# パーティションをアンマウントする unmount_partition() { - send_stats "パーティションをアンインストールします" - read -e -p "パーティション名(たとえば、SDA1)を入力してください。" PARTITION + send_stats "パーティションをアンマウントする" + read -e -p "アンマウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションがマウントされているかどうかを確認する MOUNT_POINT=$(lsblk -o MOUNTPOINT | grep -w "$PARTITION") if [ -z "$MOUNT_POINT" ]; then - echo "パーティションはマウントされていません!" + echo "パーティションがマウントされていません!" return fi - # パーティションをアンインストールします + # パーティションをアンマウントする umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティションのアンインストールに正常に:$MOUNT_POINT" + echo "パーティションが正常にアンインストールされました:$MOUNT_POINT" rmdir "$MOUNT_POINT" else - echo "パーティションのアンインストールに失敗しました!" + echo "パーティションのアンインストールに失敗しました!" fi } -# マウントされたパーティションをリストします +# マウントされたパーティションをリストする list_mounted_partitions() { - echo "マウントされたパーティション:" + echo "マウントされたパーティション:" df -h | grep -v "tmpfs\|udev\|overlay" } -# フォーマットパーティション +# パーティションをフォーマットする format_partition() { - send_stats "フォーマットパーティション" + 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 "パーティションがマウントされました。最初にアンインストールしてください!" + echo "パーティションはマウントされています。最初にアンマウントしてください。" return fi # ファイルシステムの種類を選択してください - echo "ファイルシステムタイプを選択してください:" + echo "ファイル システムのタイプを選択してください:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" @@ -6077,22 +6076,22 @@ format_partition() { 2) FS_TYPE="xfs" ;; 3) FS_TYPE="ntfs" ;; 4) FS_TYPE="vfat" ;; - *) echo "無効な選択!"; return ;; + *) echo "無効な選択です!"; return ;; esac # フォーマットの確認 - read -e -p "フォーマットされたパーティション /dev/ を確認します$PARTITIONのために$FS_TYPEそれですか? (y/n):" CONFIRM + read -e -p "フォーマットされたパーティション /dev/ を確認します$PARTITIONのために$FS_TYPE? (y/n):" CONFIRM if [ "$CONFIRM" != "y" ]; then echo "操作はキャンセルされました。" return fi # パーティションをフォーマットする - echo "パーティション /dev /のフォーマット /$PARTITIONのために$FS_TYPE ..." + echo "パーティション /dev/ をフォーマットしています$PARTITIONのために$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "パーティション形式は成功しました!" + echo "パーティションが正常にフォーマットされました。" else echo "パーティションのフォーマットに失敗しました!" fi @@ -6105,11 +6104,11 @@ check_partition() { # パーティションが存在するかどうかを確認する if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then - echo "パーティションは存在しません!" + echo "パーティションが存在しません!" return fi - # パーティションステータスを確認します + # パーティションのステータスを確認する echo "パーティション /dev/ を確認してください$PARTITION状態:" fsck "/dev/$PARTITION" } @@ -6119,7 +6118,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6127,7 +6126,7 @@ disk_manager() { echo "1. パーティションをマウントします。 2. パーティションをアンマウントします。 3. マウントされたパーティションを表示します。" echo "4. パーティションをフォーマットします。 5. パーティションのステータスを確認します。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" choice case $choice in @@ -6138,7 +6137,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6147,49 +6146,49 @@ disk_manager() { # タスクリストを表示 list_tasks() { - echo "保存された同期タスク:" + 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 "- ローカルディレクトリ: /var/www" + echo "- リモートアドレス: user@192.168.1.100" echo "- リモートディレクトリ: /backup/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 "リモート ユーザー@IP を入力してください:" remote read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port port=${port:-22} - echo "認証方法を選択してください:" - echo "1。パスワード" + echo "認証方法を選択してください:" + echo "1. パスワード" echo "2. キー" - read -e -p "(1/2)を選択してください:" auth_choice + read -e -p "(1/2) を選択してください:" auth_choice case $auth_choice in 1) - read -s -p "パスワードを入力してください:" password_or_key + read -s -p "パスワードを入力してください:" password_or_key echo # 换行 auth_method="password" ;; 2) - echo "キーコンテンツを貼り付けてください(貼り付け後に2回Enterを押します)を押してください):" + echo "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" 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 @@ -6215,12 +6214,12 @@ add_task() { echo "同期モードを選択してください:" echo "1. 標準モード (-avz)" - echo "2。ターゲットファイル(-avz - delete)を削除します" + echo "2. 対象ファイルを削除(-avz --delete)" read -e -p "(1/2) を選択してください:" mode case $mode in 1) options="-avz" ;; 2) options="-avz --delete" ;; - *) echo "無効な選択、デフォルト-AVZを使用します"; options="-avz" ;; + *) echo "選択が無効です。デフォルトの -avz を使用してください"; options="-avz" ;; esac echo "$name|$local_path|$remote|$remote_path|$port|$options|$auth_method|$password_or_key" >> "$CONFIG_FILE" @@ -6233,7 +6232,7 @@ add_task() { # タスクの削除 delete_task() { send_stats "同期タスクの削除" - read -e -p "削除するには、タスク番号を入力してください。" num + read -e -p "削除するタスク番号を入力してください:" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then @@ -6283,18 +6282,18 @@ run_task() { 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" + echo "ローカルへのプルと同期:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "同期をリモートエンドに押します:$local_path -> $remote:$remote_path" + echo "リモートエンドへのプッシュと同期:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi - # SSH接続の共通パラメーターを追加します + # SSH接続の共通パラメータを追加する local ssh_options="-p $port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" if [[ "$auth_method" == "password" ]]; then @@ -6307,14 +6306,14 @@ run_task() { 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" + echo "エラー: キー ファイルが存在しません:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "警告:キーファイルの権限が正しくなく、修理されています..." + echo "警告: キー ファイルのアクセス許可が正しくありません。修正中です..." chmod 600 "$password_or_key" fi @@ -6322,32 +6321,32 @@ run_task() { fi if [[ $? -eq 0 ]]; then - echo "同期は完了です!" + echo "同期が完了しました!" else - echo "同期は失敗しました!以下を確認してください。" + echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2。リモートホストにアクセスできますか?" - echo "3。認証情報は正しいですか?" - echo "4.ローカルおよびリモートディレクトリには正しいアクセス許可がありますか" + echo "2. リモートホストにアクセスできるかどうか" + echo "3. 認証情報は正しいですか?" + echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi } -# 時限タスクを作成します +# スケジュールされたタスクを作成する schedule_task() { - send_stats "同期タイミングタスクを追加します" + send_stats "同期スケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "エラー:有効なタスク番号を入力してください!" + echo "エラー: 有効なタスク番号を入力してください。" return fi echo "スケジュールされた実行間隔を選択してください:" echo "1) 1時間に1回実行" echo "2) 1日1回実行" - echo "3)週に1回実行します" - read -e -p "オプションを入力してください(1/2/3):" interval + echo "3) 週に1回実行" + read -e -p "オプションを入力してください (1/2/3):" interval local random_minute=$(shuf -i 0-59 -n 1) # 生成 0-59 之间的随机分钟数 local cron_time="" @@ -6355,7 +6354,7 @@ schedule_task() { 1) cron_time="$random_minute * * * *" ;; # 每小时,随机分钟执行 2) cron_time="$random_minute 0 * * *" ;; # 每天,随机分钟执行 3) cron_time="$random_minute 0 * * 1" ;; # 每周,随机分钟执行 - *) echo "エラー:有効なオプションを入力してください!" ; return ;; + *) echo "エラー: 有効なオプションを入力してください。" ; return ;; esac local cron_job="$cron_time k rsync_run $num" @@ -6363,7 +6362,7 @@ schedule_task() { # 同じタスクがすでに存在するかどうかを確認する if crontab -l | grep -q "k rsync_run $num"; then - echo "エラー:このタスクのタイミング同期はすでに存在しています!" + echo "エラー: このタスクのスケジュールされた同期はすでに存在します。" return fi @@ -6374,23 +6373,23 @@ schedule_task() { # スケジュールされたタスクを表示する view_tasks() { - echo "現在のタイミングタスク:" + echo "現在スケジュールされているタスク:" echo "---------------------------------" crontab -l | grep "k rsync_run" echo "---------------------------------" } -# タイミングタスクを削除します +# スケジュールされたタスクを削除する delete_task_schedule() { send_stats "同期のスケジュールされたタスクを削除する" - read -e -p "削除するには、タスク番号を入力してください。" num + read -e -p "削除するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "エラー: 有効なタスク番号を入力してください。" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "削除されたタスク番号$numタイミングタスク" + echo "タスク番号が削除されました$numスケジュールされたタスク" } @@ -6401,20 +6400,20 @@ rsync_manager() { while true; do clear - echo "RSYNCリモート同期ツール" - echo "リモートディレクトリ間の同期は、増分同期、効率的、安定性をサポートします。" + echo "Rsync リモート同期ツール" + echo "リモート ディレクトリ間の同期は、効率的で安定した増分同期をサポートしています。" echo "---------------------------------" list_tasks echo view_tasks echo echo "1. 新しいタスクを作成します。 2. タスクを削除します。" - echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する" - echo "5.タイミングタスクを作成6.タイミングタスクを削除します" + echo "3. リモート サイトへのローカル同期を実行します。 4. ローカル サイトへのリモート同期を実行します。" + echo "5. スケジュールされたタスクを作成します。 6. スケジュールされたタスクを削除します。" echo "---------------------------------" echo "0. 前のメニューに戻る" echo "---------------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6425,7 +6424,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6440,7 +6439,7 @@ rsync_manager() { linux_info() { clear - send_stats "システム情報クエリ" + send_stats "システム情報の問い合わせ" ip_address @@ -6490,7 +6489,7 @@ linux_info() { echo "" - echo -e "システム情報クエリ" + echo -e "システム情報の問い合わせ" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}ホスト名:${gl_bai}$hostname" echo -e "${gl_kjlan}システムバージョン:${gl_bai}$os_info" @@ -6498,31 +6497,31 @@ linux_info() { 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_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}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}$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}受け取った合計:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}送信合計:${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}ネットワークアルゴリズム:${gl_bai}$congestion_algorithm $queue_algorithm" + 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" + echo -e "${gl_kjlan}IPv4アドレス:${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6アドレス:${gl_bai}$ipv6_address" + 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}システム時間:${gl_bai}$timezone $current_time" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}実行時間:${gl_bai}$runtime" echo @@ -6537,39 +6536,39 @@ linux_tools() { while true; do clear - # send_stats「基本ツール」 + # 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}SUDOスーパー管理許可ツール${gl_kjlan}4. ${gl_bai}socat通信接続ツール" + echo -e "${gl_kjlan}3. ${gl_bai}sudo スーパー管理者特権ツール${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}unzip ZIP圧縮・解凍ツール${gl_kjlan}8. ${gl_bai}TAR GZ圧縮減圧ツール" - echo -e "${gl_kjlan}9. ${gl_bai}TMUXマルチチャネルバックグラウンドランニングツール${gl_kjlan}10. ${gl_bai}Live StreamingツールをエンコードするFFMPEGビデオ" + echo -e "${gl_kjlan}7. ${gl_bai}unzip ZIP圧縮・解凍ツール${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}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}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}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}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 + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) clear install curl clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" curl --help send_stats "カールをインストールする" ;; @@ -6585,9 +6584,9 @@ linux_tools() { clear install sudo clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" sudo --help - send_stats "sudoをインストールします" + send_stats "sudoをインストールする" ;; 4) clear @@ -6609,21 +6608,21 @@ linux_tools() { install iftop clear iftop - send_stats "IFTOPをインストールします" + send_stats "iftopをインストールする" ;; 7) clear install unzip clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" unzip - send_stats "Unzipをインストールします" + send_stats "インストール解凍" ;; 8) clear install tar clear - echo "ツールがインストールされており、使用方法は次のとおりです。" + echo "ツールはインストールされており、次のように使用されます。" tar --help send_stats "tarをインストールする" ;; @@ -6641,7 +6640,7 @@ linux_tools() { clear echo "ツールはインストールされており、次のように使用されます。" ffmpeg --help - send_stats "FFMPEGをインストールします" + send_stats "ffmpegをインストールする" ;; 11) @@ -6658,7 +6657,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールします" + send_stats "レンジャーをインストールする" ;; 13) clear @@ -6667,7 +6666,7 @@ linux_tools() { clear ncdu cd ~ - send_stats "NCDUをインストールします" + send_stats "ncdu をインストールする" ;; 14) clear @@ -6685,7 +6684,7 @@ linux_tools() { clear vim -h cd ~ - send_stats "VIMをインストールします" + send_stats "vimをインストールする" ;; 16) clear @@ -6694,7 +6693,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールします" + send_stats "ナノをインストールする" ;; @@ -6705,7 +6704,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールします" + send_stats "gitをインストールする" ;; 21) @@ -6713,7 +6712,7 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrixをインストールします" + send_stats "cmatrix をインストールする" ;; 22) clear @@ -6734,7 +6733,7 @@ linux_tools() { install nsnake clear nsnake - send_stats "nsnakeをインストールします" + send_stats "nsnakeをインストールする" ;; 28) clear @@ -6746,13 +6745,13 @@ linux_tools() { 31) clear - send_stats "すべてをインストールします" + 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 "すべてをインストールします(ゲームやスクリーンセーバーを除く)" + send_stats "すべてインストール (ゲームとスクリーンセーバーを除く)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; @@ -6767,13 +6766,13 @@ linux_tools() { clear read -e -p "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" installname install $installname - send_stats "指定されたソフトウェアをインストールします" + send_stats "指定されたソフトウェアをインストールする" ;; 42) clear read -e -p "アンインストールされたツール名 (htop ufw tmux cmatrix) を入力してください:" removename remove $removename - send_stats "指定されたソフトウェアをアンインストールします" + send_stats "指定したソフトウェアをアンインストールする" ;; 0) @@ -6801,16 +6800,16 @@ linux_bbr() { 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 "現在の TCP ブロック アルゴリズム:$congestion_algorithm $queue_algorithm" echo "" echo "BBR管理" echo "------------------------" echo "1. BBRv3 をオンにする 2. BBRv3 をオフにする (再起動します)" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) @@ -6869,9 +6868,9 @@ docker_ssh_migration() { backup_docker() { send_stats "Dockerバックアップ" - echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}" + echo -e "${YELLOW}Docker コンテナをバックアップしています...${NC}" docker ps --format '{{.Names}}' - read -e -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers + read -e -p "バックアップするコンテナの名前を入力してください (実行中のすべてのコンテナをバックアップするには、複数のスペースを区切って Enter キーを押します)。" containers install tar jq gzip install_docker @@ -6894,7 +6893,7 @@ docker_ssh_migration() { echo "set -e" >> "$RESTORE_SCRIPT" echo "# 自動生成された復元スクリプト" >> "$RESTORE_SCRIPT" - # パッケージ化されたプロジェクトのパスを記録して、パッケージの重複を避ける + # パッケージ化の繰り返しを避けるために、パッケージ化された Compose プロジェクトのパスを記録します。 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do @@ -6913,7 +6912,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -6921,10 +6920,10 @@ docker_ssh_migration() { echo "compose" > "${BACKUP_DIR}/backup_type_${project_name}" echo "$project_dir" > "${BACKUP_DIR}/compose_path_${project_name}.txt" tar -czf "${BACKUP_DIR}/compose_project_${project_name}.tar.gz" -C "$project_dir" . - echo "#docker-compose Recovery:$project_name" >> "$RESTORE_SCRIPT" + echo "# docker-compose 復元:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}プロジェクトの作成 [$project_name]パック:${project_dir}${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name] パッケージ内容:${project_dir}${NC}" else echo -e "${RED}docker-compose.yml が見つからないため、このコンテナをスキップします...${NC}" fi @@ -6933,7 +6932,7 @@ docker_ssh_migration() { local VOL_PATHS VOL_PATHS=$(docker inspect "$c" --format '{{range .Mounts}}{{.Source}} {{end}}') for path in $VOL_PATHS; do - echo "梱包体積:$path" + echo "梱包量:$path" tar -czpf "${BACKUP_DIR}/${c}_$(basename $path).tar.gz" -C / "$(echo $path | sed 's/^\///')" done @@ -6955,17 +6954,17 @@ docker_ssh_migration() { local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") - echo -e "\ n#復元コンテナ:$c" >> "$RESTORE_SCRIPT" + echo -e "\n# コンテナを復元:$c" >> "$RESTORE_SCRIPT" echo "docker run -d --name $c $PORT_ARGS $VOL_ARGS $ENV_VARS $IMAGE" >> "$RESTORE_SCRIPT" fi done - # /home /dockerのすべてのファイルをバックアップします(サブディレクトリを除く) + # /home/docker 下のすべてのファイルをバックアップします (サブディレクトリを除く)。 if [ -d "/home/docker" ]; then echo -e "${BLUE}/home/docker 下のファイルをバックアップします...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - - echo -e "${GREEN}/home /dockerの下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}" + echo -e "${GREEN}/home/docker 下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" @@ -6980,9 +6979,9 @@ docker_ssh_migration() { # ---------------------------- restore_docker() { - send_stats "Dockerの復元" + send_stats "Docker の復元" read -e -p "復元するバックアップ ディレクトリを入力してください:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } echo -e "${BLUE}復元操作を開始しています...${NC}" @@ -6996,17 +6995,17 @@ docker_ssh_migration() { project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりませんでした。復元ディレクトリパスを入力してください。" original_path + [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりません。復元ディレクトリのパスを入力してください:" original_path - # Composeプロジェクトのコンテナがすでに実行されているかどうかを確認します + # 作成プロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}プロジェクトを作成する[$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" continue fi - read -e -p "Composeプロジェクトの復元を確認します[$project_name]パスへ[$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -e -p "新しい復元パスを入力してください:" original_path + read -e -p "Compose プロジェクトの復元を確認します [$project_name] からパス [$original_path] ? (y/n): " confirm + [[ "$confirm" != "y" ]] && read -e -p "新しい復元パスを入力してください:" original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" @@ -7015,12 +7014,12 @@ docker_ssh_migration() { cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}プロジェクトを作成する[$project_name】レストア完了!${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name】レストア完了!${NC}" fi done # --------- 通常のコンテナの復元を続行 --------- - echo -e "${BLUE}通常のDockerコンテナを確認して復元します...${NC}" + echo -e "${BLUE}通常の Docker コンテナを確認して復元します...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue @@ -7035,7 +7034,7 @@ docker_ssh_migration() { fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}ミラー情報は見つかりませんでした、スキップ:$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}ミラー情報が見つかりません。スキップしてください:$container${NC}"; continue; } # ポートマッピング PORT_ARGS="" @@ -7069,18 +7068,18 @@ docker_ssh_migration() { # 既存だが実行されていないコンテナを削除する if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then - echo -e "${YELLOW}容器 [$container]存在しますが、実行していない、古いコンテナを削除してください...${NC}" + echo -e "${YELLOW}容器 [$container] は存在しますが実行されていない場合は、古いコンテナを削除してください...${NC}" docker rm -f "$container" fi - # コンテナを起動します + # コンテナの起動 echo "復元コマンドを実行します: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done - [[ "$has_container" == false ]] && echo -e "${YELLOW}通常のコンテナのバックアップ情報は見つかりませんでした${NC}" + [[ "$has_container" == false ]] && echo -e "${YELLOW}共通コンテナのバックアップ情報が見つかりません${NC}" - # /home /dockerの下でファイルを復元します + # /home/docker 下のファイルを復元します if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker @@ -7095,13 +7094,13 @@ docker_ssh_migration() { # ---------------------------- - # 移動します + # 移行する # ---------------------------- migrate_docker() { send_stats "Docker の移行" install jq - read -e -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + read -e -p "移行するバックアップ ディレクトリを入力してください:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER @@ -7110,23 +7109,23 @@ docker_ssh_migration() { local LATEST_TAR="$BACKUP_DIR" - echo -e "${YELLOW}バックアップを転送...${NC}" + echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーでログインします + # キーを使用してログインする scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi } # ---------------------------- - # バックアップを削除します + # バックアップの削除 # ---------------------------- delete_backup() { send_stats "Dockerバックアップファイルの削除" read -e -p "削除するバックアップ ディレクトリを入力してください:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" + echo -e "${GREEN}削除されたバックアップ:${BACKUP_DIR}${NC}" } # ---------------------------- @@ -7137,19 +7136,19 @@ docker_ssh_migration() { while true; do clear echo "------------------------" - echo -e "Dockerバックアップ/移行/復元ツール" + echo -e "Docker バックアップ/移行/復元ツール" echo "------------------------" list_backups echo -e "" echo "------------------------" echo -e "1. Docker プロジェクトをバックアップする" echo -e "2. Docker プロジェクトを移行する" - echo -e "3. Dockerプロジェクトを復元します" + echo -e "3. Docker プロジェクトを復元する" echo -e "4. Dockerプロジェクトのバックアップファイルを削除する" echo "------------------------" - echo -e "0。前のメニューに戻ります" + echo -e "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択してください:" choice + read -e -p "選択してください:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -7173,28 +7172,28 @@ linux_docker() { while true; do clear - # send_stats「Docker Management」 + # send_stats "ドッカー管理" echo -e "Docker管理" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker環境をインストールして更新します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker環境のインストールと更新${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Dockerグローバルステータスを表示します${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}2. ${gl_bai}Docker のグローバル ステータスを表示する${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}3. ${gl_bai}Dockerコンテナ管理${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}4. ${gl_bai}Dockerイメージ管理" echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}清潔な役に立たないドッカーコンテナとミラーネットワークデータボリューム" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" 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}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}11. ${gl_bai}Docker-ipv6 アクセスを有効にする" echo -e "${gl_kjlan}12. ${gl_bai}Docker-ipv6 アクセスをオフにする" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}19. ${gl_bai}バックアップ/移行/復元Docker環境" + echo -e "${gl_kjlan}19. ${gl_bai}Docker環境のバックアップ/移行/復元" echo -e "${gl_kjlan}20. ${gl_bai}Docker環境をアンインストールする" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" @@ -7204,7 +7203,7 @@ linux_docker() { case $sub_choice in 1) clear - send_stats "Docker環境をインストールします" + send_stats "Docker環境をインストールする" install_add_docker ;; @@ -7221,16 +7220,16 @@ linux_docker() { docker compose version echo "" - echo -e "Docker画像:${gl_lv}$image_count${gl_bai} " + echo -e "Docker イメージ:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "Dockerコンテナ:${gl_lv}$container_count${gl_bai}" + echo -e "Docker コンテナ:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "Dockerボリューム:${gl_lv}$volume_count${gl_bai}" + echo -e "Docker ボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Docker ネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7270,26 +7269,26 @@ linux_docker() { done echo "" - echo "ネットワーク操作" + echo "ネットワーク運用" echo "------------------------" echo "1. ネットワークを作成する" - echo "2。インターネットに参加してください" - echo "3。ネットワークを終了します" - echo "4.ネットワークを削除します" + echo "2. ネットワークに参加する" + echo "3. ネットワークを終了します" + echo "4. ネットワークの削除" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) - send_stats "ネットワークを作成します" - read -e -p "新しいネットワーク名を設定します:" dockernetwork + send_stats "ネットワークの作成" + read -e -p "新しいネットワーク名を設定します。" dockernetwork docker network create $dockernetwork ;; 2) - send_stats "インターネットに参加してください" - read -e -p "ネットワーク名に参加してください:" dockernetwork + send_stats "ネットワークに参加する" + read -e -p "ネットワーク名を追加します:" dockernetwork read -e -p "どのコンテナがネットワークに参加しますか (複数のコンテナ名はスペースで区切ってください):" dockernames for dockername in $dockernames; do @@ -7323,15 +7322,15 @@ linux_docker() { 6) while true; do clear - send_stats "Dockerボリューム管理" + send_stats "Docker ボリューム管理" echo "Dockerボリュームリスト" docker volume ls echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" - echo "2。指定されたボリュームを削除します" - echo "3.すべてのボリュームを削除します" + echo "1. 新しいボリュームを作成する" + echo "2. 指定したボリュームを削除します" + echo "3. すべてのボリュームを削除します" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -7339,13 +7338,13 @@ linux_docker() { case $sub_choice in 1) - send_stats "新しいボリュームを作成します" - read -e -p "新しいボリューム名を設定します:" dockerjuan + send_stats "新しいボリュームを作成する" + read -e -p "新しいボリューム名を設定します。" dockerjuan docker volume create $dockerjuan ;; 2) - read -e -p "削除ボリューム名を入力します(スペースで複数のボリューム名を分離してください):" dockerjuans + read -e -p "削除ボリューム名を入力します (複数のボリューム名はスペースで区切ってください):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7354,7 +7353,7 @@ linux_docker() { ;; 3) - send_stats "すべてのボリュームを削除します" + send_stats "すべてのボリュームを削除する" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7376,7 +7375,7 @@ linux_docker() { ;; 7) clear - send_stats "Dockerクリーニング" + send_stats "Docker のクリーンアップ" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7391,7 +7390,7 @@ linux_docker() { ;; 8) clear - send_stats "Dockerソース" + send_stats "Docker ソース" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -7413,7 +7412,7 @@ linux_docker() { 12) clear - send_stats "Docker V6レベル" + send_stats "Docker v6 閉じる" docker_ipv6_off ;; @@ -7463,34 +7462,34 @@ linux_test() { while true; do clear # send_stats "テストスクリプト集" - echo -e "テストスクリプトコレクション" + echo -e "テストスクリプト集" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}IPおよびロック解除ステータスの検出" - echo -e "${gl_kjlan}1. ${gl_bai}CHATGPTはステータス検出のロックを解除します" + echo -e "${gl_kjlan}1. ${gl_bai}ChatGPTロック解除状態検出" echo -e "${gl_kjlan}2. ${gl_bai}リージョンストリーミングメディアロック解除テスト" - echo -e "${gl_kjlan}3. ${gl_bai}YeahWUストリーミングメディアのロック解除検出" - echo -e "${gl_kjlan}4. ${gl_bai}XYKT IP品質の身体検査スクリプト${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}3. ${gl_bai}Yeawu ストリーミング メディアのロック解除の検出" + echo -e "${gl_kjlan}4. ${gl_bai}xykt IP 品質チェック スクリプト${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}ネットワーク速度測定" - echo -e "${gl_kjlan}11. ${gl_bai}BestTrace 3ネットワークバックホール遅延ルーティングテスト" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3ネットワークバックホールラインテスト" + echo -e "${gl_kjlan}ネットワーク回線速度テスト" + echo -e "${gl_kjlan}11. ${gl_bai}besttrace 3 ネットワーク バックホール遅延ルーティング テスト" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace トリプルネットワークバックホール回線テスト" echo -e "${gl_kjlan}13. ${gl_bai}超高速トリプルネットワーク速度テスト" - echo -e "${gl_kjlan}14. ${gl_bai}nxtrace高速バックホールテストスクリプト" + echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 高速バックホール テスト スクリプト" echo -e "${gl_kjlan}15. ${gl_bai}nxtrace は IP バックホール テスト スクリプトを指定します" echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 3つのネットワーク回線テスト" echo -e "${gl_kjlan}17. ${gl_bai}i-abc 多機能速度テスト スクリプト" - echo -e "${gl_kjlan}18. ${gl_bai}Networt Network品質の身体診断スクリプト${gl_huang}★${gl_bai}" + 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}IICU/GB5 CPUパフォーマンステストスクリプト" + echo -e "${gl_kjlan}21. ${gl_bai}yabsパフォーマンステスト" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU パフォーマンステストスクリプト" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}包括的なテスト" + echo -e "${gl_kjlan}総合的なテスト" echo -e "${gl_kjlan}31. ${gl_bai}ベンチパフォーマンステスト" - echo -e "${gl_kjlan}32. ${gl_bai}SpiritySDX Fusion Monster Review${gl_huang}★${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}" @@ -7504,7 +7503,7 @@ linux_test() { ;; 2) clear - send_stats "リージョンストリーミングメディアのロック解除テスト" + send_stats "リージョンストリーミングメディアロック解除テスト" bash <(curl -L -s check.unlock.media) ;; 3) @@ -7515,7 +7514,7 @@ linux_test() { ;; 4) clear - send_stats "XYKT_IP品質の身体検査スクリプト" + send_stats "xykt_IP 品質チェック スクリプト" bash <(curl -Ls IP.Check.Place) ;; @@ -7528,12 +7527,12 @@ linux_test() { ;; 12) clear - send_stats "MTR_TRACE 3ネットワークリターンラインテスト" + send_stats "mtr_trace トリプルネットワークバックホール回線テスト" curl ${gh_proxy}raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash ;; 13) clear - send_stats "SuperSpeed Three-Net速度測定" + send_stats "超高速トリプルネットワーク速度テスト" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) @@ -7545,51 +7544,51 @@ linux_test() { 15) clear send_stats "nxtrace は IP バックホール テスト スクリプトを指定します" - echo "参照できるIPのリスト" + echo "参照IPリスト" echo "------------------------" - echo "北京テレコム:219.141.136.12" + echo "北京電信: 219.141.136.12" echo "北京ユニコム: 202.106.50.1" - echo "北京モバイル:221.179.155.161" + echo "北京モバイル: 221.179.155.161" echo "上海電信: 202.96.209.133" echo "上海ユニコム: 210.22.97.1" echo "上海モバイル: 211.136.112.200" - echo "広州の通信:58.60.188.222" - echo "広州ユニコム:210.21.196.6" + echo "広州電信: 58.60.188.222" + echo "広州チャイナユニコム: 210.21.196.6" echo "広州モバイル: 120.196.165.24" echo "成都電信: 61.139.2.69" echo "成都チャイナユニコム: 119.6.6.6" - echo "成都モバイル:211.137.96.205" - echo "Hunan Telecom:36.111.200.100" + echo "成都携帯電話: 211.137.96.205" + echo "湖南電信: 36.111.200.100" echo "湖南ユニコム: 42.48.16.100" echo "湖南省モバイル: 39.134.254.6" echo "------------------------" - read -e -p "指定されたIPを入力してください:" testip + read -e -p "特定の IP を入力します。" testip curl nxtrace.org/nt |bash nexttrace $testip ;; 16) clear - send_stats "Ludashi2020 3ネットワークラインテスト" + send_stats "ludashi2020 3つのネットワーク回線テスト" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; 17) clear - send_stats "I-ABC多機能速度テストスクリプト" + send_stats "i-abc 多機能速度テスト スクリプト" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; 18) clear - send_stats "ネットワーク品質のテストスクリプト" + send_stats "ネットワーク品質テストスクリプト" bash <(curl -sL Net.Check.Place) ;; 21) clear - send_stats "YABSパフォーマンステスト" + send_stats "yabsパフォーマンステスト" check_swap curl -sL yabs.sh | bash -s -- -i -5 ;; @@ -7606,7 +7605,7 @@ linux_test() { curl -Lso- bench.sh | bash ;; 32) - send_stats "SpiritySDX Fusion Monster Review" + 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 ;; @@ -7616,7 +7615,7 @@ linux_test() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -7632,26 +7631,26 @@ linux_Oracle() { while true; do clear - send_stats "Oracle Cloud Scriptコレクション" - echo -e "Oracle Cloud Scriptコレクション" + 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}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}ROOTパスワードログインモードを有効にする" - echo -e "${gl_kjlan}6. ${gl_bai}IPv6回復ツール" + 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 + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) clear - echo "アクティブスクリプト:CPUが10-20%を占めるメモリは20%を占めています" - read -e -p "必ずインストールしますか? (y/n):" choice + echo "アクティブ スクリプト: CPU 使用率 10 ~ 20% メモリ使用率 20%" + read -e -p "インストールしてもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) @@ -7664,16 +7663,16 @@ linux_Oracle() { local DEFAULT_SPEEDTEST_INTERVAL=120 # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 - read -e -p "CPUコアの数を入力してください[デフォルト:$DEFAULT_CPU_CORE]: " cpu_core + 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 + read -e -p "メモリ使用率を入力してください [デフォルト:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "SpeedTest間隔時間(秒)を入力してください[デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "Speedtest の間隔時間 (秒) を入力してください [デフォルト:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # Dockerコンテナを実行する @@ -7684,7 +7683,7 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloudインストールアクティブスクリプト" + send_stats "Oracle Cloudインストール・アクティブ・スクリプト" ;; [Nn]) @@ -7704,15 +7703,15 @@ linux_Oracle() { 3) clear - echo "システムを再インストールします" + echo "システムを再インストールする" echo "--------------------------------" - echo -e "${gl_hong}知らせ:${gl_bai}再インストールは接触を失う危険であり、心配している人はそれを注意して使用する必要があります。再インストールには15分かかると予想されます。事前にデータをバックアップしてください。" - read -e -p "必ず続けますか? (y/n):" choice + echo -e "${gl_hong}知らせ:${gl_bai}再インストールすると接続が切れる可能性がありますので、不安な方はご注意ください。再インストールには 15 分程度かかることが予想されますので、事前にデータをバックアップしてください。" + read -e -p "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) while true; do - read -e -p "再インストールするシステムを選択してください:1。Debian12| 2。Ubuntu20.04:" sys_choice + read -e -p "再インストールするシステムを選択してください: 1. Debian12 | 2.Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7729,7 +7728,7 @@ linux_Oracle() { esac done - read -e -p "再インストールされたパスワードを入力してください:" vpspasswd + 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再インストールシステムスクリプト" @@ -7738,7 +7737,7 @@ linux_Oracle() { echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -7756,7 +7755,7 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "この関数は、彼のおかげで、マスターJHBによって提供されます!" + echo "この機能は jhb によって提供されています。ありがとう!" send_stats "IPv6修復" ;; 0) @@ -7764,7 +7763,7 @@ linux_Oracle() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -7785,7 +7784,7 @@ docker_tato() { 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}" + 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 } @@ -7838,27 +7837,27 @@ linux_ldnmp() { echo -e "${gl_huang}LDNMP Web サイトの構築" ldnmp_tato echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールする${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールします${gl_huang}★${gl_bai}" - echo -e "${gl_huang}3. ${gl_bai}Discuzフォーラムをインストールします${gl_huang}4. ${gl_bai}Kadao Cloudデスクトップをインストールします" + echo -e "${gl_huang}1. ${gl_bai}LDNMP環境をインストールする${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}WordPressをインストールする${gl_huang}★${gl_bai}" + echo -e "${gl_huang}3. ${gl_bai}Discuz フォーラムをインストールする${gl_huang}4. ${gl_bai}Kedao クラウド デスクトップをインストールする" echo -e "${gl_huang}5. ${gl_bai}Apple CMS ムービーおよび TV ステーションをインストールする${gl_huang}6. ${gl_bai}Unicorn デジタル カード ネットワークをインストールする" - echo -e "${gl_huang}7. ${gl_bai}flarumフォーラムWebサイトをインストールする${gl_huang}8. ${gl_bai}Typecho Lightweight Blog Webサイトをインストールします" - echo -e "${gl_huang}9. ${gl_bai}LinkStack 共有リンク プラットフォームをインストールする${gl_huang}20. ${gl_bai}動的サイトをカスタマイズします" + echo -e "${gl_huang}7. ${gl_bai}flarumフォーラムWebサイトをインストールする${gl_huang}8. ${gl_bai}typecho 軽量ブログ Web サイトをインストールする" + 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}サイトリバースプロキシ-IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイトリバースプロキシ - ドメイン名" - echo -e "${gl_huang}25. ${gl_bai}Bitwarden パスワード管理プラットフォームをインストールする${gl_huang}26. ${gl_bai}HaloブログのWebサイトをインストールします" + echo -e "${gl_huang}23. ${gl_bai}サイト リバース プロキシ - IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイト リバース プロキシ ドメイン名" + echo -e "${gl_huang}25. ${gl_bai}Bitwarden パスワード管理プラットフォームをインストールする${gl_huang}26. ${gl_bai}Halo ブログ サイトをインストールする" echo -e "${gl_huang}27. ${gl_bai}AI絵画プロンプトワードジェネレーターをインストールする${gl_huang}28. ${gl_bai}サイト リバース プロキシ負荷分散" - echo -e "${gl_huang}30. ${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}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}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}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_huang}------------------------${gl_bai}" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -7872,7 +7871,7 @@ linux_ldnmp() { 3) clear - # ディスクフォーラム + # ディスカスフォーラム webname="Discuz论坛" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -7900,9 +7899,9 @@ linux_ldnmp() { ldnmp_web_on echo "データベースアドレス: mysql" echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:discuz_" + echo "テーブル接頭辞: discuz_" ;; @@ -7935,16 +7934,16 @@ linux_ldnmp() { ldnmp_web_on echo "データベースアドレス: mysql" - echo "ユーザー名:$dbuse" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "データベース名:$dbname" - echo "Redisホスト:Redis" + echo "redisホスト: redis" ;; 5) clear - # Apple CMS + # AppleCMS webname="苹果CMS" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -7975,10 +7974,10 @@ linux_ldnmp() { ldnmp_web_on echo "データベースアドレス: mysql" echo "データベースポート: 3306" - echo "データベース名:$dbname" + echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベースプレフィックス:mac_" + echo "データベース接頭辞: mac_" echo "------------------------" echo "インストールが成功したら、バックエンド アドレスにログインします。" echo "https://$yuming/vip.php" @@ -7990,7 +7989,7 @@ linux_ldnmp() { # 一本足のナンバーカード webname="独脚数卡" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,24 +8010,24 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" + echo "データベースアドレス: mysql" echo "データベースポート: 3306" echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "" - echo "Redisアドレス:Redis" + echo "redisアドレス: redis" echo "redis パスワード: デフォルトでは入力されていません" - echo "Redisポート:6379" + echo "Redis ポート: 6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックグラウンドログインパス: /admin" + echo "バックエンドのログイン パス: /admin" echo "------------------------" echo "ユーザー名: 管理者" echo "パスワード: 管理者" echo "------------------------" echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" - echo "私も、なぜユニコーンナンバーカードがこれほど面倒で問題が多いのか、非常に腹が立っています。" + echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、問題が多いのか、とても腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8038,7 +8037,7 @@ linux_ldnmp() { # フララムフォーラム webname="flarum论坛" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8079,8 +8078,8 @@ linux_ldnmp() { echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:flarum_" - echo "管理者情報は自分で設定されます" + echo "テーブル接頭辞: flarum_" + echo "管理者情報を自分で設定可能" ;; @@ -8089,7 +8088,7 @@ linux_ldnmp() { # typecho webname="typecho" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8114,10 +8113,10 @@ linux_ldnmp() { clear ldnmp_web_on echo "データベース接頭辞: typecho_" - echo "データベースアドレス:mysql" + echo "データベースアドレス: mysql" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" + echo "データベース名:$dbname" ;; @@ -8127,7 +8126,7 @@ linux_ldnmp() { # LinkStack webname="LinkStack" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,9 +8151,9 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" + echo "データベースアドレス: mysql" + echo "データベースポート: 3306" + echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" ;; @@ -8180,9 +8179,9 @@ linux_ldnmp() { cd $yuming clear - echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードします" + echo -e "[${gl_huang}1/6${gl_bai}] PHPソースコードをアップロードする" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/home/web/html/に置いてください。${yuming}ディレクトリの下" read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then @@ -8246,7 +8245,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}6/6${gl_bai}] データベース管理" echo "-------------" - read -e -p "1.新しいサイトを構築します2。古いサイトを構築し、データベースのバックアップがあります。" use_db + read -e -p "1. 新しいサイトを構築します。 2. 古いサイトを構築し、データベースのバックアップを作成します。" use_db case $use_db in 1) echo @@ -8278,7 +8277,7 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "データベースアドレス:mysql" + echo "データベースアドレス: mysql" echo "データベース名:$dbname" echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" @@ -8297,7 +8296,7 @@ linux_ldnmp() { clear webname="站点重定向" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming read -e -p "リダイレクト ドメイン名を入力してください:" reverseproxy nginx_install_status @@ -8321,7 +8320,7 @@ linux_ldnmp() { find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "IP+ポートはサービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -8335,7 +8334,7 @@ linux_ldnmp() { send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming - echo -e "ドメイン名形式:${gl_huang}google.com${gl_bai}" + echo -e "ドメイン名の形式:${gl_huang}google.com${gl_bai}" read -e -p "リバース プロキシ ドメイン名を入力してください:" fandai_yuming nginx_install_status install_ssltls @@ -8357,7 +8356,7 @@ linux_ldnmp() { clear webname="Bitwarden" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming nginx_install_status install_ssltls @@ -8380,7 +8379,7 @@ linux_ldnmp() { clear webname="halo" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming nginx_install_status install_ssltls @@ -8398,7 +8397,7 @@ linux_ldnmp() { clear webname="AI绘画提示词生成器" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming nginx_install_status install_ssltls @@ -8432,7 +8431,7 @@ linux_ldnmp() { clear webname="静态站点" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8449,10 +8448,10 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}1/2${gl_bai}]静的ソースコードをアップロードします" + echo -e "[${gl_huang}1/2${gl_bai}] 静的ソースコードをアップロードする" echo "-------------" - echo "現在、zip-formatソースコードパッケージのみが許可されています。ソースコードパッケージを/home/web/html/に入れてください${yuming}ディレクトリ内" - read -e -p "ダウンロードリンクを入力して、ソースコードパッケージをリモートでダウンロードすることもできます。 Enterを直接押してリモートダウンロードをスキップします。" url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/home/web/html/に置いてください。${yuming}ディレクトリの下" + read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8462,7 +8461,7 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.htmlが配置されているパス" + 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 {} @@ -8492,7 +8491,7 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP環境バックアップ" + send_stats "LDNMP環境のバックアップ" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" echo -e "${gl_huang}バックアップ中$backup_filename ...${gl_bai}" @@ -8500,11 +8499,11 @@ linux_ldnmp() { while true; do clear - echo "バックアップファイルが作成されました: /home /$backup_filename" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + echo "バックアップファイルが作成されました: /home/$backup_filename" + read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice case "$choice" in [Yy]) - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "リモートサーバーのIPを入力してください:" remote_ip read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then @@ -8516,7 +8515,7 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" + echo "ファイルはリモート サーバーのホーム ディレクトリに転送されました。" else echo "転送するファイルが見つかりませんでした。" fi @@ -8535,8 +8534,8 @@ linux_ldnmp() { 33) clear send_stats "スケジュールされたリモートバックアップ" - read -e -p "リモートサーバーIPを入力してください:" useip - read -e -p "リモートサーバーのパスワードを入力してください:" usepasswd + 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 @@ -8546,13 +8545,13 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1。毎週のバックアップ2。毎日のバックアップ" - read -e -p "選択を入力してください:" dingshi + echo "1. 毎週のバックアップ 2. 毎日のバックアップ" + read -e -p "選択肢を入力してください:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "毎週のバックアップ(0-6、0は日曜日を表す)の曜日を選択します。" weekday + read -e -p "毎週のバックアップの曜日を選択します (0 ~ 6、0 は日曜日を表します)。" weekday (crontab -l ; echo "0 0 * * $weekday ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; 2) @@ -8571,8 +8570,8 @@ linux_ldnmp() { 34) root_use - send_stats "LDNMP環境修復" - echo "利用可能なサイトバックアップ" + send_stats "LDNMP環境の復元" + echo "利用可能なサイトのバックアップ" echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" @@ -8583,7 +8582,7 @@ linux_ldnmp() { linux_ldnmp fi - # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージを使用します + # ユーザーがファイル名を入力しない場合は、最新の圧縮パッケージが使用されます。 if [ -z "$filename" ]; then local filename=$(ls -t /home/*.tar.gz | head -1) fi @@ -8593,7 +8592,7 @@ linux_ldnmp() { docker compose down > /dev/null 2>&1 rm -rf /home/web > /dev/null 2>&1 - echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + echo -e "${gl_huang}解凍中$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" check_port @@ -8602,7 +8601,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "圧縮パッケージは見つかりませんでした。" + echo "圧縮パッケージが見つかりませんでした。" fi ;; @@ -8621,7 +8620,7 @@ linux_ldnmp() { while true; do clear send_stats "LDNMP環境を更新する" - echo "LDNMP環境を更新します" + echo "LDNMP環境を更新する" echo "------------------------" ldnmp_v echo "新しいバージョンのコンポーネントが見つかりました" @@ -8646,9 +8645,9 @@ linux_ldnmp() { echo echo "1. nginx を更新します。 2. mysql を更新します。 3. php を更新します。 4. redis を更新します。" echo "------------------------" - echo "5。完全な環境を更新します" + echo "5. 環境全体を更新する" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -8659,7 +8658,7 @@ linux_ldnmp() { 2) local ldnmp_pods="mysql" - read -e -p "入力してください${ldnmp_pods}バージョン番号(8.0 8.3 8.4 9.0など)(最新バージョンを取得するには入力):" version + read -e -p "入力してください${ldnmp_pods}バージョン番号 (例: 8.0 8.3 8.4 9.0) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-latest} cd /home/web/ @@ -8671,7 +8670,7 @@ linux_ldnmp() { docker restart $ldnmp_pods cp /home/web/docker-compose1.yml /home/web/docker-compose.yml send_stats "更新する$ldnmp_pods" - echo "更新します${ldnmp_pods}仕上げる" + echo "更新する${ldnmp_pods}仕上げる" ;; 3) @@ -8709,8 +8708,8 @@ linux_ldnmp() { 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}仕上げる" + send_stats "更新する$ldnmp_pods" + echo "更新する${ldnmp_pods}仕上げる" ;; 4) @@ -8721,15 +8720,15 @@ linux_ldnmp() { 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}仕上げる" + 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環境を完全に更新します" + send_stats "LDNMP環境の完全アップデート" cd /home/web/ docker compose down --rmi all @@ -8769,7 +8768,7 @@ linux_ldnmp() { ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -8779,7 +8778,7 @@ linux_ldnmp() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" esac break_end @@ -8813,69 +8812,70 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baotaパネルの公式バージョン${gl_kjlan}2. ${color2}Aapanel International Edition" + echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}UbuntuリモートデスクトップWebエディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" - echo -e "${gl_kjlan}9. ${color9}poste.ioメールサーバープログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" + echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}ZenTao プロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglongパネルの時限タスク管理プラットフォーム" - echo -e "${gl_kjlan}13. ${color13}CloudReveネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルな写真ベッド画像管理プログラム" - echo -e "${gl_kjlan}15. ${color15}emby マルチメディア管理システム${gl_kjlan}16. ${color16}SpeedTest速度テストパネル" - echo -e "${gl_kjlan}17. ${color17}Adguardhomeアドウェア${gl_kjlan}18. ${color18}唯一のオフィスオンラインオフィスオフィス" - echo -e "${gl_kjlan}19. ${color19}Leichi WAF ファイアウォール パネル${gl_kjlan}20. ${color20}Portainerコンテナ管理パネル" + echo -e "${gl_kjlan}11. ${color11}ZenTao プロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglong パネルのスケジュールされたタスク管理プラットフォーム" + echo -e "${gl_kjlan}13. ${color13}Cloudreve ネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルなピクチャーベッド画像管理プログラム" + echo -e "${gl_kjlan}15. ${color15}emby マルチメディア管理システム${gl_kjlan}16. ${color16}Speedtest スピードテストパネル" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome はアドウェアを削除します${gl_kjlan}18. ${color18}Onlyofficeオンラインオフィス OFFICE" + echo -e "${gl_kjlan}19. ${color19}Leichi WAF ファイアウォール パネル${gl_kjlan}20. ${color20}portainer容器管理面板" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VScode Web バージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" - echo -e "${gl_kjlan}23. ${color23}メモWebページメモ${gl_kjlan}24. ${color24}webtopリモートデスクトップWebエディション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloudネットワークディスク${gl_kjlan}26. ${color26}QD-Todayタイミングタスク管理フレームワーク" + echo -e "${gl_kjlan}23. ${color23}メモウェブメモ${gl_kjlan}24. ${color24}Webtop リモート デスクトップ Web バージョン${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud ネットワーク ディスク${gl_kjlan}26. ${color26}QD-Today スケジュールされたタスク管理フレームワーク" echo -e "${gl_kjlan}27. ${color27}Dockge コンテナ スタック管理パネル${gl_kjlan}28. ${color28}LibreSpeed 速度テストツール" echo -e "${gl_kjlan}29. ${color29}searxng 集約検索ステーション${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrismプライベートアルバムシステム" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}31. ${color31}StirlingPDF ツール コレクション${gl_kjlan}32. ${color32}Drawio無料のオンラインチャートソフトウェア${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}33. ${color33}サンパネルナビゲーションパネル${gl_kjlan}34. ${color34}Pingvin-Share ファイル共有プラットフォーム" - echo -e "${gl_kjlan}35. ${color35}ミニマリストの友達の輪${gl_kjlan}36. ${color36}Lobechataiチャット集約Webサイト" + echo -e "${gl_kjlan}31. ${color31}StirlingPDF ツール コレクション${gl_kjlan}32. ${color32}無料のオンライングラフ作成ソフトウェアdrawio${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${color33}Sun-Panel ナビゲーション パネル${gl_kjlan}34. ${color34}Pingvin-Share ファイル共有プラットフォーム" + echo -e "${gl_kjlan}35. ${color35}ミニマリストの友達の輪${gl_kjlan}36. ${color36}LobeChatAIチャットアグリゲーションサイト" echo -e "${gl_kjlan}37. ${color37}MyIP ツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive Live Broadcast Recording Tool${gl_kjlan}40. ${color40}webssh Web版 SSH接続ツール" + echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh Web版 SSH接続ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}NEXTEリモート接続ツール" - echo -e "${gl_kjlan}43. ${color43}Rustdeskリモートデスク(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk リモート デスクトップ (リレー)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}45. ${color45}Docker加速ステーション${gl_kjlan}46. ${color46}GitHub加速ステーション${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}プロメテウス監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" - echo -e "${gl_kjlan}49. ${color49}プロメテウス(コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}Nexterm リモート接続ツール" + echo -e "${gl_kjlan}43. ${color43}RustDesk リモート デスクトップ (サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk リモート デスクトップ (リレー)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}45. ${color45}Docker アクセラレーション ステーション${gl_kjlan}46. ${color46}GitHub アクセラレーション ステーション${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}47. ${color47}プロメテウスの監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" + echo -e "${gl_kjlan}49. ${color49}Prometheus (コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}51. ${color51}PVEオープンチックパネル${gl_kjlan}52. ${color52}DPanel コンテナ管理パネル" - echo -e "${gl_kjlan}53. ${color53}llama3チャットAIモデル${gl_kjlan}54. ${color54}AMHホストWebサイトビルディングマネジメントパネル" - echo -e "${gl_kjlan}55. ${color55}FRPイントラネット浸透(サーバー側)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット浸透(クライアント)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}deepseekチャットaiビッグモデル${gl_kjlan}58. ${color58}Dify 大規模モデルのナレッジ ベース${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}53. ${color53}llama3チャットAI大型モデル${gl_kjlan}54. ${color54}AMH ホスト Web サイト構築管理パネル" + echo -e "${gl_kjlan}55. ${color55}FRPイントラネット普及(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット普及(クライアント)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}ディープシークチャットAI大型モデル${gl_kjlan}58. ${color58}Dify 大規模モデルのナレッジ ベース${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI 大規模モデル資産管理${gl_kjlan}60. ${color60}JumpServer オープンソース要塞マシン" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}RAGFlow 大規模モデルのナレッジ ベース" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}IT-Toolsツールボックス" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}ITツールツールボックス" echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}アストロボットチャットロボットフレームワーク" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstBot チャットボット フレームワーク" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}73. ${color73}libretvプライベート映画とテレビ${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" - echo -e "${gl_kjlan}75. ${color75}メロディーミュージックエルフ${gl_kjlan}76. ${color76}オンラインDOS古いゲーム" - echo -e "${gl_kjlan}77. ${color77}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}Pandawikiインテリジェントドキュメント管理システム" + echo -e "${gl_kjlan}73. ${color73}LibreTV プライベートムービー${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" + echo -e "${gl_kjlan}75. ${color75}メロディー音楽の魔法使い${gl_kjlan}76. ${color76}オンライン DOS 古いゲーム" + echo -e "${gl_kjlan}77. ${color77}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}PandaWiki インテリジェント文書管理システム" echo -e "${gl_kjlan}79. ${color79}Beszel サーバーの監視${gl_kjlan}80. ${color80}リンクワーデンのブックマーク管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" - echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos Personal Financial Management Tools" - echo -e "${gl_kjlan}85. ${color85}Immich Picture Video Manager${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" - echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}独自の自己ホストのライブブロードキャストプラットフォーム" - echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" + echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos の個人財務管理ツール" + echo -e "${gl_kjlan}85. ${color85}イミッチピクチャービデオマネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}Owncast の自己ホスト型ライブ ストリーミング プラットフォーム" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox ファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー" + echo -e "${gl_kjlan}91. ${color91}gitea プライベート コード リポジトリ${gl_kjlan}92. ${color92}FileBrowser ファイルマネージャー" echo -e "${gl_kjlan}93. ${color93}Dufs のミニマリスト静的ファイル サーバー${gl_kjlan}94. ${color94}Gopeed高速ダウンロードツール" - echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム${gl_kjlan}96. ${color96}2FAuth セルフホスト型 2 段階認証システム" - echo -e "${gl_kjlan}97. ${color97}WireGuard ネットワーキング (サーバー)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology仮想マシン${gl_kjlan}100. ${color100}Syncthing ピアツーピア ファイル同期ツール" + echo -e "${gl_kjlan}95. ${color95}ペーパーレス文書管理プラットフォーム${gl_kjlan}96. ${color96}2FAuth セルフホスト型 2 段階認証システム" + echo -e "${gl_kjlan}97. ${color97}WireGuard ネットワーキング (サーバー)${gl_kjlan}98. ${color98}WireGuard ネットワーキング (クライアント)" + echo -e "${gl_kjlan}99. ${color99}DSM Synology 仮想マシン${gl_kjlan}100. ${color100}Syncthing ピアツーピア ファイル同期ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI動画生成ツール${gl_kjlan}102. ${color102}VoceChatマルチプレイヤーオンラインチャットシステム" + echo -e "${gl_kjlan}101. ${color101}AI動画生成ツール${gl_kjlan}102. ${color102}VoceChat 複数人オンライン チャット システム" + echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します" + echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -9033,7 +9033,7 @@ while true; do docker_rum() { read -e -p "ログインユーザー名を設定します:" admin - read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "ログインユーザーのパスワードを設定します。" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9066,7 +9066,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを作る" + send_stats "ネザを構築する" local app_id="7" local docker_name="nezha-dashboard" @@ -9077,18 +9077,18 @@ while true; do clear echo -e "ネザモニタリング$check_docker $update_status" echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" - echo "公式ウェブサイトの建設文書:https://nezha.wiki/guide/dashboard.html" + echo "公式 Web サイト構築ドキュメント: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip fi echo "" echo "------------------------" - echo "1。使用します" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -9145,7 +9145,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建設します" + send_stats "郵便局を建てる" clear install telnet local app_id="9" @@ -9164,9 +9164,9 @@ while true; do port=25 timeout=3 if echo "quit" | timeout $timeout telnet smtp.qq.com $port | grep 'Connected'; then - echo -e "${gl_lv}ポート$port現在利用可能です${gl_bai}" + echo -e "${gl_lv}ポート$port現在利用可能${gl_bai}" else - echo -e "${gl_hong}ポート$port現在利用できません${gl_bai}" + echo -e "${gl_hong}ポート$port現在利用不可${gl_bai}" fi echo "" @@ -9181,18 +9181,18 @@ while true; do echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "たとえば、mail.yuming.comなど、電子メールドメイン名を設定してください。" yuming + read -e -p "電子メールのドメイン名を設定してください (例: mail.yuming.com)。" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" ip_address - echo "これらのDNSレコードを最初に解析します" + echo "まずこれらの DNS レコードを解析します" echo "A mail $ipv4_address" echo "CNAME imap $yuming" echo "CNAME pop $yuming" @@ -9202,7 +9202,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "任意のキーを押して続行します..." + echo "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" install jq @@ -9221,9 +9221,9 @@ while true; do add_app_id clear - echo "Poste.ioがインストールされています" + echo "poste.ioがインストールされました" echo "------------------------" - echo "次のアドレスを使用してposte.ioにアクセスできます。" + echo "次のアドレスを使用して poste.io にアクセスできます。" echo "https://$yuming" echo "" @@ -9246,7 +9246,7 @@ while true; do add_app_id clear - echo "Poste.ioがインストールされています" + echo "poste.ioがインストールされました" echo "------------------------" echo "次のアドレスを使用して poste.io にアクセスできます。" echo "https://$yuming" @@ -9293,7 +9293,7 @@ while true; do clear ip_address - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -9411,7 +9411,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -9556,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "サンダープールを構築します" + send_stats "雷のプールを作る" local app_id="19" local docker_name=safeline-mgt @@ -9565,8 +9565,8 @@ while true; do check_docker_app clear echo -e "サンダープールサービス$check_docker" - echo "Lei Chiは、Changting Technologyによって開発されたWAFサイトファイアウォールプログラムパネルであり、自動防衛のために代理店サイトを逆転させることができます。" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + echo "Leichi は、Changting Technology によって開発された WAF サイト ファイアウォール プログラム パネルで、自動防御のためにサイトを反転できます。" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi @@ -9587,7 +9587,7 @@ while true; do add_app_id clear - echo "サンダープールWAFパネルがインストールされています" + echo "Leichi WAFパネルを導入しました" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9600,7 +9600,7 @@ while true; do add_app_id clear - echo "サンダープールWAFパネルが更新されました" + echo "Leichi WAF パネルが更新されました" check_docker_app_ip ;; 3) @@ -9730,8 +9730,8 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" admin - read -e -p "ログインユーザーパスワードを設定します。" admin_password + read -e -p "ログインユーザー名を設定します:" admin + read -e -p "ログインユーザーのパスワードを設定します。" admin_password docker run -d \ --name=webtop \ --security-opt seccomp=unconfined \ @@ -10276,9 +10276,9 @@ while true; do prometheus_install clear ip_address - echo "インストール" + echo "インストール完了" check_docker_app_ip - echo "最初のユーザー名とパスワードは次のとおりです" + echo "初期のユーザー名とパスワードは次のとおりです: admin" } docker_app_update() { @@ -10296,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10561,7 +10561,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10590,10 +10590,10 @@ while true; do docker_app_install() { curl -sSL ${gh_proxy}github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash clear - echo "インストール" + echo "インストール完了" check_docker_app_ip - echo "初期ユーザー名:admin" - echo "最初のパスワード:changeme" + echo "初期ユーザー名: admin" + echo "初期パスワード:ChangeMe" } @@ -10610,7 +10610,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10673,7 +10673,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10935,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "libretvログインパスワードを設定します。" app_passwd + read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10971,7 +10971,7 @@ while true; do docker_app_install() { read -e -p "ログインユーザー名を設定します:" admin read -e -p "ログインユーザーのパスワードを設定します。" admin_password - read -e -p "承認コードを入力してください:" shouquanma + read -e -p "認証コードを入力してください:" shouquanma mkdir -p /home/docker/moontv @@ -11074,7 +11074,7 @@ while true; do docker_rum() { - read -e -p "ログインユーザー名を設定します:" app_use + read -e -p "ログインユーザー名を設定します:" app_use read -e -p "ログインパスワードを設定します:" app_passwd docker run -d \ @@ -11176,7 +11176,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # ランダムキーとパスワードを生成します + # ランダムなキーとパスワードを生成する local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11185,7 +11185,7 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 管理者アカウント情報を追加します + # 管理者アカウント情報を追加する echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env @@ -11195,7 +11195,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11205,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 元の変数を保持します + # 元の変数を保持する source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11222,7 +11222,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11394,7 +11394,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11407,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11568,7 +11568,7 @@ while true; do --restart=always \ matrixdotorg/synapse:latest - echo "初期ユーザーまたは管理者を作成します。次のユーザー名とパスワード、およびあなたが管理者であるかどうかを設定してください。" + echo "初期ユーザーまたは管理者を作成します。以下のユーザー名とパスワード、および管理者であるかどうかを設定してください。" docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11758,7 +11758,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11772,7 +11772,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11826,7 +11826,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -11846,7 +11846,7 @@ while true; do read -e -p "ネットワーク内のクライアントの数を入力してください (デフォルトは 5):" COUNT COUNT=${COUNT:-5} - read -e -p "WireGuardセグメントを入力してください(デフォルト10.13.13.0):" NETWORK + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11916,18 +11916,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}すべてのクライアントQRコード構成:${gl_bai}" + echo -e "${gl_huang}すべてのクライアント QR コード構成:${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo - echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" + echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 echo -e "${gl_lv}${COUNT}各クライアントのすべての出力を構成します。利用方法は以下の通りです。${gl_bai}" - echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}" - echo -e "${gl_lv}2。Windowsクライアントをダウンロードし、構成コードをコピーしてネットワークに接続します。${gl_bai}" + echo -e "${gl_lv}1. 携帯電話に wg APP をダウンロードし、上の QR コードをスキャンして、すぐにインターネットに接続します。${gl_bai}" + echo -e "${gl_lv}2. Windows 用クライアントをダウンロードし、ネットワークに接続するための構成コードをコピーします。${gl_bai}" echo -e "${gl_lv}3. スクリプトを使用して Linux に WG クライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}" - echo -e "${gl_lv}公式クライアントのダウンロード方法:https://www.wireguard.com/install/${gl_bai}" + echo -e "${gl_lv}公式クライアントのダウンロード方法:https://www.wireguard.com/install/${gl_bai}" break_end } @@ -11955,16 +11955,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # ディレクトリを作成する(存在しない場合) + # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" empty_line_count=0 - # ユーザーの入力を行ごとに読み取ります + # ユーザー入力を 1 行ずつ読み取ります while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11977,7 +11977,7 @@ while true; do fi done - # 構成ファイルに書き込みます + # 設定ファイルの書き込み echo "$input" > "$CONFIG_FILE" echo "クライアント設定の保存場所$CONFIG_FILE" @@ -12025,7 +12025,7 @@ while true; do docker_app_install() { - read -e -p "CPUコアの数を設定します(デフォルト2):" CPU_CORES + read -e -p "CPU コアの数を設定します (デフォルトは 2)。" CPU_CORES local CPU_CORES=${CPU_CORES:-2} read -e -p "メモリ サイズを設定します (デフォルトは 4G):" RAM_SIZE @@ -12045,7 +12045,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -12165,6 +12165,47 @@ while true; do ;; + 103|umami) + local app_id="103" + local app_name="Umami网站统计工具" + local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" + local app_url="官方网站: https://github.com/umami-software/umami" + local docker_name="umami-umami-1" + local docker_port="8103" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml + + docker compose up -d + clear + echo "インストール完了" + check_docker_app_ip + echo "初期ユーザー名: admin" + echo "初期パスワード:umami" + } + + docker_app_update() { + cd /home/docker/umami/ && docker compose down --rmi all + cd /home/docker/umami/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml + cd /home/docker/umami/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/umami/ && docker compose down --rmi all + rm -rf /home/docker/umami + echo "アプリがアンインストールされました" + } + + docker_app_plus + + ;; + + b) clear @@ -12177,10 +12218,10 @@ while true; do while true; do clear echo "バックアップファイルが作成されました: /$backup_filename" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice case "$choice" in [Yy]) - read -e -p "リモートサーバーIPを入力してください:" remote_ip + read -e -p "リモートサーバーのIPを入力してください:" remote_ip read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} @@ -12210,8 +12251,8 @@ while true; do r) root_use - send_stats "すべてのアプリケーションが復元されます" - echo "利用可能なアプリのバックアップ" + send_stats "すべてのアプリを復元する" + echo "利用可能なアプリケーションのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12228,11 +12269,11 @@ while true; do fi if [ -n "$filename" ]; then - echo -e "${gl_huang}減圧が行われています$filename ...${gl_bai}" + echo -e "${gl_huang}解凍中$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "アプリケーションデータが復元されました。指定されたアプリケーションメニューを手動で入力し、アプリケーションを更新してアプリケーションを復元してください。" + echo "アプリケーションデータが復元されました。現在、アプリケーションを復元するには、手動で指定されたアプリケーションメニューに入り、アプリケーションを更新してください。" else - echo "圧縮パッケージは見つかりませんでした。" + echo "圧縮パッケージが見つかりませんでした。" fi ;; @@ -12257,28 +12298,28 @@ linux_work() { clear send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" - echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" + echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" - echo "現在既存のワークスペースのリスト" + 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}ワークスペースNo. 2" - echo -e "${gl_kjlan}3. ${gl_bai}ワークスペース番号3" + 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}ワークスペースNo. 5" + echo -e "${gl_kjlan}5. ${gl_bai}ワークスペースNo.5" echo -e "${gl_kjlan}6. ${gl_bai}作業エリア6" echo -e "${gl_kjlan}7. ${gl_bai}作業エリア 7" - echo -e "${gl_kjlan}8. ${gl_bai}ワークスペースNo. 8" + echo -e "${gl_kjlan}8. ${gl_bai}作業エリア8" echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo.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}23. ${gl_bai}バックグラウンドワークスペースにコマンドを挿入する" echo -e "${gl_kjlan}24. ${gl_bai}指定したワークスペースを削除します" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" @@ -12291,7 +12332,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; @@ -12313,7 +12354,7 @@ linux_work() { clear install tmux local SESSION_NAME="work4" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 5) @@ -12327,14 +12368,14 @@ linux_work() { clear install tmux local SESSION_NAME="work6" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; 8) @@ -12355,7 +12396,7 @@ linux_work() { clear install tmux local SESSION_NAME="work10" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; @@ -12373,15 +12414,15 @@ linux_work() { echo "------------------------" echo "1. オン 2. オフ" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" gongzuoqu_del + 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 + 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 ;; @@ -12404,13 +12445,13 @@ linux_work() { 23) - read -e -p "次のようなバックグラウンドで実行するコマンドを入力してください:curl -fssl https://get.docker.com SH:" tmuxd + read -e -p "バックグラウンドで実行するコマンドを入力してください。たとえば、curl -fsSL https://get.docker.com |し:" tmuxd tmux_run_d send_stats "バックグラウンドワークスペースにコマンドを挿入する" ;; 24) - read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name + read -e -p "削除するワークスペースの名前を入力してください:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name send_stats "ワークスペースの削除" ;; @@ -12419,7 +12460,7 @@ linux_work() { kejilion ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -12444,38 +12485,38 @@ linux_Settings() { while true; do clear - # send_stats「システムツール」 + # 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}指定されたバージョンのPythonをインストールします" - 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}ルートアカウントを無効にして新しいアカウントを作成します${gl_kjlan}10. ${gl_bai}優先順位IPv4/IPv6を切り替えます" + echo -e "${gl_kjlan}1. ${gl_bai}スクリプト起動のショートカットキーを設定する${gl_kjlan}2. ${gl_bai}ログインパスワードを変更する" + echo -e "${gl_kjlan}3. ${gl_bai}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" + 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}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}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}ROOT秘密鍵ログインモード" + echo -e "${gl_kjlan}23. ${gl_bai}電流制限自動シャットダウン${gl_kjlan}24. ${gl_bai}ROOT秘密鍵ログインモード" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot システムの監視と早期警告${gl_kjlan}26. ${gl_bai}OpenSSH の高リスク脆弱性を修正" - echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linuxカーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムにおけるカーネルパラメーターの最適化${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux カーネルのアップグレード${gl_kjlan}28. ${gl_bai}Linuxシステムのカーネルパラメータの最適化${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}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}39. ${gl_bai}コマンドのお気に入り${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}掲示板${gl_kjlan}66. ${gl_bai}ワンストップシステムの最適化${gl_huang}★${gl_bai}" + 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}101. ${gl_bai}k コマンドの高度な使用法${gl_huang}★${gl_bai} ${gl_kjlan}102. ${gl_bai}Tech Lion スクリプトをアンインストールする" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻ります" + echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" sub_choice @@ -12490,7 +12531,7 @@ 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 "ショートカットキーが設定されています" + echo "ショートカットキーが設定されている" send_stats "スクリプトのショートカットキーが設定されました" break_end linux_Settings @@ -12500,7 +12541,7 @@ linux_Settings() { 2) clear send_stats "ログインパスワードを設定する" - echo "ログインパスワードを設定します" + echo "ログインパスワードを設定する" passwd ;; 3) @@ -12511,18 +12552,18 @@ linux_Settings() { 4) root_use - send_stats "Pyバージョン管理" + send_stats "pyのバージョン管理" echo "Pythonのバージョン管理" echo "ビデオ紹介: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "この機能は、Pythonが正式にサポートするバージョンをシームレスにインストールします!" + echo "この機能を使用すると、Python で公式にサポートされているバージョンをシームレスにインストールできます。" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "現在のPythonのバージョン番号:${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 "推奨バージョン: 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 + read -e -p "インストールする Python のバージョン番号を入力します (終了するには 0 を入力します)。" py_new_v if [[ "$py_new_v" == "0" ]]; then @@ -12559,7 +12600,7 @@ linux_Settings() { 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 "不明なパッケージマネージャー!" + echo "不明なパッケージマネージャーです!" return fi @@ -12589,7 +12630,7 @@ EOF local VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "現在のPythonのバージョン番号:${gl_huang}$VERSION${gl_bai}" - send_stats "スイッチスクリプトPyバージョン" + send_stats "スクリプトPYバージョン切り替え" ;; @@ -12612,14 +12653,14 @@ EOF # 現在の SSH ポート番号を読み取ります local current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}') - # 現在のSSHポート番号を印刷します + # 現在の SSH ポート番号を出力する echo -e "現在の SSH ポート番号は次のとおりです。${gl_huang}$current_port ${gl_bai}" echo "------------------------" echo "ポート番号の範囲は 1 ~ 65535 です (終了するには 0 を入力します)。" - # ユーザーに新しいSSHポート番号を入力するように促します - read -e -p "新しいSSHポート番号を入力してください:" new_port + # 新しい SSH ポート番号の入力をユーザーに求める + read -e -p "新しい SSH ポート番号を入力してください:" new_port # ポート番号が有効な範囲内であるかどうかを確認します。 if [[ $new_port =~ ^[0-9]+$ ]]; then # 检查输入是否为数字 @@ -12627,11 +12668,11 @@ EOF send_stats "SSHポートが変更されました" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSHポート変更を終了します" + send_stats "SSHポート変更の終了" break else - echo "ポート番号は無効です。1〜65535の数字を入力してください。" - send_stats "無効なSSHポート入力" + echo "ポート番号が無効です。 1 ~ 65535 の数字を入力してください。" + send_stats "無効な SSH ポートが入力されました" break_end fi else @@ -12656,7 +12697,7 @@ EOF 9) root_use send_stats "新規ユーザーの root を無効にする" - read -e -p "新しいユーザー名を入力してください(出口に0を入力してください):" new_username + read -e -p "新しいユーザー名を入力してください (終了するには 0 を入力してください):" new_username if [ "$new_username" == "0" ]; then break_end linux_Settings @@ -12677,7 +12718,7 @@ EOF 10) root_use - send_stats "V4/V6の優先度を設定します" + send_stats "v4/v6 の優先順位を設定する" while true; do clear echo "v4/v6 の優先順位を設定する" @@ -12687,7 +12728,7 @@ EOF if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; then echo -e "現在のネットワーク優先設定:${gl_huang}IPv4${gl_bai}優先度" else - echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" + echo -e "現在のネットワーク優先設定:${gl_huang}IPv6${gl_bai}優先度" fi echo "" @@ -12707,8 +12748,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -12743,20 +12784,20 @@ EOF echo -e "現在の仮想メモリ:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1。1024Mの割り当て2。2048m3を割り当てます。4096m4。カスタムサイズを割り当てます" + echo "1. 1024M の割り当て 2. 2048M の割り当て 3. 4096M の割り当て 4. カスタム サイズ" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case "$choice" in 1) - send_stats "1G仮想メモリが設定されています" + send_stats "1Gの仮想メモリが設定されています" add_swap 1024 ;; 2) - send_stats "2G仮想メモリが設定されています" + send_stats "2Gの仮想メモリが設定されています" add_swap 2048 ;; @@ -12769,7 +12810,7 @@ EOF 4) read -e -p "仮想メモリ サイズ (単位 M) を入力してください:" new_swap add_swap "$new_swap" - send_stats "カスタム仮想メモリが設定されています" + send_stats "カスタム仮想メモリセット" ;; *) @@ -12796,7 +12837,7 @@ EOF echo "" echo "アカウント操作" echo "------------------------" - echo "1.通常のアカウントを作成する2。プレミアムアカウントを作成します" + echo "1. 通常アカウントを作成する 2. プレミアムアカウントを作成する" echo "------------------------" echo "3. 最高の権限を付与する 4. 最高の権限を削除する" echo "------------------------" @@ -12809,7 +12850,7 @@ EOF case $sub_choice in 1) # ユーザーに新しいユーザー名の入力を求める - read -e -p "新しいユーザー名を入力してください:" new_username + read -e -p "新しいユーザー名を入力してください:" new_username # 新しいユーザーを作成してパスワードを設定する useradd -m -s /bin/bash "$new_username" @@ -12822,21 +12863,21 @@ EOF # ユーザーに新しいユーザー名の入力を求める read -e -p "新しいユーザー名を入力してください:" new_username - # 新しいユーザーを作成し、パスワードを設定します + # 新しいユーザーを作成してパスワードを設定する useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 新規ユーザーのsudo許可を付与します + # 新しいユーザーに sudo 権限を付与します echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo - echo "操作が完了しました。" + echo "操作は完了です。" ;; 3) read -e -p "ユーザー名を入力してください:" username - # 新規ユーザーのsudo許可を付与します + # 新しいユーザーに sudo 権限を付与します echo "$username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12862,16 +12903,16 @@ EOF 14) clear - send_stats "ユーザー情報ジェネレーター" + send_stats "ユーザー情報ジェネレータ" echo "ランダムなユーザー名" echo "------------------------" for i in {1..5}; do username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)" - echo "ランダムユーザー名$i: $username" + echo "ランダムなユーザー名$i: $username" done echo "" - 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") @@ -12885,7 +12926,7 @@ EOF done echo "" - echo "ランダムuuid" + echo "ランダムな UUID" echo "------------------------" for i in {1..5}; do uuid=$(cat /proc/sys/kernel/random/uuid) @@ -12901,7 +12942,7 @@ EOF done echo "" - echo "32ビットランダムパスワード" + echo "32ビットのランダムなパスワード" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32) @@ -12918,30 +12959,30 @@ EOF 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 "アジア" echo "1. 中国上海時間 2. 中国香港時間" - echo "3。日本の東京時間4。韓国のソウル時間" + echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" - echo "7。アラブ首長国連邦のドバイ時間8。オーストラリアのシドニー時間" - echo "9。タイのバンコクでの時間" + echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" - echo "13。ベルリン・タイム、ドイツ14。モスクワ・タイム、ロシア" - echo "15。オランダのユトレヒト時間16。スペインでのマドリード時間" + echo "13. ベルリン、ドイツ時間 14. モスクワ、ロシア時間" + echo "15. ユトラハト時間、オランダ 16. マドリッド時間、スペイン" echo "------------------------" echo "アメリカ" echo "21. 米国西部時間 22. 米国東部時間" @@ -12950,7 +12991,7 @@ EOF echo "------------------------" echo "31. UTC 世界標準時" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" sub_choice @@ -12995,7 +13036,7 @@ EOF 18) root_use - send_stats "ホスト名を変更します" + send_stats "ホスト名の変更" while true; do clear @@ -13009,7 +13050,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian、Ubuntu、Centosなどの他のシステム。 + # Debian、Ubuntu、CentOS などのその他のシステム hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13027,11 +13068,11 @@ EOF echo "::1 $new_hostname localhost localhost.localdomain ipv6-localhost ipv6-loopback" >> /etc/hosts fi - echo "ホスト名は次のように変更されています。$new_hostname" + echo "ホスト名は次のように変更されました。$new_hostname" send_stats "ホスト名が変更されました" sleep 1 else - echo "終了すると、ホスト名は変更されていません。" + echo "ホスト名を変更せずに終了しました。" break fi done @@ -13041,14 +13082,14 @@ EOF root_use send_stats "システムアップデートソースを変更する" clear - echo "更新ソース領域を選択します" + echo "更新元リージョンの選択" echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" echo "------------------------" echo "1. 中国本土 [デフォルト] 2. 中国本土 [教育ネットワーク] 3. 海外地域" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -13060,7 +13101,7 @@ EOF bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu ;; 3) - send_stats "海外起源" + send_stats "海外情報源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) @@ -13072,7 +13113,7 @@ EOF ;; 20) - send_stats "タイミングタスク管理" + send_stats "スケジュールされたタスクの管理" while true; do clear check_crontab_installed @@ -13080,26 +13121,26 @@ EOF echo "スケジュールされたタスクのリスト" crontab -l echo "" - echo "動作します" + echo "操作する" echo "------------------------" echo "1. スケジュールされたタスクを追加します。 2. スケジュールされたタスクを削除します。 3. スケジュールされたタスクを編集します。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" sub_choice + read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in 1) read -e -p "新しいタスクの実行コマンドを入力してください:" newquest echo "------------------------" echo "1. 月次タスク 2. 週次タスク" - echo "3。毎日のタスク4。時間ごとのタスク" + echo "3. 毎日のタスク 4. 時間ごとのタスク" echo "------------------------" - read -e -p "選択を入力してください:" dingshi + read -e -p "選択肢を入力してください:" dingshi case $dingshi in 1) - read -e -p "毎月何日を選択してタスクを実行しますか? (1-30):" day + read -e -p "タスクを実行する日は月の何日ですか? (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) @@ -13111,19 +13152,19 @@ EOF (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "タスクを実行するために時間の何時間を入力しますか? (分、0-60):" minute + read -e -p "タスクを実行する時間を入力してください。 (分、0 ~ 60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) break # 跳出 ;; esac - send_stats "タイムされたタスクを追加します" + send_stats "スケジュールされたタスクを追加する" ;; 2) - read -e -p "削除する必要があるキーワードを入力してください。" kquest + read -e -p "削除するタスクのキーワードを入力してください:" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "タイミングタスクを削除します" + send_stats "スケジュールされたタスクを削除する" ;; 3) crontab -e @@ -13142,15 +13183,15 @@ EOF send_stats "ローカルホストの解決" while true; do clear - echo "ネイティブホストのペルシングリスト" + echo "ネイティブホスト解決リスト" echo "ここに解析一致を追加すると、動的解析は使用されなくなります" cat /etc/hosts echo "" echo "操作する" echo "------------------------" - echo "1.新しい解析2を追加します。解析アドレスを削除します" + echo "1. 新しい解決策を追加 2. 解決策アドレスを削除" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" host_dns @@ -13158,7 +13199,7 @@ EOF 1) read -e -p "新しい解析レコード形式を入力してください: 110.25.5.33 kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "ローカルホストの解析が追加されました" + send_stats "ローカルホスト解像度が追加されました" ;; 2) @@ -13180,15 +13221,15 @@ EOF check_f2b_status echo -e "SSH防御プログラム$check_f2b_status" - echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" - echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" + echo "failed2ban はブルート フォース クラッキングを防ぐ SSH ツールです" + echo "公式サイト紹介:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" echo "1. 防御プログラムをインストールする" echo "------------------------" - echo "2。SSH傍受記録を表示します" - echo "3。リアルタイムログ監視" + echo "2. SSH インターセプト記録の表示" + echo "3. リアルタイムログ監視" echo "------------------------" - echo "9.防衛プログラムをアンインストールします" + echo "9. 防御プログラムをアンインストールする" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -13214,7 +13255,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; *) @@ -13233,36 +13274,36 @@ EOF echo "電流制限シャットダウン機能" echo "ビデオ紹介: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" + echo "現在のトラフィック使用量は、サーバーが再起動されるとクリアされます。" output_status - echo -e "${gl_kjlan}合計受信:${gl_bai}$rx" - echo -e "${gl_kjlan}合計送信:${gl_bai}$tx" + echo -e "${gl_kjlan}受け取った合計:${gl_bai}$rx" + echo -e "${gl_kjlan}送信合計:${gl_bai}$tx" - # limiting_shut_down.shファイルが存在するかどうかを確認してください + # Limiting_Shut_down.sh ファイルが存在するかどうかを確認します if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gbの値を取得します + # しきい値_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}" + 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません。${gl_bai}" fi echo echo "------------------------------------------------" - echo "システムは、実際のトラフィックが毎分でしきい値に達するかどうかを検出し、サーバーが到着した後にサーバーが自動的にシャットダウンされます!" + echo "システムは実際のトラフィックがしきい値に達したかどうかを毎分検出し、しきい値に達するとサーバーを自動的にシャットダウンします。" echo "------------------------" echo "1. 電流制限シャットダウン機能を有効にする 2. 電流制限シャットダウン機能を無効にする" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" Limiting + read -e -p "選択肢を入力してください:" Limiting case "$Limiting" in 1) - # 新しい仮想メモリサイズを入力します - echo "実際のサーバーに100gのトラフィックがある場合、しきい値を95gに設定し、事前に電源をシャットダウンして、トラフィックエラーやオーバーフローを回避できます。" + # 新しい仮想メモリ サイズを入力してください + echo "実際のサーバーのトラフィックが 100G しかない場合は、しきい値を 95G に設定し、事前にシャットダウンして、トラフィック エラーやオーバーフローを回避できます。" read -e -p "受信トラフィックのしきい値を入力してください (単位は G、デフォルトは 100G):" rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "送信トラフィックのしきい値を入力してください (単位は G、デフォルトは 100G):" tx_threshold_gb @@ -13280,8 +13321,8 @@ EOF (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 "現在の制限シャットダウンが設定されています" + echo "電流制限シャットダウンが設定されています" + send_stats "電流制限シャットダウンが設定されています" ;; 2) check_crontab_installed @@ -13301,40 +13342,40 @@ EOF 24) root_use - send_stats "秘密キーログイン" + send_stats "秘密キーによるログイン" while true; do clear - echo "ルート秘密キーログインモード" + echo "ROOT秘密鍵ログインモード" echo "ビデオ紹介: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" echo "キーペアが生成され、SSH 経由でログインするためのより安全な方法になります。" echo "------------------------" echo "1. 新しいキーを生成します。 2. 既存のキーをインポートします。 3. ローカルキーを表示します。" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" host_dns + read -e -p "選択肢を入力してください:" host_dns case $host_dns in 1) - send_stats "新しいキーを生成します" + send_stats "新しいキーを生成する" add_sshkey break_end ;; 2) - send_stats "既存の公開キーをインポートします" + send_stats "既存の公開キーをインポートする" import_sshkey break_end ;; 3) - send_stats "地元の秘密の鍵を表示します" + send_stats "ローカルキーを表示する" echo "------------------------" echo "公開鍵情報" cat ~/.ssh/authorized_keys echo "------------------------" - echo "秘密のキー情報" + echo "秘密鍵情報" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13350,14 +13391,14 @@ EOF 25) root_use - send_stats "電報警告" + send_stats "電報警報" echo "TG-bot監視・早期警告機能" echo "動画紹介:https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" echo "ローカル CPU、メモリ、ハードディスク、トラフィック、SSH ログインのリアルタイム監視とアラートを実現するには、tg robot API とアラートを受信するユーザー ID を設定する必要があります。" - echo "しきい値に達した後、ユーザーはユーザーに送信されます" + echo "しきい値に達すると、警告メッセージがユーザーに送信されます。" echo -e "${gl_hui}- 通信量についてはサーバーを再起動すると再計算されます -${gl_bai}" - read -e -p "必ず続けますか? (y/n):" choice + read -e -p "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) @@ -13395,20 +13436,20 @@ EOF clear echo "TG-bot早期警戒システムが作動しました" - echo -e "${gl_hui}他のマシンのルートディレクトリにTG-Check-notify.sh警告ファイルを配置して、直接使用することもできます。${gl_bai}" + echo -e "${gl_hui}TG-check-notify.sh 警告ファイルを他のマシンのルート ディレクトリに置き、それを直接使用することもできます。${gl_bai}" ;; [Nn]) echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; 26) root_use - send_stats "SSHの高リスクの脆弱性を修正します" + 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 @@ -13476,9 +13517,9 @@ EOF 41) clear send_stats "掲示板" - echo "公式のメッセージ技術委員会ライオンをご覧ください。スクリプトについて何かアイデアがある場合は、メッセージを残してコミュニケーションをとってください!" + echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" echo "https://board.kejilion.pro" - echo "パスワード:kejilion.sh" + echo "公開パスワード: kejilion.sh" ;; 66) @@ -13487,16 +13528,16 @@ EOF send_stats "ワンストップチューニング" echo "ワンストップのシステムチューニング" echo "------------------------------------------------" - echo "以下が操作され、最適化されます" - echo "1.システムを最新の状態に更新します" - echo "2。システムジャンクファイルをクリーンアップします" + 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 "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. Linux システムのカーネル パラメータの最適化が次のように切り替わります。${gl_huang}バランスのとれた最適化モード${gl_bai}" echo "------------------------------------------------" read -e -p "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" choice @@ -13507,7 +13548,7 @@ EOF send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10。システムを最新の状態に更新します" + echo -e "[${gl_lv}OK${gl_bai}】1/10。システムを最新のものにアップデートする" echo "------------------------------------------------" linux_clean @@ -13515,18 +13556,18 @@ EOF echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10。仮想メモリを設定します${gl_huang}1G${gl_bai}" + 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 -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 -e "[${gl_lv}OK${gl_bai}】6/10。開ける${gl_huang}BBR${gl_bai}加速する" echo "------------------------------------------------" set_timedate Asia/Shanghai @@ -13552,13 +13593,13 @@ EOF 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 -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。 Linuxシステムのカーネルパラメータの最適化" - echo -e "${gl_lv}ワンストップシステムのチューニングが完了しました${gl_bai}" + echo -e "${gl_lv}ワンストップでのシステムチューニングが完了${gl_bai}" ;; [Nn]) @@ -13595,10 +13636,10 @@ EOF echo "------------------------------------------------" echo -e "現在のステータス:$status_message" echo "--------------------" - echo "1。コレクションをオンにします" + echo "1.収集を開始する" echo "2. コレクションを閉じる" echo "--------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "--------------------" read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -13607,13 +13648,13 @@ EOF 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 "プライバシーとセキュリティコレクションが有効になっています" + 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 "コレクションは閉じた" + echo "コレクションは終了しました" send_stats "プライバシーとセキュリティの収集がオフになっています" ;; *) @@ -13633,7 +13674,7 @@ EOF send_stats "Tech Lion スクリプトをアンインストールする" echo "Tech Lion スクリプトをアンインストールする" echo "------------------------------------------------" - echo "Kejilionスクリプトを完全にアンインストールし、他の機能には影響しません" + echo "kejilion スクリプトは、他の機能に影響を与えることなく完全にアンインストールされます。" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in @@ -13642,7 +13683,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "スクリプトはアンインストールされています、さようなら!" + echo "スクリプトはアンインストールされました、さようなら!" break_end clear exit @@ -13651,7 +13692,7 @@ EOF echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -13692,125 +13733,125 @@ linux_file() { echo "1. ディレクトリを入力します。 2. ディレクトリを作成します。 3. ディレクトリのアクセス許可を変更します。 4. ディレクトリの名前を変更します。" echo "5. ディレクトリを削除します。 6. 前のメニュー ディレクトリに戻ります。" echo "------------------------" - echo "11。ファイルを作成する12。ファイル13を編集します。ファイル許可を変更14。ファイルの名前を変更します" - echo "15.ファイルを削除します" + echo "11. ファイルの作成 12. ファイルの編集 13. ファイル権限の変更 14. ファイル名の変更" + echo "15. ファイルの削除" echo "------------------------" echo "21. ファイル ディレクトリの圧縮 22. ファイル ディレクトリの解凍 23. ファイル ディレクトリの移動 24. ファイル ディレクトリのコピー" - echo "25。ファイルを別のサーバーに渡します" + echo "25. 他のサーバーにファイルを転送する" echo "------------------------" - echo "0。前のメニューに戻ります" + echo "0. 前のメニューに戻る" echo "------------------------" read -e -p "選択肢を入力してください:" Limiting case "$Limiting" in 1) # 进入目录 read -e -p "ディレクトリ名を入力してください:" dirname - cd "$dirname" 2>/dev/null || echo "ディレクトリを入力できません" + cd "$dirname" 2>/dev/null || echo "ディレクトリに入れません" send_stats "ディレクトリを入力してください" ;; 2) # 创建目录 - read -e -p "作成するにはディレクトリ名を入力してください。" dirname - mkdir -p "$dirname" && echo "作成されたディレクトリ" || echo "作成に失敗しました" - send_stats "ディレクトリを作成します" + read -e -p "作成するディレクトリ名を入力してください:" dirname + mkdir -p "$dirname" && echo "ディレクトリが作成されました" || echo "作成に失敗しました" + send_stats "ディレクトリの作成" ;; 3) # 修改目录权限 - read -e -p "ディレクトリ名を入力してください:" dirname - read -e -p "許可(755など)を入力してください。" perm + 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 "ディレクトリの名前を変更します" + 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 "削除が失敗しました" + read -e -p "削除するディレクトリ名を入力してください:" dirname + rm -rf "$dirname" && echo "ディレクトリが削除されました" || echo "削除に失敗しました" send_stats "ディレクトリを削除する" ;; 6) # 返回上一级选单目录 cd .. - send_stats "前のメニューディレクトリに戻ります" + send_stats "前のメニュー ディレクトリに戻る" ;; 11) # 创建文件 - read -e -p "作成するにはファイル名を入力してください。" filename + read -e -p "作成するファイル名を入力してください:" filename touch "$filename" && echo "ファイルが作成されました" || echo "作成に失敗しました" send_stats "ファイルの作成" ;; 12) # 编辑文件 - read -e -p "編集するにはファイル名を入力してください:" filename + read -e -p "編集するファイル名を入力してください:" filename install nano nano "$filename" - send_stats "ファイルを編集します" + send_stats "ファイルを編集する" ;; 13) # 修改文件权限 - read -e -p "ファイル名を入力してください:" filename + read -e -p "ファイル名を入力してください:" filename read -e -p "権限を入力してください (例: 755):" perm chmod "$perm" "$filename" && echo "権限が変更されました" || echo "変更に失敗しました" - send_stats "ファイル権限を変更します" + send_stats "ファイル権限を変更する" ;; 14) # 重命名文件 - read -e -p "現在のファイル名を入力してください:" current_name + 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 "削除が失敗しました" + rm -f "$filename" && echo "ファイルが削除されました" || echo "削除に失敗しました" send_stats "ファイルの削除" ;; 21) # 压缩文件/目录 - read -e -p "圧縮するには、ファイル/ディレクトリ名を入力してください。" name + read -e -p "圧縮するファイル/ディレクトリ名を入力してください:" name install tar - tar -czvf "$name.tar.gz" "$name" && echo "圧縮$name.tar.gz" || echo "圧縮に失敗しました" + tar -czvf "$name.tar.gz" "$name" && echo "に圧縮$name.tar.gz" || echo "圧縮に失敗しました" send_stats "圧縮ファイル/ディレクトリ" ;; 22) # 解压文件/目录 - read -e -p "ファイル名(.tar.gz)を入力してください:" filename + read -e -p "抽出するファイル名 (.tar.gz) を入力してください:" filename install tar tar -xzvf "$filename" && echo "解凍された$filename" || echo "解凍に失敗しました" - send_stats "ファイル/ディレクトリを解凍します" + send_stats "ファイル/ディレクトリを解凍する" ;; 23) # 移动文件或目录 - read -e -p "移動するには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "移動するファイルまたはディレクトリのパスを入力してください:" src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:ファイルまたはディレクトリは存在しません" + echo "エラー: ファイルまたはディレクトリが存在しません。" + send_stats "ファイルまたはディレクトリの移動に失敗しました: ファイルまたはディレクトリが存在しません" continue fi - read -e -p "ターゲットパス(新しいファイル名またはディレクトリ名を含む)を入力してください。" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" - send_stats "ファイルまたはディレクトリの移動に失敗しました:宛先パスが指定されていません" + send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" continue fi - mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリの移動先$dest_path" || echo "ファイルやディレクトリの移動に失敗しました" + mv "$src_path" "$dest_path" && echo "ファイルまたはディレクトリの移動先$dest_path" || echo "ファイルまたはディレクトリの移動に失敗しました" send_stats "ファイルまたはディレクトリを移動する" ;; 24) # 复制文件目录 - read -e -p "コピーするには、ファイルまたはディレクトリパスを入力してください。" src_path + read -e -p "コピーするファイルまたはディレクトリのパスを入力してください:" src_path if [ ! -e "$src_path" ]; then - echo "エラー:ファイルまたはディレクトリは存在しません。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:ファイルまたはディレクトリが存在しません" + echo "エラー: ファイルまたはディレクトリが存在しません。" + send_stats "ファイルまたはディレクトリのコピーに失敗しました: ファイルまたはディレクトリが存在しません" continue fi read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" - send_stats "ファイルまたはディレクトリのコピーに失敗しました:宛先パスが指定されていない" + send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" continue fi - # -Rオプションを使用して、ディレクトリを再帰的にコピーします + # -r オプションを使用してディレクトリを再帰的にコピーします cp -r "$src_path" "$dest_path" && echo "コピー先のファイルまたはディレクトリ$dest_path" || echo "ファイルまたはディレクトリのコピーに失敗しました" send_stats "ファイルまたはディレクトリをコピーする" ;; @@ -13819,15 +13860,15 @@ linux_file() { 25) # 传送文件至远端服务器 read -e -p "転送するファイル パスを入力してください:" file_to_transfer if [ ! -f "$file_to_transfer" ]; then - echo "エラー:ファイルは存在しません。" - send_stats "ファイルの転送に失敗しました:ファイルは存在しません" + echo "エラー: ファイルが存在しません。" + send_stats "ファイルの転送に失敗しました: ファイルが存在しません" continue fi read -e -p "リモートサーバーのIPを入力してください:" remote_ip if [ -z "$remote_ip" ]; then echo "エラー: リモート サーバーの IP を入力してください。" - send_stats "ファイル転送に失敗しました:リモートサーバーIPは入力されませんでした" + send_stats "ファイル転送に失敗しました: リモート サーバー IP が入力されていません" continue fi @@ -13838,14 +13879,14 @@ linux_file() { echo if [ -z "$remote_password" ]; then echo "エラー: リモート サーバーのパスワードを入力してください。" - send_stats "ファイル転送の失敗:リモートサーバーパスワードが入力されていません" + 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 # 等待时间 @@ -13855,8 +13896,8 @@ $remote_password EOF if [ $? -eq 0 ]; then - echo "このファイルは、リモートサーバーホームディレクトリに転送されました。" - send_stats "ファイル転送に正常に転送します" + echo "ファイルはリモート サーバーのホーム ディレクトリに転送されました。" + send_stats "ファイル転送が成功しました" else echo "ファイル転送に失敗しました。" send_stats "ファイル転送に失敗しました" @@ -13899,7 +13940,7 @@ run_commands_on_servers() { local SERVERS_FILE="$HOME/cluster/servers.py" local SERVERS=$(grep -oP '{"name": "\K[^"]+|"hostname": "\K[^"]+|"port": \K[^,]+|"username": "\K[^"]+|"password": "\K[^"]+' "$SERVERS_FILE") - # 抽出された情報を配列に変換します + # 抽出した情報を配列に変換する IFS=$'\n' read -r -d '' -a SERVER_ARRAY <<< "$SERVERS" # サーバーを横断してコマンドを実行する @@ -13932,19 +13973,19 @@ fi while true; do clear - send_stats "クラスター制御センター" + 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}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}タスクをバッチで実行する${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}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}" @@ -13954,10 +13995,10 @@ while true; do 1) send_stats "クラスターサーバーの追加" read -e -p "サーバー名:" server_name - read -e -p "サーバーIP:" server_ip - read -e -p "サーバーポート(22):" server_port + read -e -p "サーバーIP:" server_ip + read -e -p "サーバーポート (22):" server_port local server_port=${server_port:-22} - read -e -p "サーバーユーザー名(root):" server_username + read -e -p "サーバーのユーザー名 (root):" server_username local server_username=${server_username:-root} read -e -p "サーバーユーザーのパスワード:" server_password @@ -13965,8 +14006,8 @@ while true; do ;; 2) - send_stats "クラスターサーバーを削除します" - read -e -p "削除する必要があるキーワードを入力してください。" rmserver + send_stats "クラスターサーバーの削除" + read -e -p "削除するキーワードを入力してください:" rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) @@ -13978,15 +14019,15 @@ while true; do 4) clear send_stats "バックアップクラスター" - echo -e "お願いします${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" + echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; 5) clear - send_stats "クラスタを復元する" + send_stats "クラスターを復元する" echo "servers.py をアップロードし、任意のキーを押してアップロードを開始してください。" - echo -e "アップロードしてください${gl_huang}servers.py${gl_bai}にファイル${gl_huang}/root/cluster/${gl_bai}復元を完了してください!" + echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}ファイルに${gl_huang}/root/cluster/${gl_bai}復元完了!" break_end ;; @@ -14036,48 +14077,48 @@ done kejilion_Affiliates() { clear -send_stats "広告列" +send_stats "広告コラム" echo "広告コラム" echo "------------------------" -echo "これにより、ユーザーはよりシンプルでエレガントなプロモーションと購入エクスペリエンスを提供します!" +echo "ユーザーには、よりシンプルでエレガントなプロモーションと購入エクスペリエンスが提供されます。" echo "" -echo -e "サーバーオファー" +echo -e "サーバー割引" echo "------------------------" echo -e "${gl_lan}Laika Cloud 香港 CN2 GIA 韓国のデュアル ISP 米国 CN2 GIA プロモーション${gl_bai}" -echo -e "${gl_bai}ウェブサイト:https://www.lcayun.com/aff/zexuqbim${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 -e "${gl_bai}URL: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" echo "------------------------" echo -e "${gl_zi}Hostinger 年間 $52.7 米国 1 コア 4G メモリ 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 -e "${gl_bai}URL: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${gl_bai}" echo "------------------------" echo -e "${gl_huang}Bricklayer 四半期あたり 49 ドル 米国 CN2GIA 日本 ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 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ドルUS CN2GIA 1コア2Gメモリ20Gハードドライブ800gトラフィック${gl_bai}" +echo -e "${gl_lan}DMIT 四半期あたり 28 ドル 米国 CN2GIA 1 コア 2G メモリ 20G ハード ドライブ 1 か月あたり 800G トラフィック${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" -echo -e "${gl_bai}ウェブサイト:https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?faffid=1355 &? affid=1355${gl_bai}" +echo -e "${gl_bai}URL: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_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 -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}ステーションB:${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 -e "${gl_kjlan}ブログ:${gl_bai}https://blog.kejilion.pro/ ${gl_kjlan}ソフトウェアセンター:${gl_bai}https://app.kejilion.pro/${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}スクリプトの公式ウェブサイト:${gl_bai}https://kejilion.sh ${gl_kjlan}githubアドレス:${gl_bai}https://github.com/kejilion/sh${gl_bai}" +echo -e "${gl_kjlan}スクリプト公式サイト:${gl_bai}https://kejilion.sh ${gl_kjlan}GitHub アドレス:${gl_bai}https://github.com/kejilion/sh${gl_bai}" echo "------------------------" echo "" } @@ -14092,16 +14133,16 @@ send_stats "スクリプトの更新" cd ~ while true; do clear - echo "ログを更新します" + echo "変更ログ" echo "------------------------" - echo "すべてのログ:${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt" + 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}" + echo -e "${gl_lv}すでに最新バージョンを使用しています。${gl_huang}v$sh_v${gl_bai}" send_stats "スクリプトはすでに最新であるため、更新する必要はありません" else echo "新しいバージョン発見!" @@ -14120,9 +14161,9 @@ while true; do echo "------------------------" echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" echo "------------------------" - echo "0。メインメニューに戻ります" + echo "0. メインメニューに戻る" echo "------------------------" - read -e -p "選択を入力してください:" choice + read -e -p "選択肢を入力してください:" choice case "$choice" in 1) clear @@ -14188,10 +14229,10 @@ echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" echo -e "テクノロジー ライオン スクリプト ツールボックス v$sh_v" -echo -e "コマンドライン入力${gl_huang}k${gl_kjlan}スクリプトをすばやく開始します${gl_bai}" +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}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管理" @@ -14203,20 +14244,20 @@ echo -e "${gl_huang}10. ${gl_bai}LDNMP Web サイトの構築" 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}14. ${gl_bai}サーバークラスタ制御" echo -e "${gl_kjlan}15. ${gl_bai}広告コラム" echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}p. ${gl_bai}Phantom Beast Palu Serverオープニングスクリプト" +echo -e "${gl_kjlan}p. ${gl_bai}Eudemons Parlu サーバー開始スクリプト" 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}0. ${gl_bai}終了スクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" -read -e -p "選択を入力してください:" choice +read -e -p "選択肢を入力してください:" choice case $choice in 1) linux_info ;; - 2) clear ; send_stats "システムの更新" ; linux_update ;; + 2) clear ; send_stats "システムアップデート" ; linux_update ;; 3) clear ; send_stats "システムのクリーンアップ" ; linux_clean ;; 4) linux_tools ;; 5) linux_bbr ;; @@ -14232,13 +14273,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu Serverオープニングスクリプト" ; cd ~ + p) send_stats "Eudemons Parlu サーバー開始スクリプト" ; 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 "無効な入力!" ;; + *) echo "無効な入力です!" ;; esac break_end done @@ -14246,50 +14287,50 @@ done k_info() { -send_stats "Kコマンド参照ユースケース" +send_stats "k コマンドリファレンスの使用例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "以下は、Kコマンドリファレンスユースケースです。" +echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" -echo "パッケージのアンインストールk nano wgetを削除| k del nano wget | K UNINSTALLNANOWGET | K UNINSTALLNANO WGET" -echo "システムKアップデートを更新| Kアップデート" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" +echo "システム k アップデートを更新 | kアップデート" echo "クリーン系ジャンククリーン |きれいだ" -echo "システムパネルk dd |を再インストールしますk再インストール" -echo "BBR3コントロールパネルK BBR3 | K BBRV3" -echo "カーネルチューニングパネルk nhyh | Kカーネル最適化" +echo "システムパネルを再度取り付けます。 k再インストール" +echo "BBR3 コントロール パネル K BBR3 | k bbrv3" +echo "カーネル チューニング パネルk カーネルの最適化" echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" echo "システムごみ箱のゴミ箱 | k hz | k ごみ箱" echo "システムバックアップ機能 kバックアップ | k bf | k バックアップ" -echo "SSHリモート接続ツールK SSH | Kリモート接続" +echo "ssh リモート接続ツール k ssh | k リモート接続" echo "rsync リモート同期ツール k rsync | k リモート同期" echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" echo "イントラネット普及率 (サーバー) k frps" echo "イントラネット浸透率 (クライアント) k frpc" echo "ソフトウェア起動 k start sshd | sshdを起動します" -echo "ソフトウェアSTOP K STOP SSHD | k stop sshd" -echo "ソフトウェア再起動k再起動sshd | k再起動sshd" +echo "ソフトウェア停止 k 停止 sshd | k ストップ sshd" +echo "ソフトウェア再起動 k 再起動 sshd | k sshdを再起動します" echo "ソフトウェアのステータスを確認します。 k ステータス sshd | kステータスsshd" echo "k ドッカーを有効にする | k 自動開始ドッカー | k ソフトウェアの起動時に Docker を有効にする" -echo "ドメイン名証明書アプリケーションK SSL" +echo "ドメイン名証明書アプリケーション k ssl" echo "ドメイン名証明書の有効期限のクエリ k ssl ps" echo "docker 管理プレーン k docker" -echo "Docker Environment Installation K Dockerインストール| K Dockerのインストール" -echo "Docker Container Management K Docker PS | K Dockerコンテナ" -echo "Docker Image Management K Docker IMG | K Docker画像" +echo "docker 環境のインストール k docker install |k docker インストール" +echo "docker コンテナ管理 k docker ps |k docker コンテナ" +echo "docker イメージ管理 k docker img |k docker image" echo "LDNMP サイト管理 k Web" echo "LDNMP キャッシュのクリーニング k Web キャッシュ" -echo "WordPress k wp | k wordpress | k wp xxx.comをインストールします" -echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" +echo "WordPress をインストールします。 kワードプレス | k wp xxx.com" +echo "リバース プロキシをインストールします k fd |k rp |k リバース プロキシ |k fd xxx.com" echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" echo "ファイアウォール パネル k fhq |k ファイアウォール" echo "ポートを開きます 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 "ブロックIP K ZZIP 177.5.25.36 | KブロックIP 177.5.25.36" +echo "リリース IP k fxip 127.0.0.0/8 |k リリース IP 127.0.0.0/8" +echo "ブロック IP k zzip 177.5.25.36 |k ブロック IP 177.5.25.36" echo "コマンド お気に入り k お気に入り | k コマンドのお気に入り" -echo "アプリ市場管理Kアプリ" +echo "アプリケーションマーケット管理kアプリ" echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" echo "システム情報を表示 k info" } @@ -14297,14 +14338,14 @@ echo "システム情報を表示 k info" if [ "$#" -eq 0 ]; then - # パラメーターがない場合は、インタラクティブロジックを実行します + # 引数なしで対話型ロジックを実行します kejilion_sh else # パラメータがある場合は、対応する関数を実行します case $1 in install|add|安装) shift - send_stats "ソフトウェアをインストールします" + send_stats "ソフトウェアのインストール" install "$@" ;; remove|del|uninstall|卸载) @@ -14343,7 +14384,7 @@ else rsync_run) shift - send_stats "タイム付きRSYNC同期" + send_stats "スケジュールされたrsync同期" run_task "$@" ;; @@ -14362,7 +14403,7 @@ else find_container_by_host_port "$port" if [ -z "$docker_name" ]; then close_port "$port" - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "IP+ポートはサービスへのアクセスをブロックされています" else ip_address block_container_port "$docker_name" "$ipv4_address" @@ -14375,7 +14416,7 @@ else swap) shift - send_stats "仮想メモリをすばやく設定します" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; @@ -14429,7 +14470,7 @@ else status|状态) shift - send_stats "ソフトウェアステータスビュー" + send_stats "ソフトウェアのステータスを確認する" status "$@" ;; start|启动) @@ -14474,7 +14515,7 @@ else shift case $1 in install|安装) - send_stats "Dockerを素早くインストールする" + send_stats "Docker をすばやくインストールする" install_docker ;; ps|容器) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 4bffecd80..88d94db65 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.8" +sh_v="4.1.9" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -111,22 +111,22 @@ CheckFirstRun_false() { fi } -# 사용자에게 이용 약관에 동의하라는 메시지 +# 사용자에게 약관에 동의하라는 메시지를 표시합니다. UserLicenseAgreement() { clear echo -e "${gl_kjlan}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${gl_bai}" - echo "스크립트를 처음 사용하면 사용자 라이센스 계약을 읽고 동의하십시오." + echo "스크립트를 처음 사용하는 경우 사용자 라이센스 계약을 읽고 동의하십시오." echo "사용자 라이센스 계약: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "위의 약관에 동의하십니까? (예/아니요):" user_input if [ "$user_input" = "y" ] || [ "$user_input" = "Y" ]; then - send_stats "라이센스 동의" + 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 "허가 거부" + send_stats "허가가 거부되었습니다" clear exit fi @@ -222,9 +222,9 @@ check_disk_space() { if [ "$available_space_mb" -lt "$required_space_mb" ]; then echo -e "${gl_huang}힌트:${gl_bai}디스크 공간이 부족합니다!" echo "현재 사용 가능한 공간: $((available_space_mb/1024))G" - echo "최소 수요 공간 :${required_gb}G" + echo "최소 필요 공간:${required_gb}G" echo "설치를 계속할 수 없습니다. 디스크 공간을 비운 후 다시 시도하십시오." - send_stats "불충분 한 디스크 공간" + send_stats "디스크 공간이 부족합니다." break_end kejilion fi @@ -238,7 +238,7 @@ install_dependency() { remove() { if [ $# -eq 0 ]; then - echo "패키지 매개 변수는 제공되지 않습니다!" + echo "패키지 매개변수가 제공되지 않았습니다!" return 1 fi @@ -261,7 +261,7 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "알 수없는 패키지 관리자!" + echo "알 수 없는 패키지 관리자입니다!" return 1 fi done @@ -287,11 +287,11 @@ restart() { if [ $? -eq 0 ]; then echo "$1서비스가 다시 시작되었습니다." else - echo "오류 : 다시 시작합니다$1서비스가 실패했습니다." + echo "오류: 다시 시작$1서비스가 실패했습니다." fi } -# 서비스를 시작하십시오 +# 서비스 시작 start() { systemctl start "$1" if [ $? -eq 0 ]; then @@ -307,7 +307,7 @@ stop() { if [ $? -eq 0 ]; then echo "$1서비스가 중지되었습니다." else - echo "오류 : 중지$1서비스가 실패했습니다." + echo "오류: 중지$1서비스가 실패했습니다." fi } @@ -317,7 +317,7 @@ status() { if [ $? -eq 0 ]; then echo "$1서비스 상태가 표시됩니다." else - echo "오류 : 표시 할 수 없습니다$1서비스 상태." + echo "오류: 표시할 수 없습니다.$1서비스 상태." fi } @@ -330,14 +330,14 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME전원 켜기로 설정합니다." + echo "$SERVICE_NAME부팅시 자동으로 시작되도록 설정되어 있습니다." } break_end() { - echo -e "${gl_lv}작업이 완료되었습니다${gl_bai}" - echo "계속하려면 키를 누르십시오 ..." + echo -e "${gl_lv}작업 완료${gl_bai}" + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" echo "" clear @@ -427,7 +427,7 @@ install_add_docker_cn install_add_docker() { - echo -e "${gl_huang}Docker 환경 설치 ...${gl_bai}" + 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 @@ -508,29 +508,29 @@ while true; do echo "" echo "컨테이너 운영" echo "------------------------" - echo "1. 새 컨테이너를 만듭니다" + echo "1. 새 컨테이너 생성" echo "------------------------" echo "2. 지정된 컨테이너 시작 6. 모든 컨테이너 시작" echo "3. 지정된 컨테이너를 중지합니다. 7. 모든 컨테이너를 중지합니다." echo "4. 지정된 컨테이너 삭제 8. 모든 컨테이너 삭제" - echo "5. 지정된 컨테이너를 다시 시작하십시오. 9. 모든 컨테이너를 다시 시작하십시오" + echo "5. 지정된 컨테이너를 다시 시작합니다. 9. 모든 컨테이너를 다시 시작합니다." echo "------------------------" - echo "11. 지정된 컨테이너를 입력하십시오. 12. 컨테이너 로그보기" + echo "11. 지정된 컨테이너를 입력합니다. 12. 컨테이너 로그를 봅니다." echo "13. 컨테이너 네트워크 확인 14. 컨테이너 점유율 확인" echo "------------------------" - echo "15. 컨테이너 포트 액세스 켜기 16. 컨테이너 포트 액세스를 끄십시오." + echo "15. 컨테이너 포트 액세스 활성화 16. 컨테이너 포트 액세스 닫기" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) send_stats "새 컨테이너 만들기" - read -e -p "창조 명령을 입력하십시오 :" dockername + read -e -p "생성 명령을 입력하십시오:" dockername $dockername ;; 2) - send_stats "지정된 컨테이너를 시작하십시오" + send_stats "지정된 컨테이너 시작" read -e -p "컨테이너 이름을 입력하세요(여러 컨테이너 이름을 공백으로 구분하세요)." dockername docker start $dockername ;; @@ -540,17 +540,17 @@ while true; do docker stop $dockername ;; 4) - send_stats "지정된 컨테이너를 삭제하십시오" - read -e -p "컨테이너 이름 (공백별로 분리 된 여러 컨테이너 이름)을 입력하십시오." dockername + send_stats "지정된 컨테이너 삭제" + read -e -p "컨테이너 이름을 입력하세요(여러 컨테이너 이름을 공백으로 구분하세요)." dockername docker rm -f $dockername ;; 5) - send_stats "지정된 컨테이너를 다시 시작하십시오" + send_stats "지정된 컨테이너를 다시 시작합니다." read -e -p "컨테이너 이름을 입력하세요(여러 컨테이너 이름을 공백으로 구분하세요)." dockername docker restart $dockername ;; 6) - send_stats "모든 컨테이너를 시작하십시오" + send_stats "모든 컨테이너 시작" docker start $(docker ps -a -q) ;; 7) @@ -572,23 +572,23 @@ while true; do esac ;; 9) - send_stats "모든 컨테이너를 다시 시작하십시오" + send_stats "모든 컨테이너 다시 시작" docker restart $(docker ps -q) ;; 11) - send_stats "컨테이너를 입력하십시오" + send_stats "컨테이너를 입력하세요" read -e -p "컨테이너 이름을 입력하세요:" dockername docker exec -it $dockername /bin/sh break_end ;; 12) - send_stats "컨테이너 로그를 봅니다" + send_stats "컨테이너 로그 보기" read -e -p "컨테이너 이름을 입력하세요:" dockername docker logs $dockername break_end ;; 13) - send_stats "컨테이너 네트워크를 봅니다" + send_stats "컨테이너 네트워크 보기" echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" @@ -606,14 +606,14 @@ while true; do break_end ;; 14) - send_stats "컨테이너 점유를 봅니다" + send_stats "컨테이너 점유율 보기" docker stats --no-stream break_end ;; 15) - send_stats "컨테이너 포트 액세스를 허용합니다" - read -e -p "컨테이너 이름을 입력하십시오 :" docker_name + send_stats "컨테이너 포트 액세스 허용" + read -e -p "컨테이너 이름을 입력하세요:" docker_name ip_address clear_container_rules "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -623,7 +623,7 @@ while true; do 16) send_stats "컨테이너 포트 접근 차단" - read -e -p "컨테이너 이름을 입력하십시오 :" docker_name + read -e -p "컨테이너 이름을 입력하세요:" docker_name ip_address block_container_port "$docker_name" "$ipv4_address" local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) @@ -648,31 +648,31 @@ while true; do echo "" echo "미러 작동" echo "------------------------" - echo "1. 지정된 이미지 가져 오기 3. 지정된 이미지 삭제" + echo "1. 지정된 이미지 가져오기 3. 지정된 이미지 삭제" echo "2. 지정된 이미지 업데이트 4. 모든 이미지 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) send_stats "이미지 가져오기" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + read -e -p "이미지 이름을 입력하세요(여러 이미지 이름은 공백으로 구분하세요):" imagenames for name in $imagenames; do - echo -e "${gl_huang}이미지 얻기 :$name${gl_bai}" + echo -e "${gl_huang}이미지 가져오기:$name${gl_bai}" docker pull $name done ;; 2) send_stats "이미지 업데이트" - read -e -p "거울 이름을 입력하십시오 (공백으로 여러 거울 이름을 별도로 분리하십시오) :" imagenames + read -e -p "이미지 이름을 입력하세요(여러 이미지 이름은 공백으로 구분하세요):" imagenames for name in $imagenames; do - echo -e "${gl_huang}업데이트 된 이미지 :$name${gl_bai}" + echo -e "${gl_huang}이미지 업데이트 중:$name${gl_bai}" docker pull $name done ;; 3) - send_stats "거울을 삭제하십시오" + send_stats "이미지 삭제" read -e -p "이미지 이름을 입력하세요(여러 이미지 이름은 공백으로 구분하세요):" imagenames for name in $imagenames; do docker rmi -f $name @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -756,7 +756,7 @@ install_crontab() { service cron start ;; *) - echo "지원되지 않는 분포 :$ID" + echo "지원되지 않는 배포판:$ID" return ;; esac @@ -777,15 +777,15 @@ docker_ipv6_on() { 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를 사용하여 구성 파일 업데이트를 처리하십시오 + # jq를 사용하여 구성 파일 업데이트 처리 local ORIGINAL_CONFIG=$(<"$CONFIG_FILE") - # 현재 구성에 이미 IPv6 설정이 있는지 확인하십시오 + # 현재 구성에 이미 ipv6 설정이 있는지 확인하십시오. local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') # 구성 업데이트 및 IPv6 활성화 @@ -795,7 +795,7 @@ docker_ipv6_on() { 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 @@ -812,28 +812,28 @@ docker_ipv6_off() { 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를 사용하여 구성 파일 업데이트를 처리하십시오 + # 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}" + echo -e "${gl_huang}IPv6 액세스는 현재 폐쇄되었습니다.${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker - echo -e "${gl_huang}IPv6 액세스가 성공적으로 닫혔습니다${gl_bai}" + echo -e "${gl_huang}IPv6 액세스가 성공적으로 종료되었습니다.${gl_bai}" fi } @@ -872,7 +872,7 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "하나 이상의 포트 번호를 제공하십시오" + echo "포트 번호를 하나 이상 입력하세요." return 1 fi @@ -883,7 +883,7 @@ open_port() { 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 @@ -902,7 +902,7 @@ open_port() { close_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "하나 이상의 포트 번호를 제공하십시오" + echo "포트 번호를 하나 이상 입력하세요." return 1 fi @@ -913,18 +913,18 @@ close_port() { 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" + echo "항구 폐쇄$port" fi done - # 기존 규칙 삭제 (있는 경우) + # 기존 규칙 삭제(있는 경우) iptables -D INPUT -i lo -j ACCEPT 2>/dev/null iptables -D FORWARD -i lo -j ACCEPT 2>/dev/null @@ -933,14 +933,14 @@ close_port() { iptables -I FORWARD 1 -i lo -j ACCEPT save_iptables_rules - send_stats "포트 폐쇄" + send_stats "항구 폐쇄" } allow_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "하나 이상의 IP 주소 또는 IP 세그먼트를 제공하십시오." + echo "IP 주소 또는 IP 세그먼트를 하나 이상 입력하세요." return 1 fi @@ -950,7 +950,7 @@ allow_ip() { # 기존 차단 규칙 삭제 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" @@ -958,13 +958,13 @@ allow_ip() { done save_iptables_rules - send_stats "IP 출시" + send_stats "공개된 IP" } block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "하나 이상의 IP 주소 또는 IP 세그먼트를 제공하십시오." + echo "IP 주소 또는 IP 세그먼트를 하나 이상 입력하세요." return 1 fi @@ -974,10 +974,10 @@ block_ip() { # 기존 허용 규칙 삭제 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" + echo "IP가 차단됨$ip" fi done @@ -992,7 +992,7 @@ block_ip() { enable_ddos_defense() { - # 방어 DDO를 켜십시오 + # DDoS 보호 켜기 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 @@ -1007,7 +1007,7 @@ enable_ddos_defense() { # DDoS 방어 끄기 disable_ddos_defense() { - # 방어 DDO를 끄십시오 + # DDoS 보호 끄기 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 @@ -1017,7 +1017,7 @@ disable_ddos_defense() { 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 방어를 끕니다" + send_stats "DDoS 방어 끄기" } @@ -1042,7 +1042,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일 실패" + echo "오류: 다운로드$country_codeIP 영역 파일 실패" continue fi @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류 : 다운로드$country_codeIP 영역 파일이 실패했습니다" + echo "오류: 다운로드$country_codeIP 영역 파일 실패" continue fi @@ -1090,7 +1090,7 @@ manage_country_rules() { ;; *) - echo "사용법 : manage_country_rules {블록 | 허용 | unblock} " + echo "사용법: prepare_country_rules {block|allow|unblock} " ;; esac done @@ -1118,11 +1118,11 @@ iptables_panel() { echo "" echo "방화벽 관리" echo "------------------------" - echo "1. 지정된 포트 2를 엽니 다. 지정된 포트를 닫으십시오." - echo "3. 모든 포트를 엽니 다. 4. 모든 포트를 닫으십시오" + echo "1. 지정 포트 열기 2. 지정 포트 닫기" + echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 지우십시오" + echo "7. 지정된 IP 지우기" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1133,17 +1133,17 @@ iptables_panel() { echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) - read -e -p "열린 포트 번호를 입력하십시오 :" o_port + read -e -p "열려 있는 포트 번호를 입력하세요." o_port open_port $o_port - send_stats "지정된 포트를 엽니 다" + send_stats "지정된 포트 열기" ;; 2) - read -e -p "닫힌 포트 번호를 입력하십시오 :" c_port + read -e -p "닫힌 포트 번호를 입력하세요:" c_port close_port $c_port - send_stats "지정된 포트를 닫습니다" + send_stats "지정된 포트 닫기" ;; 3) # 모든 포트 열기 @@ -1175,12 +1175,12 @@ iptables_panel() { 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 "모든 포트를 닫습니다" + send_stats "모든 포트를 닫으세요" ;; 5) # IP 화이트리스트 - read -e -p "해제 할 IP 또는 IP 세그먼트를 입력하십시오." o_ip + read -e -p "허용된 IP 또는 IP 세그먼트를 입력하세요." o_ip allow_ip $o_ip ;; 6) @@ -1189,26 +1189,26 @@ iptables_panel() { block_ip $c_ip ;; 7) - # 지정된 IP를 지우십시오 + # 지정된 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를 지우십시오" + 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 "핑을 허용하십시오" + 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 "핑을 비활성화합니다" + send_stats "핑 비활성화" ;; 13) enable_ddos_defense @@ -1218,20 +1218,20 @@ iptables_panel() { ;; 15) - read -e -p "차단 된 국가 코드를 입력하십시오 (여러 국가 코드는 CN US JP와 같은 공간으로 분리 될 수 있습니다) :" country_code + read -e -p "차단된 국가 코드를 입력하세요(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code manage_country_rules block $country_code - send_stats "허용 국가$country_codeIP" + send_stats "국가 허용$country_codeIP" ;; 16) read -e -p "허용되는 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분할 수 있음)." country_code manage_country_rules allow $country_code - send_stats "나라를 차단하십시오$country_codeIP" + send_stats "블록 국가$country_codeIP" ;; 17) - read -e -p "청산 된 국가 코드를 입력하십시오 (여러 국가 코드는 CN US JP와 같은 공간으로 분리 될 수 있습니다) :" country_code + read -e -p "삭제된 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code manage_country_rules unblock $country_code - send_stats "나라를 정리하십시오$country_codeIP" + send_stats "명확한 국가$country_codeIP" ;; *) @@ -1250,7 +1250,7 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 현재 시스템에서 모든 스왑 파티션을 얻으십시오 + # 현재 시스템의 모든 스왑 파티션을 가져옵니다. local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # 모든 스왑 파티션을 탐색하고 삭제합니다. @@ -1263,7 +1263,7 @@ add_swap() { # /swapfile이 더 이상 사용되지 않는지 확인하세요. swapoff /swapfile - # 이전 /스왑 파일을 삭제하십시오 + # 이전 /swap 파일 삭제 rm -f /swapfile # 새로운 스왑 파티션 생성 @@ -1307,21 +1307,21 @@ local swap_total=$(free -m | awk 'NR==3{print $2}') ldnmp_v() { - # nginx 버전을 얻으십시오 + # 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 버전을 얻으십시오 + # 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 버전을 얻으십시오 + # 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 버전을 얻으십시오 + # 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}" @@ -1343,7 +1343,7 @@ install_ldnmp_conf() { default_server_ssl - # docker-compose.yml 파일을 다운로드하여 교체하십시오 + # 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) @@ -1454,7 +1454,7 @@ install_ssltls_text() { echo "" echo -e "${gl_huang}인증서 저장 경로${gl_bai}" echo "공개 키: /etc/letsencrypt/live/$yuming/fullchain.pem" - echo "개인 키 :/etc/letsencrypt/live/$yuming/privkey.pem" + echo "개인 키: /etc/letsencrypt/live/$yuming/privkey.pem" echo "" } @@ -1463,7 +1463,7 @@ install_ssltls_text() { add_ssl() { -echo -e "${gl_huang}SSL 인증서를 신속하게 신청하고 만료 전에 서명을 자동으로 갱신하십시오.${gl_bai}" +echo -e "${gl_huang}SSL 인증서를 빠르게 신청하고 만료되기 전에 자동으로 갱신하세요.${gl_bai}" yuming="${1:-}" if [ -z "$yuming" ]; then add_yuming @@ -1479,7 +1479,7 @@ ssl_ps ssl_ps() { - echo -e "${gl_huang}응용 인증서 만료${gl_bai}" + echo -e "${gl_huang}신청한 인증서의 만료 상태${gl_bai}" echo "사이트 정보 인증서 만료 시간" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do @@ -1521,14 +1521,14 @@ certs_status() { if [ -f "$file_path" ]; then send_stats "도메인 이름 인증서 신청이 성공했습니다." else - send_stats "도메인 이름 인증서 신청에 실패했습니다" + 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 배/도메인 이름/주)을 갖습니다." - echo -e "6. 국내 등록 제한 ➠ 도메인 이름이 중국 본토에 등록되어 있는지 확인하십시오." + echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." + echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." break_end clear echo "다시 배포해 보세요.$webname" @@ -1652,18 +1652,18 @@ cf_purge_cache() { # 구성 파일이 있는지 확인하십시오. if [ -f "$CONFIG_FILE" ]; then - # 구성 파일에서 API_TOKE 및 ZONE_ID를 읽으십시오 + # 구성 파일에서 API_TOKEN 및 zone_id를 읽습니다. read API_TOKEN EMAIL ZONE_IDS < "$CONFIG_FILE" - # Zone_ids를 배열로 변환합니다 + # ZONE_IDS를 어레이로 변환 ZONE_IDS=($ZONE_IDS) else # 캐시를 지울지 여부를 사용자에게 묻습니다. - read -e -p "CloudFlare의 캐시를 청소해야합니까? (Y/N) :" answer + read -e -p "Cloudflare의 캐시를 지워야 합니까? (예/아니요):" 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 + 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" @@ -1706,7 +1706,7 @@ web_del() { fi for yuming in $yuming_list; do - echo "도메인 이름 삭제 :$yuming" + 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 @@ -1716,8 +1716,8 @@ web_del() { 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" + # 오류를 방지하려면 데이터베이스를 삭제하기 전에 데이터베이스가 존재하는지 확인하세요. + echo "데이터베이스 삭제 중:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1735,12 +1735,12 @@ nginx_waf() { # 모드 매개변수에 따라 WAF를 켤지 끌지 결정합니다. if [ "$mode" == "on" ]; then - # WAF 켜기 : 주석을 제거하십시오 + # 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 닫기 : 댓글을 추가하십시오 + # 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 @@ -1796,11 +1796,11 @@ patch_wp_memory_limit() { local TARGET_DIR="/home/web/html" # 路径写死 find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do - # 오래된 정의를 삭제하십시오 + # 이전 정의 삭제 sed -i "/define(['\"]WP_MEMORY_LIMIT['\"].*/d" "$FILE" sed -i "/define(['\"]WP_MAX_MEMORY_LIMIT['\"].*/d" "$FILE" - # "Happy Publishing"과 함께 새로운 정의를 삽입하십시오. + # "HappyPublishing"이 포함된 줄 앞에 새 정의를 삽입합니다. awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -1851,7 +1851,7 @@ nginx_br() { fi if [ "$mode" == "on" ]; then - # Brotli를 켜십시오 : 주석을 제거하십시오 + # Brotli 켜기: 댓글 제거 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1865,7 +1865,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotli를 닫습니다 : 주석을 추가하십시오 + # Brotli 닫기: 댓글 추가 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1881,7 +1881,7 @@ nginx_br() { }' /home/web/nginx.conf else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "잘못된 인수: 'on' 또는 'off'를 사용하세요." return 1 fi @@ -1907,7 +1907,7 @@ nginx_zstd() { fi if [ "$mode" == "on" ]; then - # ZSTD를 켜십시오 : 주석을 제거하십시오 + # Zstd 켜기: 주석 제거 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|# load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|load_module /etc/nginx/modules/ngx_http_zstd_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1938,11 +1938,11 @@ nginx_zstd() { else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "잘못된 인수: 'on' 또는 'off'를 사용하세요." return 1 fi - # Nginx 이미지를 확인하고 상황에 따라 처리하십시오. + # nginx 이미지를 확인하고 그에 따라 처리하세요. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -1969,7 +1969,7 @@ nginx_gzip() { elif [ "$mode" == "off" ]; then sed -i 's|^\(\s*\)gzip on;|\1# gzip on;|' /home/web/nginx.conf > /dev/null 2>&1 else - echo "유효하지 않은 매개 변수 : 'ON'또는 'OFF'사용" + echo "잘못된 인수: 'on' 또는 'off'를 사용하세요." return 1 fi @@ -1991,21 +1991,21 @@ web_security() { clear echo -e "서버 웹사이트 방어 프로그램${check_f2b_status}${gl_lv}${CFmessage}${waf_status}${gl_bai}" echo "------------------------" - echo "1. 방어 프로그램을 설치하십시오" + echo "1. 방어 프로그램 설치" echo "------------------------" echo "5. SSH 차단 기록 보기 6. 웹사이트 차단 기록 보기" - echo "7. 방어 규칙 목록보기 8. 로그의 실시간 모니터링보기" + echo "7. 방어규칙 목록 보기 8. 실시간 모니터링을 위한 로그 보기" echo "------------------------" echo "11. 차단 매개변수 구성 12. 차단된 IP 모두 삭제" echo "------------------------" - echo "21. CloudFlare 모드 22. 5 초 방패의 높은 하중" + echo "21. cloudflare 모드 22. 고부하에서 5초 보호 활성화" echo "------------------------" echo "31. WAF 켜기 32. WAF 끄기" echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" echo "------------------------" echo "9. 방어 프로그램 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -2089,9 +2089,9 @@ web_security() { 21) send_stats "클라우드플레어 모드" - echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." + echo "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고 글로벌 API 키를 받으세요." echo "https://dash.cloudflare.com/login" - read -e -p "CF 계정 번호를 입력하십시오." cfuser + read -e -p "CF의 계좌번호를 입력하세요:" cfuser read -e -p "CF의 글로벌 API 키를 입력하세요:" cftoken wget -O /home/web/conf.d/default.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/default11.conf @@ -2111,17 +2111,17 @@ web_security() { ;; 22) - send_stats "5 초 방패의 높은 하중" - echo -e "${gl_huang}웹 사이트는 5 분마다 자동으로 감지됩니다. 높은 하중의 감지에 도달하면 방패가 자동으로 켜지고 낮은 부하가 자동으로 5 초 동안 꺼집니다.${gl_bai}" + send_stats "고부하로 5초 쉴드 가능" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" echo "--------------" - echo "CF 매개 변수 가져 오기 :" - echo -e "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 얻습니다.${gl_huang}Global API Key${gl_bai}" - echo -e "CF 배경 도메인 이름 요약 페이지의 오른쪽 하단으로 이동하려면${gl_huang}지역 ID${gl_bai}" + echo "CF 매개변수 가져오기:" + echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" + echo -e "cf 백엔드 도메인 이름 요약 페이지 오른쪽 하단으로 이동하여 가져오세요.${gl_huang}지역 ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" read -e -p "CF의 계좌번호를 입력하세요:" cfuser read -e -p "CF의 글로벌 API 키를 입력하세요:" cftoken - read -e -p "CF에 도메인 이름의 영역 ID를 입력하십시오." cfzonID + read -e -p "CF에 도메인 이름의 영역 ID를 입력하세요." cfzonID cd ~ install jq bc @@ -2147,13 +2147,13 @@ web_security() { 31) nginx_waf on - echo "사이트 waf가 활성화되어 있습니다" - send_stats "사이트 waf가 활성화되어 있습니다" + echo "사이트 WAF가 활성화되었습니다" + send_stats "사이트 WAF가 활성화되었습니다" ;; 32) nginx_waf off - echo "사이트 waf가 닫혔습니다" + echo "사이트 WAF가 다운되었습니다" send_stats "사이트 WAF가 다운되었습니다" ;; @@ -2179,7 +2179,7 @@ check_nginx_mode() { CONFIG_FILE="/home/web/nginx.conf" -# 현재 Worker_Processes 설정 값을 얻으십시오 +# 현재 작업자_프로세스 설정 값을 가져옵니다. current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') # 값에 따라 모드 정보 설정 @@ -2212,7 +2212,7 @@ check_nginx_compression() { br_status="" fi - # GZIP가 활성화되어 있고 댓글을 달지 않은지 확인하십시오 + # gzip이 활성화되어 있고 주석 처리가 해제되어 있는지 확인하세요. if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then gzip_status=" gzip压缩已开启" else @@ -2228,16 +2228,16 @@ web_optimization() { check_nginx_mode check_nginx_compression clear - send_stats "LDNMP 환경을 최적화하십시오" + send_stats "LDNMP 환경 최적화" echo -e "LDNMP 환경 최적화${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1. 표준 모드 2. 고성능 모드 (2H4G 이상 권장)" + echo "1. 표준 모드 2. 고성능 모드(2H4G 이상 권장)" echo "------------------------" - echo "3. GZIP 압축 켜기 4. GZIP 압축 끄기" + echo "3. gzip 압축 켜기 4. gzip 압축 끄기" echo "5. br 압축을 켭니다. 6. br 압축을 끕니다." - echo "7. ZSTD 압축 켜기 8. ZSTD 압축 끄기" + echo "7. zstd 압축을 켭니다. 8. zstd 압축을 끕니다." echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -2278,7 +2278,7 @@ web_optimization() { optimize_balanced - echo "LDNMP 환경은 표준 모드로 설정되었습니다" + echo "LDNMP 환경이 표준 모드로 설정되었습니다." ;; 2) @@ -2376,9 +2376,9 @@ check_docker_app() { # check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then -# check_docker = "$ {gl_lv} $ {gl_bai} 설치" +# check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker = "$ {gl_hui} $ {gl_bai}가 설치되지 않았다" +# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -2429,21 +2429,21 @@ check_docker_image_update() { 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) @@ -2467,7 +2467,7 @@ block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 - # 컨테이너의 IP 주소를 가져옵니다 + # 컨테이너의 IP 주소 가져오기 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2482,12 +2482,12 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 지정된 IP를 확인하고 해제하십시오 + # 지정된 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을 확인하고 해제하십시오 + # 로컬 네트워크 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 @@ -2499,7 +2499,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 지정된 IP를 확인하고 해제하십시오 + # 지정된 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 @@ -2525,7 +2525,7 @@ clear_container_rules() { local container_name_or_id=$1 local allowed_ip=$2 - # 컨테이너의 IP 주소를 가져옵니다 + # 컨테이너의 IP 주소 가져오기 local container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name_or_id") if [ -z "$container_ip" ]; then @@ -2540,12 +2540,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 + # 로컬 네트워크 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 @@ -2559,12 +2559,12 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 + # 로컬 네트워크 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 @@ -2575,7 +2575,7 @@ clear_container_rules() { fi - echo "IP+포트는 서비스에 액세스 할 수있었습니다" + echo "IP+포트로 서비스 접속이 허용되었습니다" save_iptables_rules } @@ -2590,7 +2590,7 @@ block_host_port() { if [[ -z "$port" || -z "$allowed_ip" ]]; then echo "오류: 액세스를 허용하려면 포트 번호와 IP를 입력하세요." - echo "사용법 : block_host_port <포트 번호> <승인 된 ip>" + echo "사용법: block_host_port <포트 번호> <허용 IP>" return 1 fi @@ -2616,7 +2616,7 @@ block_host_port() { - # 다른 모든 IP 액세스를 거부했습니다 + # 다른 모든 IP의 접근을 거부 if ! iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -I INPUT -p udp --dport "$port" -j DROP fi @@ -2626,7 +2626,7 @@ block_host_port() { 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 @@ -2636,7 +2636,7 @@ block_host_port() { iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT fi - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "IP+포트가 서비스 접근을 차단했습니다." save_iptables_rules } @@ -2672,17 +2672,17 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. + # 다른 모든 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 액세스를 허용하는 명확한 규칙 + # 지정된 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 @@ -2759,7 +2759,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2800,13 +2800,13 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." send_stats "제거$docker_name" ;; 5) echo "${docker_name}도메인 이름 액세스 설정" - send_stats "${docker_name}도메인 액세스 설정" + send_stats "${docker_name}도메인 이름 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" @@ -2863,16 +2863,16 @@ docker_app_plus() { echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" echo "5. 도메인 이름 액세스 추가 6. 도메인 이름 액세스 삭제" - echo "7. IP+ 포트 액세스 허용 8. 블록 IP+ 포트 액세스" + echo "7. IP+포트 접근 허용 8. IP+포트 접근 차단" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택 항목을 입력하세요." choice case $choice in 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "응용 프로그램 외부 서비스 포트를 입력하고 기본값을 입력하십시오.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,8 +2895,8 @@ docker_app_plus() { ;; 5) - echo "${docker_name}도메인 액세스 설정" - send_stats "${docker_name}도메인 액세스 설정" + echo "${docker_name}도메인 이름 액세스 설정" + send_stats "${docker_name}도메인 이름 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" @@ -3121,7 +3121,7 @@ ldnmp_install_status_one() { ldnmp_install_all() { cd ~ -send_stats "LDNMP 환경을 설치하십시오" +send_stats "LDNMP 환경 설치" root_use clear echo -e "${gl_huang}LDNMP 환경이 설치되지 않았습니다. LDNMP 환경 설치를 시작합니다...${gl_bai}" @@ -3141,7 +3141,7 @@ cd ~ send_stats "nginx 환경 설치" root_use clear -echo -e "${gl_huang}Nginx가 설치되지 않았고 Nginx 환경 설치 시작 ...${gl_bai}" +echo -e "${gl_huang}nginx가 설치되지 않았습니다. nginx 환경 설치를 시작하세요...${gl_bai}" check_disk_space 1 /home check_port install_dependency @@ -3174,7 +3174,7 @@ ldnmp_install_status() { nginx_install_status() { if ! docker inspect "nginx" &>/dev/null; then - send_stats "Nginx 환경을 먼저 설치하십시오" + send_stats "먼저 nginx 환경을 설치해주세요" nginx_install_all fi @@ -3185,10 +3185,10 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname세워짐!" + echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치 정보는 다음과 같습니다." + echo "$webname설치정보는 다음과 같습니다." } @@ -3248,16 +3248,16 @@ ldnmp_Proxy() { port="${3:-}" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" if [ -z "$yuming" ]; then add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "반세대 IP를 입력하십시오 :" reverseproxy + read -e -p "세대방지 IP를 입력해주세요:" reverseproxy fi if [ -z "$port" ]; then - read -e -p "반세대 포트를 입력하십시오 :" port + read -e -p "안티 세대 포트를 입력하십시오:" port fi nginx_install_status install_ssltls @@ -3281,7 +3281,7 @@ ldnmp_Proxy_backend() { reverseproxy_port="${2:-}" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" if [ -z "$yuming" ]; then add_yuming fi @@ -3372,21 +3372,21 @@ ldnmp_web_status() { echo "" echo "작동하다" echo "------------------------" - echo "1. 도메인 이름 인증서 신청/업데이트 2. 사이트 도메인 이름 변경" - echo "3. 사이트 캐시 정리 4. 관련 사이트 만들기" + echo "1. 도메인 이름 인증서 적용/업데이트 2. 사이트 도메인 이름 복제" + echo "3. 사이트 캐시 지우기 4. 관련 사이트 생성" echo "5. 접속 로그 보기 6. 오류 로그 보기" echo "7. 전역 구성 편집 8. 사이트 구성 편집" echo "9. 사이트 데이터베이스 관리 10. 사이트 분석 보고서 보기" echo "------------------------" echo "20. 특정 사이트 데이터 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) - send_stats "도메인 이름 인증서를 신청하십시오" - read -e -p "도메인 이름을 입력하십시오 :" yuming + 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 @@ -3395,10 +3395,9 @@ ldnmp_web_status() { ;; 2) - send_stats "사이트 도메인 이름 변경" - echo -e "${gl_hong}적극 권장:${gl_bai}먼저 전체 사이트 데이터를 백업 한 다음 사이트 도메인 이름을 변경하십시오!" - read -e -p "이전 도메인 이름을 입력하십시오 :" oddyuming - read -e -p "새 도메인 이름을 입력하십시오 :" yuming + send_stats "복제 사이트 도메인 이름" + read -e -p "이전 도메인 이름을 입력하세요:" oddyuming + read -e -p "새 도메인 이름을 입력하세요:" yuming install_certbot install_ssltls certs_status @@ -3410,7 +3409,7 @@ ldnmp_web_status() { 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;" + # 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 }') @@ -3422,18 +3421,18 @@ ldnmp_web_status() { done # 웹사이트 디렉토리 교체 - mv /home/web/html/$oddyuming /home/web/html/$yuming + cp -r /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 + cp /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 + # rm /home/web/certs/${oddyuming}_key.pem + # rm /home/web/certs/${oddyuming}_cert.pem - docker exec nginx nginx -s reload + cd /home/web && docker compose restart ;; @@ -3442,9 +3441,9 @@ ldnmp_web_status() { web_cache ;; 4) - send_stats "관련 사이트를 만듭니다" + send_stats "연결된 사이트 만들기" echo -e "액세스하려면 새 도메인 이름을 기존 사이트에 연결하세요." - read -e -p "기존 도메인 이름을 입력하십시오 :" oddyuming + read -e -p "기존 도메인 이름을 입력하세요:" oddyuming read -e -p "새 도메인 이름을 입력하세요:" yuming install_certbot install_ssltls @@ -3459,12 +3458,12 @@ ldnmp_web_status() { ;; 5) - send_stats "액세스 로그를 봅니다" + send_stats "접속 로그 보기" tail -n 200 /home/web/log/nginx/access.log break_end ;; 6) - send_stats "오류 로그를 봅니다" + send_stats "오류 로그 보기" tail -n 200 /home/web/log/nginx/error.log break_end ;; @@ -3477,7 +3476,7 @@ ldnmp_web_status() { 8) send_stats "사이트 구성 편집" - read -e -p "사이트 구성을 편집하려면 편집 할 도메인 이름을 입력하십시오." yuming + read -e -p "사이트 구성을 편집하려면 편집하려는 도메인 이름을 입력하십시오:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3524,15 +3523,15 @@ while true; do check_panel_app echo -e "$panelname $check_panel" echo "${panelname}대중적이고 강력한 운영 및 유지 관리 관리 패널입니다." - echo "공식 웹 사이트 소개 :$panelurl " + echo "공식 웹사이트 소개:$panelurl " echo "" echo "------------------------" echo "1. 설치 2. 관리 3. 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) check_disk_space 1 @@ -3554,7 +3553,7 @@ while true; do panel_app_uninstall sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - send_stats "${panelname}제거하십시오" + send_stats "${panelname}제거" ;; *) break @@ -3620,7 +3619,7 @@ EOF donlond_frp frps - # 출력 생성 정보 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3629,8 +3628,8 @@ EOF echo echo "FRP 패널 정보" echo "FRP 패널 주소: http://$ipv4_address:$dashboard_port" - echo "FRP 패널 사용자 이름 :$dashboard_user" - echo "FRP 패널 비밀번호 :$dashboard_pwd" + echo "FRP 패널 사용자 이름:$dashboard_user" + echo "FRP 패널 비밀번호:$dashboard_pwd" echo open_port 8055 8056 @@ -3640,7 +3639,7 @@ EOF configure_frpc() { - send_stats "FRP 클라이언트를 설치하십시오" + send_stats "FRP 클라이언트 설치" read -e -p "외부 네트워크 도킹 IP를 입력하세요." server_addr read -e -p "외부 네트워크 도킹 토큰을 입력하세요." token echo @@ -3663,11 +3662,11 @@ EOF add_forwarding_service() { send_stats "FRP 인트라넷 서비스 추가" - # 사용자에게 서비스 이름 및 전달 정보를 입력하라는 메시지 + # 사용자에게 서비스 이름 및 전달 정보를 묻는 메시지를 표시합니다. read -e -p "서비스 이름을 입력하세요:" service_name read -e -p "전달 유형(tcp/udp)을 입력하십시오. [기본값을 tcp로 입력]:" service_type local service_type=${service_type:-tcp} - read -e -p "인트라넷 IP를 입력하십시오 [기본값 127.0.0.1 입력] : :" local_ip + read -e -p "인트라넷 IP를 입력하십시오. [Enter를 누르면 기본값은 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 @@ -3682,7 +3681,7 @@ remote_port = ${remote_port} EOF - # 출력 생성 정보 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -3694,7 +3693,7 @@ EOF delete_forwarding_service() { - send_stats "FRP 인트라넷 서비스를 삭제하십시오" + send_stats "FRP 인트라넷 서비스 삭제" # 삭제해야 하는 서비스 이름을 입력하라는 메시지를 사용자에게 표시합니다. read -e -p "삭제할 서비스 이름을 입력하세요:" service_name # sed를 사용하여 서비스 및 관련 구성 삭제 @@ -3709,7 +3708,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 헤더를 인쇄하십시오 + # 헤더 인쇄 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -3772,7 +3771,7 @@ list_forwarding_services() { } END { - # 마지막 서비스에 대한 정보를 인쇄하십시오 + # 마지막 서비스에 대한 정보 인쇄 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3790,7 +3789,7 @@ 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 @@ -3806,16 +3805,16 @@ generate_access_urls() { # 유효한 포트가 있는 경우에만 제목과 내용 표시 if [ "$has_valid_ports" = true ]; then - echo "FRP 서비스 외부 액세스 주소 :" + echo "FRP 서비스 외부 액세스 주소:" - # 프로세스 IPv4 주소 + # IPv4 주소 처리 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" fi done - # Process IPv6 주소 (현재 경우) + # IPv6 주소가 있는 경우 처리 if [ -n "$ipv6_address" ]; then for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then @@ -3906,10 +3905,10 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." ;; 5) - echo "리버스 인트라넷 침투 서비스를 도메인 이름 액세스로 향합니다" + echo "도메인 이름 액세스에 대한 역인트라넷 침투 서비스" send_stats "FRP 외부 도메인 이름 액세스" add_yuming read -e -p "인트라넷 침투 서비스 포트를 입력하십시오:" frps_port @@ -3917,26 +3916,26 @@ frps_panel() { block_host_port "$frps_port" "$ipv4_address" ;; 6) - echo "도메인 이름 형식 example.com은 https : //와 함께 제공되지 않습니다." + echo "https://가 없는 도메인 이름 형식 example.com" web_del ;; 7) send_stats "IP 액세스 허용" - read -e -p "해제 할 포트를 입력하십시오." frps_port + read -e -p "해제해야 하는 포트를 입력하세요." frps_port clear_host_port_rules "$frps_port" "$ipv4_address" ;; 8) - send_stats "IP 액세스를 차단하십시오" - echo "반세기 도메인 이름에 액세스 한 경우이 기능을 사용하여 IP+ 포트 액세스를 차단하십시오." - read -e -p "차단 해야하는 포트를 입력하십시오." frps_port + send_stats "IP 접근 차단" + echo "역방향 도메인 이름 접근이 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." + read -e -p "차단할 포트를 입력하세요:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 00) send_stats "FRP 서비스 상태 새로 고침" - echo "FRP 서비스 상태가 새로 고쳐졌습니다" + echo "FRP 서비스 상태가 새로 고쳐졌습니다." ;; *) @@ -3959,7 +3958,7 @@ frpc_panel() { check_docker_image_update $docker_name echo -e "FRP 클라이언트$check_frp $update_status" echo "서버에 연결하세요. 연결 후에는 인트라넷 침투 서비스를 만들어 인터넷에 액세스할 수 있습니다." - echo "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" + echo "공식 홈페이지 소개: https://github.com/fatedier/frp/" echo "비디오 튜토리얼: https://www.bilibili.com/video/BV1yMw6e2EwL?t=173.9" echo "------------------------" if [ -d "/home/frp/" ]; then @@ -3970,9 +3969,9 @@ frpc_panel() { echo "------------------------" echo "1. 설치 2. 업데이트 3. 제거" echo "------------------------" - echo "4. 외부 서비스 추가 5. 외부 서비스 삭제 6. 서비스 구성 수동으로 서비스 구성" + echo "4. 외부 서비스 추가 5. 외부 서비스 삭제 6. 서비스 수동 구성" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택 항목을 입력하세요." choice case $choice in @@ -4052,7 +4051,7 @@ yt_menu_pro() { 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 -e "공식 홈페이지 주소: https://github.com/yt-dlp/yt-dlp" echo "-------------------------" echo "다운로드한 동영상 목록:" ls -td "$VIDEO_DIR"/*/ 2>/dev/null || echo "(아직 없음)" @@ -4062,23 +4061,23 @@ yt_menu_pro() { echo "5. 단일 비디오 다운로드 6. 일괄 비디오 다운로드 7. 사용자 정의 매개변수 다운로드" echo "8. MP3 오디오로 다운로드 9. 비디오 디렉터리 삭제 10. 쿠키 관리(개발 중)" echo "-------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "-------------------------" read -e -p "옵션 번호를 입력하세요:" choice case $choice in 1) - send_stats "yt-dlp 설치 ..." - echo "yt-dlp 설치 ..." + send_stats "yt-dlp 설치 중..." + echo "yt-dlp 설치 중..." install ffmpeg curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp add_app_id - echo "설치가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "설치가 완료되었습니다. 계속하려면 아무 키나 누르세요..." read ;; 2) - send_stats "yt-dlp 업데이트 ..." + send_stats "yt-dlp 업데이트 중..." echo "yt-dlp 업데이트 중..." yt-dlp -U @@ -4091,7 +4090,7 @@ yt_menu_pro() { rm -f /usr/local/bin/yt-dlp sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "제거가 완료되었습니다. 계속하려면 키를 누르십시오 ..." + echo "제거가 완료되었습니다. 계속하려면 아무 키나 누르세요..." read ;; 5) send_stats "단일 비디오 다운로드" @@ -4102,12 +4101,12 @@ yt_menu_pro() { --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites "$url" - read -e -p "다운로드가 완료되면 키를 눌러 계속하십시오 ..." ;; + read -e -p "다운로드가 완료되었습니다. 계속하려면 아무 키나 누르세요..." ;; 6) - send_stats "배치 비디오 다운로드" + 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.0&from_spmid=666.25.episode.0" > "$URL_FILE" + echo -e "# 여러 개의 동영상 링크 주소를 입력하세요\n# https://www.bilibili.com/bangumi/play/ep733316?spm_id_from=333.337.0.0&from_spmid=666.25.episode.0" > "$URL_FILE" fi nano $URL_FILE echo "지금 일괄 다운로드를 시작하세요..." @@ -4128,7 +4127,7 @@ yt_menu_pro() { --write-info-json \ -o "$VIDEO_DIR/%(title)s/%(title)s.%(ext)s" \ --no-overwrites --no-post-overwrites - read -e -p "실행이 완료되면 키를 눌러 계속하십시오 ..." ;; + read -e -p "실행이 완료되었습니다. 계속하려면 아무 키나 누르세요..." ;; 8) send_stats "MP3 다운로드" read -e -p "동영상 링크를 입력하세요:" url @@ -4141,7 +4140,7 @@ yt_menu_pro() { read -e -p "오디오 다운로드가 완료되었습니다. 계속하려면 아무 키나 누르세요..." ;; 9) - send_stats "비디오 삭제" + send_stats "동영상 삭제" read -e -p "삭제된 동영상의 이름을 입력하세요:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; @@ -4178,7 +4177,7 @@ set_timedate() { -# DPKG 인터럽트 문제를 수정하십시오 +# dpkg 중단 문제 수정 fix_dpkg() { pkill -9 -f 'apt|dpkg' rm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock @@ -4187,7 +4186,7 @@ fix_dpkg() { linux_update() { - echo -e "${gl_huang}시스템 업데이트 ...${gl_bai}" + echo -e "${gl_huang}시스템 업데이트 진행 중...${gl_bai}" if command -v dnf &>/dev/null; then dnf -y update elif command -v yum &>/dev/null; then @@ -4206,7 +4205,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "알 수없는 패키지 관리자!" + echo "알 수 없는 패키지 관리자입니다!" return fi } @@ -4214,7 +4213,7 @@ linux_update() { linux_clean() { - echo -e "${gl_huang}시스템 정리 ...${gl_bai}" + echo -e "${gl_huang}시스템 청소 진행 중...${gl_bai}" if command -v dnf &>/dev/null; then rpm --rebuilddb dnf autoremove -y @@ -4245,9 +4244,9 @@ linux_clean() { elif command -v apk &>/dev/null; then echo "패키지 관리자 캐시 정리..." apk cache clean - echo "시스템 로그 삭제 ..." + echo "시스템 로그 삭제..." rm -rf /var/log/* - echo "APK 캐시 삭제 ..." + echo "APK 캐시 삭제..." rm -rf /var/cache/apk/* echo "임시 파일 삭제..." rm -rf /tmp/* @@ -4273,9 +4272,9 @@ linux_clean() { rm -rf /tmp/* elif command -v pkg &>/dev/null; then - echo "사용하지 않는 의존성 정리 ..." + echo "사용하지 않는 종속성을 정리합니다..." pkg autoremove -y - echo "패키지 관리자 캐시 청소 ..." + echo "패키지 관리자 캐시 정리..." pkg clean -y echo "시스템 로그 삭제..." rm -rf /var/log/* @@ -4346,7 +4345,7 @@ while true; do echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "선택사항을 입력하세요:" Limiting case "$Limiting" in 1) local dns1_ipv4="1.1.1.1" @@ -4369,7 +4368,7 @@ while true; do chattr -i /etc/resolv.conf nano /etc/resolv.conf chattr +i /etc/resolv.conf - send_stats "DNS 구성을 수동으로 편집합니다" + send_stats "DNS 구성을 수동으로 편집" ;; *) break @@ -4398,7 +4397,7 @@ correct_ssh_config() { sed -i 's/^\s*#\?\s*PasswordAuthentication.*/PasswordAuthentication yes/g' "$sshd_config" fi - # 발견 된 경우 PubKeyAuthentication이 예로 설정됩니다 + # 발견된 경우 PubkeyAuthentication이 yes로 설정되어 있습니다. 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/' \ @@ -4406,7 +4405,7 @@ correct_ssh_config() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$sshd_config" fi - # PasswordAuthentication 또는 PubKeyAuthentication이 일치하지 않는 경우 기본값을 설정하십시오. + # PasswordAuthentication과 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" @@ -4460,7 +4459,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}루트 프라이빗 키 로그인이 활성화되고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT 개인키 로그인이 활성화되어 있고, ROOT 비밀번호 로그인이 비활성화되어 재접속이 적용됩니다.${gl_bai}" } @@ -4488,7 +4487,7 @@ import_sshkey() { rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}공개 키가 성공적으로 가져 왔고 루트 개인 키 로그인이 활성화되었고 루트 비밀번호 로그인이 닫히고 재 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}공개 키를 성공적으로 가져왔고 ROOT 개인 키 로그인이 활성화되었으며 ROOT 비밀번호 로그인이 종료되었습니다. 다시 연결이 적용됩니다.${gl_bai}" } @@ -4497,7 +4496,7 @@ import_sshkey() { add_sshpasswd() { -echo "루트 비밀번호를 설정하십시오" +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; @@ -4516,7 +4515,7 @@ clear dd_xitong() { - send_stats "시스템을 다시 설치하십시오" + 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 @@ -4527,7 +4526,7 @@ dd_xitong() { } dd_xitong_1() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}root${gl_bai}초기 비밀번호 :${gl_huang}LeitboGi0ro${gl_bai}초기 포트 :${gl_huang}22${gl_bai}" + 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 @@ -4535,7 +4534,7 @@ dd_xitong() { } dd_xitong_2() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}Administrator${gl_bai}초기 비밀번호:${gl_huang}Teddysun.com${gl_bai}초기 포트:${gl_huang}3389${gl_bai}" + 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 @@ -4543,24 +4542,24 @@ dd_xitong() { } dd_xitong_3() { - echo -e "재설치 후 초기 사용자 이름 :${gl_huang}root${gl_bai}초기 비밀번호 :${gl_huang}123@@@${gl_bai}초기 포트:${gl_huang}22${gl_bai}" + 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 "계속하려면 키를 누르십시오 ..." + 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 "--------------------------------" - echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." + echo -e "${gl_hong}알아채다:${gl_bai}재설치 시 연결이 끊어질 수 있으니 걱정되시는 분들은 주의해서 사용해주세요. 재설치에는 약 15분 정도 소요될 예정이오니, 사전에 데이터를 백업해 주시기 바랍니다." echo -e "${gl_hui}스크립트를 지원해주신 leitbogioro 보스와 bin456789 보스에게 감사드립니다!${gl_bai} " echo "------------------------" echo "1. Debian 13 2. Debian 12" @@ -4586,12 +4585,12 @@ dd_xitong() { echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "다시 설치할 시스템을 선택하십시오." sys_choice + read -e -p "다시 설치하려는 시스템을 선택하십시오:" sys_choice case "$sys_choice" in 1) - send_stats "데비안 13을 다시 설치하십시오" + send_stats "데비안 13 재설치" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4613,21 +4612,21 @@ dd_xitong() { exit ;; 4) - send_stats "데비안 10을 다시 설치하십시오" + send_stats "데비안 10 다시 설치" dd_xitong_1 bash InstallNET.sh -debian 10 reboot exit ;; 11) - send_stats "우분투 24.04를 다시 설치하십시오" + send_stats "우분투 24.04 다시 설치" dd_xitong_1 bash InstallNET.sh -ubuntu 24.04 reboot exit ;; 12) - send_stats "우분투 22.04를 다시 설치하십시오" + send_stats "우분투 22.04 다시 설치" dd_xitong_1 bash InstallNET.sh -ubuntu 22.04 reboot @@ -4641,7 +4640,7 @@ dd_xitong() { exit ;; 14) - send_stats "우분투 18.04를 다시 설치하십시오" + send_stats "우분투 18.04 다시 설치" dd_xitong_1 bash InstallNET.sh -ubuntu 18.04 reboot @@ -4658,7 +4657,7 @@ dd_xitong() { ;; 22) - send_stats "Rockylinux9를 다시 설치하십시오" + send_stats "rockylinux9 재설치" dd_xitong_3 bash reinstall.sh rocky 9 reboot @@ -4666,7 +4665,7 @@ dd_xitong() { ;; 23) - send_stats "Alma10을 다시 설치하십시오" + send_stats "alma10 재설치" dd_xitong_3 bash reinstall.sh almalinux reboot @@ -4682,7 +4681,7 @@ dd_xitong() { ;; 25) - send_stats "Oracle10을 다시 설치하십시오" + send_stats "oracle10 재설치" dd_xitong_3 bash reinstall.sh oracle reboot @@ -4698,7 +4697,7 @@ dd_xitong() { ;; 27) - send_stats "Fedora42를 다시 설치하십시오" + send_stats "fedora42 재설치" dd_xitong_3 bash reinstall.sh fedora reboot @@ -4714,7 +4713,7 @@ dd_xitong() { ;; 29) - send_stats "CentOS10을 다시 설치하십시오" + send_stats "centos10 재설치" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4730,7 +4729,7 @@ dd_xitong() { ;; 31) - send_stats "알파인을 다시 설치하십시오" + send_stats "알파인 재설치" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4737,7 @@ dd_xitong() { ;; 32) - send_stats "아치를 다시 설치하십시오" + send_stats "아치 재설치" dd_xitong_3 bash reinstall.sh arch reboot @@ -4754,7 +4753,7 @@ dd_xitong() { ;; 34) - send_stats "Openeuler를 다시 설치하십시오" + send_stats "openeuler 다시 설치" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4770,7 +4769,7 @@ dd_xitong() { ;; 36) - send_stats "비행 소부소" + send_stats "Feiniu 재설치" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4777,7 @@ dd_xitong() { ;; 41) - send_stats "Windows 11을 다시 설치하십시오" + send_stats "윈도우 11 재설치" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4787,7 +4786,7 @@ dd_xitong() { 42) dd_xitong_2 - send_stats "Windows 10을 다시 설치하십시오" + send_stats "윈도우 10 재설치" bash InstallNET.sh -windows 10 -lang "cn" reboot exit @@ -4843,7 +4842,7 @@ dd_xitong() { bbrv3() { root_use - send_stats "BBRV3 관리" + send_stats "bbrv3 관리" local cpu_arch=$(uname -m) if [ "$cpu_arch" = "aarch64" ]; then @@ -4864,7 +4863,7 @@ bbrv3() { echo "------------------------" echo "1. BBRv3 커널 업데이트 2. BBRv3 커널 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" sub_choice @@ -4911,10 +4910,10 @@ bbrv3() { echo "BBR3 가속 설정" echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" - echo "데비안/우분투 만 지원합니다" - echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." + echo "데비안/우분투만 지원" + echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." echo "------------------------------------------------" - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -4922,7 +4921,7 @@ bbrv3() { if [ -r /etc/os-release ]; then . /etc/os-release if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then - echo "현재 환경은이를 지원하지 않으며 데비안 및 우분투 시스템 만 지원합니다." + echo "현재 환경에서는 지원하지 않습니다. Debian 및 Ubuntu 시스템만 지원됩니다." break_end linux_Settings fi @@ -4949,7 +4948,7 @@ bbrv3() { bbr_on - echo "Xanmod 커널이 설치되고 BBR3이 성공적으로 활성화됩니다. 다시 시작한 후에도 적용됩니다" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -4959,7 +4958,7 @@ bbrv3() { echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac fi @@ -4968,37 +4967,37 @@ bbrv3() { elrepo_install() { - # Elrepo GPG 공개 키를 가져 오십시오 - echo "Elrepo GPG 공개 키를 가져 오십시오 ..." + # 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" - # 시스템 버전에 따라 해당 Elrepo 창고 구성을 설치하십시오. + echo "감지된 운영 체제:$os_name $os_version" + # 시스템 버전에 따라 해당 ELRepo 창고 구성을 설치하십시오. if [[ "$os_version" == 8 ]]; then - echo "Elrepo 저장소 구성 (버전 8)을 설치하십시오 ..." + 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 elif [[ "$os_version" == 10 ]]; then - echo "Elrepo 저장소 구성 (버전 10)을 설치하십시오 ..." + echo "ELRepo 저장소 구성(버전 10) 설치 중..." yum -y install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm else - echo "지원되지 않는 시스템 버전 :$os_version" + echo "지원되지 않는 시스템 버전:$os_version" break_end linux_Settings fi # ELRepo 커널 저장소를 활성화하고 최신 메인라인 커널을 설치합니다. - echo "Elrepo 커널 저장소를 활성화하고 최신 메인 라인 커널을 설치하십시오 ..." + echo "ELRepo 커널 저장소를 활성화하고 최신 메인라인 커널을 설치하세요..." # yum -y --enablerepo=elrepo-kernel install kernel-ml yum --nogpgcheck -y --enablerepo=elrepo-kernel install kernel-ml echo "ELRepo 저장소 구성을 설치하고 최신 메인라인 커널로 업데이트했습니다." @@ -5009,37 +5008,37 @@ elrepo_install() { elrepo() { root_use - send_stats "레드 모자 커널 관리" + 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 "elrepo 커널을 설치했습니다" + echo "현재 커널 버전:$kernel_version" echo "" echo "커널 관리" echo "------------------------" - echo "1. Elrepo 커널 업데이트 2. Elrepo 커널 제거" + echo "1. elrepo 커널 업데이트 2. elrepo 커널 제거" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + 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 커널을 업데이트하십시오" + 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 "빨간 모자 커널을 제거하십시오" + echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" + send_stats "Red Hat 커널 제거" server_reboot ;; @@ -5052,10 +5051,10 @@ elrepo() { else clear - echo "데이터를 백업하고 Linux 커널을 업그레이드합니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mh4y1w7qa?t=529.2" + echo "데이터를 백업해 주시면 Linux 커널을 업그레이드해 드리겠습니다." + echo "영상 소개: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" - echo "Red Hat 시리즈 배포 Centos/Redhat/Alma/Rocky/Oracle 만 지원합니다" + echo "Red Hat 시리즈 배포판 CentOS/RedHat/Alma/Rocky/oracle만 지원" echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경을 주의해서 업그레이드하시는 것을 추천드립니다!" echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5064,7 +5063,7 @@ elrepo() { [Yy]) check_swap elrepo_install - send_stats "Red Hat 커널을 업그레이드하십시오" + send_stats "Red Hat 커널 업그레이드" server_reboot ;; [Nn]) @@ -5082,7 +5081,7 @@ elrepo() { clamav_freshclam() { - echo -e "${gl_huang}바이러스 데이터베이스 업데이트 ...${gl_bai}" + echo -e "${gl_huang}바이러스 데이터베이스 업데이트 중...${gl_bai}" docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5092,19 +5091,19 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi echo -e "${gl_huang}$@ 디렉터리를 검색하는 중...${gl_bai}" - # 마운트 매개 변수를 빌드하십시오 + # 마운트 매개변수 빌드 local MOUNT_PARAMS="" for dir in "$@"; do MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # Clamscan 명령 매개 변수를 작성하십시오 + # clamscan 명령 매개변수 빌드 local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5113,7 +5112,7 @@ clamav_scan() { 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 \ @@ -5122,8 +5121,8 @@ clamav_scan() { clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS - echo -e "${gl_lv}$@ scan이 완료되고 바이러스 보고서가 저장됩니다${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" - echo -e "${gl_lv}바이러스가 있다면 제발${gl_huang}scan.log${gl_lv}파일에서 찾은 키워드를 검색하여 바이러스의 위치를 ​​확인하십시오.${gl_bai}" + 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}" } @@ -5135,16 +5134,16 @@ clamav_scan() { clamav() { root_use - send_stats "바이러스 스캔 관리" + send_stats "바이러스 검사 관리" while true; do clear echo "clamav 바이러스 검사 도구" echo "영상 소개: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" echo "다양한 유형의 악성 코드를 탐지하고 제거하는 데 주로 사용되는 오픈 소스 바이러스 백신 소프트웨어 도구입니다." - echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어를 포함합니다." + echo "바이러스, 트로이 목마, 스파이웨어, 악성 스크립트 및 기타 유해한 소프트웨어가 포함됩니다." echo "------------------------" - echo -e "${gl_lv}1. 전체 디스크 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리 스캔${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉토리 스캔${gl_bai}" + echo -e "${gl_lv}1. 전체 스캔${gl_bai} ${gl_huang}2. 중요한 디렉토리 스캔${gl_bai} ${gl_kjlan}3. 사용자 정의 디렉터리 검색${gl_bai}" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -5188,9 +5187,9 @@ clamav() { # 고성능 모드 최적화 기능 optimize_high_performance() { - echo -e "${gl_lv}전환하십시오${tiaoyou_moshi}...${gl_bai}" + echo -e "${gl_lv}로 전환하다${tiaoyou_moshi}...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화...${gl_bai}" ulimit -n 65535 echo -e "${gl_lv}가상 메모리 최적화...${gl_bai}" @@ -5215,11 +5214,11 @@ optimize_high_performance() { echo -e "${gl_lv}캐시 관리 최적화...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + 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 @@ -5227,21 +5226,21 @@ optimize_high_performance() { } -# 이퀄라이제이션 모드 최적화 기능 +# 균형 모드 최적화 기능 optimize_balanced() { - echo -e "${gl_lv}이퀄라이제이션 모드로 전환 ...${gl_bai}" + echo -e "${gl_lv}이퀄라이제이션 모드로 전환...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화...${gl_bai}" ulimit -n 32768 - echo -e "${gl_lv}가상 메모리 최적화 ...${gl_bai}" + 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}" + 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 @@ -5253,14 +5252,14 @@ optimize_balanced() { 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}" + echo -e "${gl_lv}캐시 관리 최적화...${gl_bai}" sysctl -w vm.vfs_cache_pressure=75 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=1 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 투명 페이지를 복원하십시오 + echo -e "${gl_lv}기타 최적화...${gl_bai}" + # 투명한 대용량 페이지 복원 echo always > /sys/kernel/mm/transparent_hugepage/enabled # NUMA 밸런싱 복원 sysctl -w kernel.numa_balancing=1 2>/dev/null @@ -5268,21 +5267,21 @@ optimize_balanced() { } -# 기본 설정 기능을 복원하십시오 +# 기본 설정 복원 기능 restore_defaults() { echo -e "${gl_lv}기본 설정으로 되돌리기...${gl_bai}" echo -e "${gl_lv}파일 설명자를 복원합니다...${gl_bai}" ulimit -n 1024 - echo -e "${gl_lv}가상 메모리 복원 ...${gl_bai}" + 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}" + 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 @@ -5314,7 +5313,7 @@ restore_defaults() { optimize_web_server() { echo -e "${gl_lv}웹사이트 구축 최적화 모드로 전환...${gl_bai}" - echo -e "${gl_lv}파일 설명자 최적화 ...${gl_bai}" + echo -e "${gl_lv}파일 설명자 최적화...${gl_bai}" ulimit -n 65535 echo -e "${gl_lv}가상 메모리 최적화...${gl_bai}" @@ -5324,7 +5323,7 @@ optimize_web_server() { 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}" + 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 @@ -5336,14 +5335,14 @@ optimize_web_server() { 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}" + echo -e "${gl_lv}캐시 관리 최적화...${gl_bai}" sysctl -w vm.vfs_cache_pressure=50 2>/dev/null - echo -e "${gl_lv}CPU 설정 최적화 ...${gl_bai}" + echo -e "${gl_lv}CPU 설정 최적화...${gl_bai}" sysctl -w kernel.sched_autogroup_enabled=0 2>/dev/null - echo -e "${gl_lv}기타 최적화 ...${gl_bai}" - # 대형 투명 페이지를 비활성화하여 대기 시간을 줄입니다 + echo -e "${gl_lv}기타 최적화...${gl_bai}" + # 대기 시간을 줄이기 위해 투명한 대용량 페이지를 비활성화합니다. echo never > /sys/kernel/mm/transparent_hugepage/enabled # NUMA 밸런싱 비활성화 sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5357,20 +5356,20 @@ Kernel_optimize() { while true; do clear send_stats "Linux 커널 튜닝 관리" - echo "Linux 시스템에서 커널 매개 변수의 최적화" + echo "Linux 시스템 커널 매개변수 최적화" echo "영상 소개: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" - echo "다양한 시스템 매개 변수 튜닝 모드가 제공되며 사용자는 자체 사용 시나리오에 따라 선택하고 전환 할 수 있습니다." + echo "다양한 시스템 매개변수 조정 모드를 제공하며 사용자는 자신의 사용 시나리오에 따라 전환하도록 선택할 수 있습니다." echo -e "${gl_huang}힌트:${gl_bai}프로덕션 환경에서는 주의해서 사용해주세요!" echo "--------------------" echo "1. 고성능 최적화 모드: 시스템 성능을 최대화하고 파일 설명자, 가상 메모리, 네트워크 설정, 캐시 관리 및 CPU 설정을 최적화합니다." echo "2. 균형 잡힌 최적화 모드: 일상적인 사용에 적합한 성능과 리소스 소비 사이의 균형을 유지합니다." echo "3. 웹사이트 최적화 모드: 웹사이트 서버를 최적화하여 동시 연결 처리 기능, 응답 속도 및 전반적인 성능을 향상시킵니다." - echo "4. 라이브 브로드 캐스트 최적화 모드 : 라이브 방송 스트리밍의 특별한 요구를 최적화하여 대기 시간을 줄이고 전송 성능을 향상시킵니다." - echo "5. 게임 서버 최적화 모드 : 게임 서버를 위해 동시 처리 기능 및 응답 속도를 향상시킬 최적화." + echo "4. 라이브 방송 최적화 모드: 라이브 스트리밍의 특별한 요구 사항을 최적화하여 지연을 줄이고 전송 성능을 향상시킵니다." + echo "5. 게임 서버 최적화 모드: 게임 서버를 최적화하여 동시 처리 기능과 응답 속도를 향상시킵니다." echo "6. 기본 설정 복원: 시스템 설정을 기본 구성으로 복원합니다." echo "--------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "--------------------" read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -5391,7 +5390,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹 사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5411,7 +5410,7 @@ Kernel_optimize() { cd ~ clear restore_defaults - send_stats "기본 설정을 복원하십시오" + send_stats "기본 설정 복원" ;; *) break @@ -5438,7 +5437,7 @@ update_locale() { locale-gen echo "LANG=${lang}" > /etc/default/locale export LANG=${lang} - echo -e "${gl_lv}시스템 언어가 다음과 같이 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}시스템 언어가 다음과 같이 수정되었습니다.$lang적용하려면 SSH에 다시 연결하세요.${gl_bai}" hash -r break_end @@ -5447,7 +5446,7 @@ update_locale() { install glibc-langpack-zh localectl set-locale LANG=${lang} echo "LANG=${lang}" | tee /etc/locale.conf - echo -e "${gl_lv}시스템 언어가 다음과 같이 수정되었습니다.$langSSH를 다시 ​​연결하면 적용됩니다.${gl_bai}" + echo -e "${gl_lv}시스템 언어가 다음과 같이 수정되었습니다.$lang적용하려면 SSH에 다시 연결하세요.${gl_bai}" hash -r break_end ;; @@ -5467,25 +5466,25 @@ update_locale() { linux_language() { root_use -send_stats "스위치 시스템 언어" +send_stats "시스템 언어 전환" while true; do clear echo "현재 시스템 언어:$LANG" echo "------------------------" - echo "1. 영어 2. 중국어 3. 전통 중국어" + echo "1. 영어 2. 중국어 간체 3. 중국어 번체" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "영어로 전환하십시오" + send_stats "영어로 전환" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" - send_stats "단순화 된 중국어로 전환하십시오" + send_stats "중국어 간체로 전환" ;; 3) update_locale "zh_TW.UTF-8" "zh_TW.UTF-8" @@ -5511,7 +5510,7 @@ else echo "${bianse}" >> ~/.profile # source ~/.profile fi -echo -e "${gl_lv}변경이 완료되었습니다. 변경 사항을 볼 수 있도록 SSH를 다시 ​​연결하십시오!${gl_bai}" +echo -e "${gl_lv}변경이 완료되었습니다. 변경 사항을 보려면 SSH에 다시 연결하세요!${gl_bai}" hash -r break_end @@ -5535,9 +5534,9 @@ shell_bianse() { 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 "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) @@ -5598,12 +5597,12 @@ linux_trash() { clear echo -e "현재 휴지통${trash_status}" - echo -e "활성화 후 RM이 삭제 한 파일은 먼저 재활용 빈에 입력하여 중요한 파일의 잘못된 삭제를 방지합니다!" + echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 저장됩니다!" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "휴지통이 비어 있습니다." echo "------------------------" echo "1. 휴지통 활성화 2. 휴지통 닫기" - echo "3. 컨텐츠를 복원 4. 재활용 쓰레기통을 지 웁니다" + echo "3. 콘텐츠 복원 4. 휴지통 비우기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -5623,7 +5622,7 @@ linux_trash() { sed -i '/alias rm/d' "$bashrc_profile" echo "alias rm='rm -i'" >> "$bashrc_profile" source "$bashrc_profile" - echo "재활용 빈이 닫히고 파일이 직접 삭제됩니다." + echo "휴지통이 닫히고 파일이 직접 삭제됩니다." sleep 2 ;; 3) @@ -5639,7 +5638,7 @@ linux_trash() { read -e -p "휴지통을 비우시겠습니까? [예/아니요]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "재활용 쓰레기통이 지워졌습니다." + echo "휴지통이 비워졌습니다." fi ;; *) @@ -5654,17 +5653,17 @@ send_stats "명령 즐겨찾기" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# 백업을 만듭니다 +# 백업 만들기 create_backup() { send_stats "백업 만들기" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # 사용자에게 백업 디렉터리를 묻는 메시지 표시 - echo "백업 예제 :" + echo "백업 생성 예:" echo "- 단일 디렉터리 백업: /var/www" echo "- 여러 디렉터리 백업: /etc /home /var/log" echo "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." - read -r -p "백업 디렉토리를 입력하십시오 (여러 디렉토리가 공간별로 구분되며 직접 입력하면 기본 디렉토리를 사용하십시오)." input + read -r -p "백업할 디렉터리를 입력하십시오(여러 디렉터리를 공백으로 구분하고 Enter를 눌러 기본 디렉터리를 사용하십시오)." input # 사용자가 디렉터리를 입력하지 않으면 기본 디렉터리가 사용됩니다. if [ -z "$input" ]; then @@ -5686,13 +5685,13 @@ create_backup() { PREFIX+="${dir_name}_" done - # 마지막 밑줄을 제거하십시오 + # 마지막 밑줄 제거 local PREFIX=${PREFIX%_} # 백업 파일 이름 생성 local BACKUP_NAME="${PREFIX}_$TIMESTAMP.tar.gz" - # 사용자가 선택한 디렉토리를 인쇄하십시오 + # 사용자가 선택한 디렉토리 인쇄 echo "선택한 백업 디렉터리는 다음과 같습니다." for path in "${BACKUP_PATHS[@]}"; do echo "- $path" @@ -5714,11 +5713,11 @@ create_backup() { # 백업 복원 restore_backup() { - send_stats "백업을 복원하십시오" - # 복원하려는 백업을 선택하십시오 + send_stats "백업 복원" + # 복원할 백업을 선택하세요 read -e -p "복원할 백업 파일 이름을 입력하십시오:" BACKUP_NAME - # 백업 파일이 있는지 확인하십시오 + # 백업 파일이 있는지 확인 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then echo "백업 파일이 존재하지 않습니다!" exit 1 @@ -5730,34 +5729,34 @@ restore_backup() { if [ $? -eq 0 ]; then echo "백업 및 복원 성공!" else - echo "백업 복구 실패!" + echo "백업 복원에 실패했습니다!" exit 1 fi } -# 백업을 나열합니다 +# 백업 나열 list_backups() { - echo "사용 가능한 백업 :" + 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 "백업이 성공적으로 삭제되었습니다!" + echo "백업이 삭제되었습니다!" else echo "백업 삭제에 실패했습니다!" exit 1 @@ -5777,7 +5776,7 @@ linux_backup() { echo "------------------------" echo "1. 백업 생성 2. 백업 복원 3. 백업 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" choice case $choice in @@ -5786,7 +5785,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -5800,7 +5799,7 @@ linux_backup() { # 연결 목록 표시 list_connections() { - echo "저장된 연결 :" + echo "저장된 연결:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" @@ -5809,39 +5808,39 @@ list_connections() { # 새 연결 추가 add_connection() { - send_stats "새 연결을 추가하십시오" + 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 "연결 이름을 입력하세요:" name + read -e -p "IP 주소를 입력하세요:" ip read -e -p "사용자 이름을 입력하십시오(기본값: 루트):" user local user=${user:-root} # 如果用户未输入,则使用默认值 root - read -e -p "포트 번호를 입력하십시오 (기본값 : 22) :" port + read -e -p "포트 번호를 입력하십시오(기본값: 22):" port local port=${port:-22} # 如果用户未输入,则使用默认值 22 - echo "인증 방법을 선택하십시오 :" + echo "인증 방법을 선택하세요:" echo "1. 비밀번호" - echo "2. 키" - read -e -p "선택 (1/2)을 입력하십시오 :" auth_choice + echo "2. 열쇠" + read -e -p "원하는 항목(1/2)을 입력하세요." auth_choice case $auth_choice in 1) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "비밀번호를 입력하세요:" password_or_key echo # 换行 ;; 2) echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -5870,7 +5869,7 @@ add_connection() { # 연결 삭제 delete_connection() { send_stats "연결 삭제" - read -e -p "삭제하려면 연결 번호를 입력하십시오." num + read -e -p "삭제할 연결 번호를 입력하세요:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then @@ -5880,7 +5879,7 @@ delete_connection() { IFS='|' read -r name ip user port password_or_key <<< "$connection" - # 연결이 키 파일을 사용하는 경우 키 파일을 삭제하십시오. + # 연결이 키 파일을 사용하는 경우 키 파일을 삭제하세요. if [[ "$password_or_key" == "$KEY_DIR"* ]]; then rm -f "$password_or_key" fi @@ -5889,14 +5888,14 @@ delete_connection() { echo "연결이 삭제되었습니다!" } -# 연결을 사용하십시오 +# 연결 사용 use_connection() { send_stats "연결 사용" - read -e -p "사용할 연결 번호를 입력하십시오." num + read -e -p "사용할 연결 번호를 입력하세요:" num local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "오류 : 해당 연결을 찾을 수 없었습니다." + echo "오류: 해당 연결을 찾을 수 없습니다." return fi @@ -5904,18 +5903,18 @@ use_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 "연결에 실패했습니다! 다음 사항을 확인하세요." + echo "1. 키파일 경로가 맞나요?$password_or_key" echo "2. 키 파일 권한이 올바른가요(600이어야 함)." echo "3. 대상 서버에서 키를 이용한 로그인을 허용하는지 여부." fi else - # 비밀번호로 연결하십시오 + # 비밀번호를 사용하여 연결 if ! command -v sshpass &> /dev/null; then - echo "오류 : Sshpass가 설치되지 않았습니다. 먼저 Sshpass를 설치하십시오." + echo "오류: sshpass가 설치되지 않았습니다. 먼저 sshpass를 설치하십시오." echo "설치 방법:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" @@ -5923,10 +5922,10 @@ use_connection() { 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 서비스가 정상적으로 실행되는지 여부." + echo "연결에 실패했습니다! 다음 사항을 확인하세요." + echo "1. 사용자 이름과 비밀번호가 정확합니까?" + echo "2. 대상 서버에서 비밀번호 로그인을 허용하는지 여부." + echo "3. 대상 서버의 SSH 서비스가 정상적으로 실행되고 있는지 여부." fi fi } @@ -5938,7 +5937,7 @@ ssh_manager() { CONFIG_FILE="$HOME/.ssh_connections" KEY_DIR="$HOME/.ssh/ssh_manager_keys" - # 구성 파일과 키 디렉토리가 존재하는지 확인하고 존재하지 않으면 작성하십시오. + # 구성 파일과 키 디렉터리가 있는지 확인하고 없으면 만듭니다. if [[ ! -f "$CONFIG_FILE" ]]; then touch "$CONFIG_FILE" fi @@ -5958,7 +5957,7 @@ ssh_manager() { echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) add_connection ;; 2) use_connection ;; @@ -5986,10 +5985,10 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# 파티션을 장착하십시오 +# 마운트 파티션 mount_partition() { - send_stats "파티션을 장착하십시오" - read -e -p "장착 할 파티션 이름을 입력하십시오 (예 : SDA1) :" PARTITION + send_stats "마운트 파티션" + read -e -p "마운트할 파티션의 이름을 입력하십시오(예: sda1):" PARTITION # 파티션이 존재하는지 확인 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then @@ -6003,17 +6002,17 @@ mount_partition() { return fi - # 마운트 포인트를 만듭니다 + # 마운트 지점 생성 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 파티션을 장착하십시오 + # 마운트 파티션 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then echo "파티션이 성공적으로 마운트되었습니다:$MOUNT_POINT" else - echo "파티션 마운트 실패!" + echo "파티션 마운트에 실패했습니다!" rmdir "$MOUNT_POINT" fi } @@ -6021,38 +6020,38 @@ mount_partition() { # 파티션 마운트 해제 unmount_partition() { send_stats "파티션 마운트 해제" - read -e -p "파티션 이름 (예 : SDA1)을 입력하십시오." PARTITION + 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 "파티션 제거 실패!" + 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 @@ -6065,12 +6064,12 @@ format_partition() { fi # 파일 시스템 유형 선택 - echo "파일 시스템 유형을 선택하십시오 :" + echo "파일 시스템 유형을 선택하십시오:" echo "1. ext4" echo "2. xfs" echo "3. ntfs" echo "4. vfat" - read -e -p "선택을 입력하십시오 :" FS_CHOICE + read -e -p "선택사항을 입력하세요:" FS_CHOICE case $FS_CHOICE in 1) FS_TYPE="ext4" ;; @@ -6080,30 +6079,30 @@ format_partition() { *) echo "잘못된 선택입니다!"; return ;; esac - # 형식을 확인하십시오 + # 포맷 확인 read -e -p "포맷된 파티션 /dev/ 확인$PARTITION~을 위한$FS_TYPE? (예/아니요):" CONFIRM if [ "$CONFIRM" != "y" ]; then echo "작업이 취소되었습니다." return fi - # 형식 파티션 - echo "파티션 서식 /dev /$PARTITION~을 위한$FS_TYPE ..." + # 파티션 포맷 + echo "파티션 /dev/ 포맷 중$PARTITION~을 위한$FS_TYPE ..." mkfs.$FS_TYPE "/dev/$PARTITION" if [ $? -eq 0 ]; then echo "파티션이 성공적으로 포맷되었습니다!" else - echo "파티션 형식이 실패했습니다!" + echo "파티션 포맷에 실패했습니다!" fi } -# 파티션 상태를 확인하십시오 +# 파티션 상태 확인 check_partition() { - send_stats "파티션 상태를 확인하십시오" - read -e -p "파티션 이름을 입력하여 확인하십시오 (예 : SDA1) :" PARTITION + send_stats "파티션 상태 확인" + read -e -p "확인할 파티션 이름을 입력하세요(예: sda1):" PARTITION - # 파티션이 있는지 확인하십시오 + # 파티션이 존재하는지 확인 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then echo "파티션이 존재하지 않습니다!" return @@ -6116,18 +6115,18 @@ check_partition() { # 메인 메뉴 disk_manager() { - send_stats "하드 디스크 관리 기능" + send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions echo "------------------------" - echo "1. 파티션 마운트 2. 파티션 3. 마운트 파티션보기" + echo "1. 파티션 마운트 2. 파티션 마운트 해제 3. 마운트된 파티션 보기" echo "4. 파티션 포맷 5. 파티션 상태 확인" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" choice case $choice in @@ -6147,33 +6146,33 @@ disk_manager() { # 작업 목록 표시 list_tasks() { - echo "저장된 동기화 작업 :" + echo "저장된 동기화 작업:" echo "---------------------------------" awk -F'|' '{print NR " - " $1 " ( " $2 " -> " $3":"$4 " )"}' "$CONFIG_FILE" echo "---------------------------------" } -# 새로운 작업을 추가하십시오 +# 새 작업 추가 add_task() { - send_stats "새 동기화 작업을 추가하십시오" - echo "새 동기화 작업 작성 예 :" + send_stats "새 동기화 작업 추가" + echo "새 동기화 작업 생성의 예:" echo "- 작업 이름: backup_www" - echo "- 로컬 디렉토리 : /var /www" - echo "- 원격 주소 : user@192.168.1.100" - echo "- 원격 디렉토리 : /백업 /www" + echo "- 로컬 디렉터리: /var/www" + echo "- 원격 주소: user@192.168.1.100" + echo "- 원격 디렉터리: /backup/www" echo "- 포트 번호(기본값 22)" echo "---------------------------------" - read -e -p "작업 이름을 입력하십시오 :" name + 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 + read -e -p "원격 디렉토리를 입력하십시오:" remote_path + read -e -p "원격 user@IP를 입력하십시오:" remote + read -e -p "SSH 포트(기본값 22)를 입력하세요." port port=${port:-22} - echo "인증 방법을 선택하십시오 :" + echo "인증 방법을 선택하세요:" echo "1. 비밀번호" - echo "2. 키" - read -e -p "선택하십시오 (1/2) :" auth_choice + echo "2. 열쇠" + read -e -p "(1/2)을 선택하세요:" auth_choice case $auth_choice in 1) @@ -6182,14 +6181,14 @@ add_task() { auth_method="password" ;; 2) - echo "키 내용을 붙여 넣으십시오 (붙여 넣기 후 Enter Enter를 두 번 누릅니다) :" + echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -6203,7 +6202,7 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "잘못된 키 컨텐츠!" + echo "잘못된 키 콘텐츠입니다!" return fi ;; @@ -6213,9 +6212,9 @@ add_task() { ;; esac - echo "동기화 모드를 선택하십시오 :" - echo "1. 표준 모드 (-avz)" - echo "2. 대상 파일 삭제 (-avz-delete)" + echo "동기화 모드를 선택하십시오:" + echo "1. 표준 모드(-avz)" + echo "2. 대상 파일 삭제(-avz --delete)" read -e -p "(1/2)을 선택하세요:" mode case $mode in 1) options="-avz" ;; @@ -6230,20 +6229,20 @@ add_task() { echo "임무가 저장되었습니다!" } -# 작업을 삭제하십시오 +# 할 일 삭제 delete_task() { - send_stats "동기화 작업을 삭제합니다" - read -e -p "삭제하려면 작업 번호를 입력하십시오." num + send_stats "동기화 작업 삭제" + read -e -p "삭제할 작업 번호를 입력하세요:" num local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "오류 : 해당 작업을 찾을 수 없었습니다." + 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 @@ -6254,12 +6253,12 @@ delete_task() { run_task() { - send_stats "동기화 작업을 수행하십시오" + send_stats "동기화 작업 수행" CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # 매개 변수를 분석하십시오 + # 매개변수 구문 분석 local direction="push" # 默认是推送到远端 local num @@ -6270,14 +6269,14 @@ run_task() { num="$1" fi - # 들어오는 작업 번호가없는 경우 사용자에게 입력하라는 메시지를 표시하십시오. + # 작업 번호가 전달되지 않으면 사용자에게 입력하라는 메시지가 표시됩니다. if [[ -z "$num" ]]; then - read -e -p "실행할 작업 번호를 입력하십시오." num + read -e -p "실행할 작업 번호를 입력하세요:" num fi local task=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$task" ]]; then - echo "오류 : 작업이 찾을 수 없었습니다!" + echo "오류: 작업을 찾을 수 없습니다!" return fi @@ -6285,11 +6284,11 @@ run_task() { # 동기화 방향에 따라 소스 및 대상 경로 조정 if [[ "$direction" == "pull" ]]; then - echo "로컬로 동기화를 당기기 :$remote:$local_path -> $remote_path" + echo "로컬로 가져오기 및 동기화:$remote:$local_path -> $remote_path" source="$remote:$local_path" destination="$remote_path" else - echo "동기화를 원격 끝으로 푸시합니다.$local_path -> $remote:$remote_path" + echo "원격 끝에 푸시 및 동기화:$local_path -> $remote:$remote_path" source="$local_path" destination="$remote:$remote_path" fi @@ -6299,7 +6298,7 @@ run_task() { if [[ "$auth_method" == "password" ]]; then if ! command -v sshpass &> /dev/null; then - echo "오류 : Sshpass가 설치되지 않았습니다. 먼저 Sshpass를 설치하십시오." + echo "오류: sshpass가 설치되지 않았습니다. 먼저 sshpass를 설치하십시오." echo "설치 방법:" echo " - Ubuntu/Debian: apt install sshpass" echo " - CentOS/RHEL: yum install sshpass" @@ -6307,14 +6306,14 @@ run_task() { 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" + echo "오류: 키 파일이 존재하지 않습니다:$password_or_key" return fi if [[ "$(stat -c %a "$password_or_key")" != "600" ]]; then - echo "경고 : 키 파일 권한이 잘못되었고 수리 중입니다 ..." + echo "경고: 잘못된 키 파일 권한, 수정 중..." chmod 600 "$password_or_key" fi @@ -6324,10 +6323,10 @@ run_task() { if [[ $? -eq 0 ]]; then echo "동기화가 완료되었습니다!" else - echo "동기화 실패! 다음을 확인하십시오." - echo "1. 네트워크 연결이 정상입니까?" + echo "동기화에 실패했습니다! 다음 사항을 확인하세요." + echo "1. 네트워크 연결이 정상인가요?" echo "2. 원격 호스트에 접근 가능한지 여부" - echo "3. 인증 정보가 정확합니까?" + echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi } @@ -6339,13 +6338,13 @@ schedule_task() { read -e -p "정기적으로 동기화할 작업 번호를 입력하세요:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then - echo "오류 : 유효한 작업 번호를 입력하십시오!" + echo "오류: 유효한 작업 번호를 입력하십시오!" return fi echo "예약된 실행 간격을 선택하십시오." echo "1) 매 시간마다 한 번씩 실행" - echo "2) 하루에 한 번 수행하십시오" + echo "2) 하루에 한 번 실행" echo "3) 일주일에 한 번 실행" read -e -p "옵션을 입력하세요(1/2/3):" interval @@ -6361,7 +6360,7 @@ schedule_task() { 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 @@ -6372,7 +6371,7 @@ schedule_task() { echo "예약된 작업이 생성되었습니다:$cron_job" } -# 예정된 작업을 봅니다 +# 예약된 작업 보기 view_tasks() { echo "현재 예약된 작업:" echo "---------------------------------" @@ -6380,9 +6379,9 @@ view_tasks() { echo "---------------------------------" } -# 타이밍 작업을 삭제하십시오 +# 예약된 작업 삭제 delete_task_schedule() { - send_stats "동기화 타이밍 작업을 삭제합니다" + send_stats "동기화 예약 작업 삭제" read -e -p "삭제할 작업 번호를 입력하세요:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "오류: 유효한 작업 번호를 입력하십시오!" @@ -6402,19 +6401,19 @@ rsync_manager() { while true; do clear echo "Rsync 원격 동기화 도구" - echo "원격 디렉토리 간의 동기화는 증분 동기화, 효율적이고 안정적인 지원을 지원합니다." + echo "원격 디렉터리 간의 동기화는 효율적이고 안정적인 증분 동기화를 지원합니다." echo "---------------------------------" list_tasks echo view_tasks echo - echo "1. 새 작업 생성 2. 작업을 삭제하십시오" + echo "1. 새 작업 생성 2. 작업 삭제" echo "3. 원격 사이트에 대한 로컬 동기화 수행 4. 로컬 사이트에 대한 원격 동기화 수행" - echo "5. 타이밍 작업 만들기 6. 타이밍 작업 삭제" + echo "5. 예약된 작업 생성 6. 예약된 작업 삭제" echo "---------------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "---------------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) add_task ;; 2) delete_task ;; @@ -6425,7 +6424,7 @@ rsync_manager() { 0) break ;; *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -6494,18 +6493,18 @@ linux_info() { 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}리눅스 버전:${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_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}CPU 주파수:${gl_bai}$cpu_freq" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}CPU 점유 :${gl_bai}$cpu_usage_percent%" + 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}하드 드라이브 사용량:${gl_bai}$disk_info" echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}받은 총액:${gl_bai}$rx" echo -e "${gl_kjlan}보낸 총액:${gl_bai}$tx" @@ -6518,11 +6517,11 @@ linux_info() { fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6 주소 :${gl_bai}$ipv6_address" + 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}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 @@ -6540,54 +6539,54 @@ linux_tools() { # 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}Sudo Super Management 권한 도구${gl_kjlan}4. ${gl_bai}socat 통신 연결 도구" + 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}sudo 최고 관리 권한 도구${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}7. ${gl_bai}unzip ZIP 압축 및 압축 풀기 도구${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}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}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}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}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}41. ${gl_bai}지정된 도구 설치${gl_kjlan}42. ${gl_bai}지정된 도구 제거" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) clear install curl clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." curl --help - send_stats "컬을 설치하십시오" + send_stats "컬 설치" ;; 2) clear install wget clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." wget --help - send_stats "wget을 설치하십시오" + send_stats "wget 설치" ;; 3) clear install sudo clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." sudo --help - send_stats "Sudo를 설치하십시오" + send_stats "sudo 설치" ;; 4) clear @@ -6602,14 +6601,14 @@ linux_tools() { install htop clear htop - send_stats "HTOP를 설치하십시오" + send_stats "htop 설치" ;; 6) clear install iftop clear iftop - send_stats "iftop을 설치하십시오" + send_stats "iftop 설치" ;; 7) clear @@ -6617,7 +6616,7 @@ linux_tools() { clear echo "도구가 설치되었으며 다음과 같이 사용됩니다." unzip - send_stats "압축을 설치하십시오" + send_stats "설치압축 해제" ;; 8) clear @@ -6631,9 +6630,9 @@ linux_tools() { clear install tmux clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." tmux --help - send_stats "tmux를 설치하십시오" + send_stats "tmux 설치" ;; 10) clear @@ -6641,7 +6640,7 @@ linux_tools() { clear echo "도구가 설치되었으며 다음과 같이 사용됩니다." ffmpeg --help - send_stats "FFMPEG를 설치하십시오" + send_stats "ffmpeg 설치" ;; 11) @@ -6649,7 +6648,7 @@ linux_tools() { install btop clear btop - send_stats "Btop을 설치하십시오" + send_stats "btop 설치" ;; 12) clear @@ -6658,7 +6657,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저를 설치하십시오" + send_stats "레인저 설치" ;; 13) clear @@ -6694,7 +6693,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노를 설치하십시오" + send_stats "나노 설치" ;; @@ -6713,7 +6712,7 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrix를 설치하십시오" + send_stats "cmatrix 설치" ;; 22) clear @@ -6741,25 +6740,25 @@ linux_tools() { install ninvaders clear ninvaders - send_stats "Ninvaders를 설치하십시오" + send_stats "닌베이더 설치" ;; 31) clear - send_stats "모두 설치하십시오" + 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 "모든 설치 (게임 및 화면 보호기 제외)" + send_stats "모두 설치(게임 및 화면 보호기 제외)" install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger ncdu fzf vim nano git ;; 33) clear - send_stats "모든 것을 제거하십시오" + send_stats "모두 제거" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git ;; @@ -6767,13 +6766,13 @@ linux_tools() { clear read -e -p "설치된 도구 이름을 입력하십시오(wget 컬 sudo htop):" installname install $installname - send_stats "지정된 소프트웨어를 설치하십시오" + send_stats "지정된 소프트웨어 설치" ;; 42) clear read -e -p "제거된 도구 이름(htop ufw tmux cmatrix)을 입력하십시오." removename remove $removename - send_stats "지정된 소프트웨어를 제거하십시오" + send_stats "지정된 소프트웨어 제거" ;; 0) @@ -6801,16 +6800,16 @@ linux_bbr() { 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 "현재 TCP 차단 알고리즘:$congestion_algorithm $queue_algorithm" echo "" echo "BBR 관리" echo "------------------------" echo "1. BBRv3를 켭니다. 2. BBRv3을 끕니다(다시 시작됩니다)." echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) @@ -6857,7 +6856,7 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - echo -e "${BLUE}현재 백업 목록 :${NC}" + echo -e "${BLUE}현재 백업 목록:${NC}" ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음" } @@ -6869,9 +6868,9 @@ docker_ssh_migration() { backup_docker() { send_stats "도커 백업" - echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}" + echo -e "${YELLOW}Docker 컨테이너 백업 중...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(여러 개의 공백을 구분하고 Enter를 눌러 실행 중인 모든 컨테이너를 백업하십시오)." containers install tar jq gzip install_docker @@ -6898,17 +6897,17 @@ docker_ssh_migration() { declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do - echo -e "${GREEN}백업 컨테이너 :$c${NC}" + echo -e "${GREEN}백업 컨테이너:$c${NC}" local inspect_file="${BACKUP_DIR}/${c}_inspect.json" docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}감지$c도커 작성 컨테이너입니다${NC}" + echo -e "${BLUE}감지됨$c도커 작성 컨테이너입니다${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') if [ -z "$project_dir" ]; then - read -e -p "Compose 디렉토리가 감지되지 않으므로 수동으로 경로를 입력하십시오." project_dir + read -e -p "작성 디렉터리가 감지되지 않습니다. 경로를 수동으로 입력하세요." project_dir fi # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. @@ -6924,9 +6923,9 @@ docker_ssh_migration() { echo "# docker-compose 복원:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}프로젝트 작성 [$project_name] 포장 :${project_dir}${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name] 포장:${project_dir}${NC}" else - echo -e "${RED}docker-compose.yml을 찾을 수 없고이 컨테이너를 건너 뛰십시오 ...${NC}" + echo -e "${RED}docker-compose.yml을 찾을 수 없습니다. 이 컨테이너를 건너뛰는 중입니다...${NC}" fi else # 일반 컨테이너 백업 볼륨 @@ -6963,14 +6962,14 @@ docker_ssh_migration() { # /home/docker 아래의 모든 파일을 백업합니다(하위 디렉터리 제외). if [ -d "/home/docker" ]; then - echo -e "${BLUE}/home /docker 아래 파일을 백업 ...${NC}" + echo -e "${BLUE}/home/docker 아래의 파일을 백업합니다...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 아래의 파일은 다음과 같이 패키지되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi chmod +x "$RESTORE_SCRIPT" echo -e "${GREEN}백업 완료:${BACKUP_DIR}${NC}" - echo -e "${GREEN}사용 가능한 복원 스크립트 :${RESTORE_SCRIPT}${NC}" + echo -e "${GREEN}사용 가능한 복원 스크립트:${RESTORE_SCRIPT}${NC}" } @@ -6981,52 +6980,52 @@ docker_ssh_migration() { restore_docker() { send_stats "도커 복원" - read -e -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + read -e -p "복원할 백업 디렉터리를 입력하십시오:" BACKUP_DIR + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } - echo -e "${BLUE}복원 작업 시작 ...${NC}" + echo -e "${BLUE}복원 작업을 시작하는 중...${NC}" install tar jq gzip install_docker - # ----------------------------- + # --------- Compose 프로젝트 복원 우선순위 지정 --------- for f in "$BACKUP_DIR"/backup_type_*; do [[ ! -f "$f" ]] && continue if grep -q "compose" "$f"; then project_name=$(basename "$f" | sed 's/backup_type_//') path_file="$BACKUP_DIR/compose_path_${project_name}.txt" [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" - [[ -z "$original_path" ]] && read -e -p "원래 경로는 찾을 수 없었습니다. 복원 디렉토리 경로를 입력하십시오." original_path + [[ -z "$original_path" ]] && read -e -p "원래 경로를 찾을 수 없습니다. 복원 디렉터리 경로를 입력하십시오:" original_path # Compose 프로젝트의 컨테이너가 이미 실행 중인지 확인하세요. running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then - echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 컨테이너가 실행 중입니다. 스킵 복원 ...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 컨테이너가 이미 실행 중입니다. 복원을 건너뛰세요...${NC}" continue fi read -e -p "Compose 프로젝트 복원 확인 [$project_name] 경로 [$original_path] ? (y/n): " confirm - [[ "$confirm" != "y" ]] && read -e -p "새로운 복원 경로를 입력하십시오 :" original_path + [[ "$confirm" != "y" ]] && read -e -p "새 복원 경로를 입력하십시오." original_path mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name] 압축 압축 : :$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true docker compose up -d - echo -e "${GREEN}작곡 프로젝트 [$project_name] 복원 완료!${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name] 복원 완료!${NC}" fi done # --------- 일반 컨테이너를 계속 복원합니다 --------- - echo -e "${BLUE}일반적인 도커 컨테이너를 확인하고 복원하십시오 ...${NC}" + echo -e "${BLUE}일반 Docker 컨테이너 확인 및 복원...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리 컨테이너 :$container${NC}" + echo -e "${GREEN}처리 용기:$container${NC}" # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then @@ -7067,20 +7066,20 @@ docker_ssh_migration() { fi done - # 기존이지만 실행되지 않은 컨테이너를 삭제하십시오 + # 기존이지만 실행되지 않는 컨테이너 삭제 if docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then echo -e "${YELLOW}컨테이너 [$container]가 있지만 실행 중이 아닙니다. 이전 컨테이너를 삭제하세요...${NC}" docker rm -f "$container" fi - # 컨테이너를 시작하십시오 + # 컨테이너 시작 echo "복원 명령을 실행합니다: docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" eval "docker run -d --name \"$container\" $PORT_ARGS $VOL_ARGS $ENV_ARGS \"$IMAGE\"" done [[ "$has_container" == false ]] && echo -e "${YELLOW}공통 컨테이너에 대한 백업 정보가 없습니다.${NC}" - # /home /docker에서 파일을 복원하십시오 + # /home/docker 아래의 파일 복원 if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker 아래의 파일을 복원하는 중...${NC}" mkdir -p /home/docker @@ -7095,24 +7094,24 @@ docker_ssh_migration() { # ---------------------------- - # 마이그레이션 + # 이주하다 # ---------------------------- migrate_docker() { send_stats "도커 마이그레이션" install jq - read -e -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR + read -e -p "마이그레이션할 백업 디렉터리를 입력하세요." BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } - read -e -p "대상 서버 IP :" TARGET_IP + read -e -p "대상 서버 IP:" TARGET_IP read -e -p "대상 서버 SSH 사용자 이름:" TARGET_USER - read -e -p "대상 서버 SSH 포트 [기본값 22] :" TARGET_PORT + read -e -p "대상 서버 SSH 포트 [기본값 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" - echo -e "${YELLOW}백업 전송 ...${NC}" + echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키로 로그인 + # 키를 사용하여 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7124,9 +7123,9 @@ docker_ssh_migration() { delete_backup() { send_stats "Docker 백업 파일 삭제" read -e -p "삭제할 백업 디렉터리를 입력하십시오:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; } + [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } rm -rf "$BACKUP_DIR" - echo -e "${GREEN}삭제 된 백업 :${BACKUP_DIR}${NC}" + echo -e "${GREEN}삭제된 백업:${BACKUP_DIR}${NC}" } # ---------------------------- @@ -7137,15 +7136,15 @@ docker_ssh_migration() { while true; do clear echo "------------------------" - echo -e "도커 백업/마이그레이션/복원 도구" + echo -e "Docker 백업/마이그레이션/복원 도구" echo "------------------------" list_backups echo -e "" echo "------------------------" echo -e "1. 도커 프로젝트 백업" - echo -e "2. Docker 프로젝트를 마이그레이션합니다" + echo -e "2. 도커 프로젝트 마이그레이션" echo -e "3. 도커 프로젝트 복원" - echo -e "4. Docker 프로젝트의 백업 파일을 삭제하십시오" + echo -e "4. Docker 프로젝트의 백업 파일을 삭제합니다." echo "------------------------" echo -e "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -7173,13 +7172,13 @@ linux_docker() { while true; do clear - # Send_stats "Docker Management" + # send_stats "도커 관리" echo -e "도커 관리" docker_tato echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}1. ${gl_bai}Docker 환경을 설치하고 업데이트하십시오${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}1. ${gl_bai}Docker 환경 설치 및 업데이트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}2. ${gl_bai}Docker Global Status를 봅니다${gl_huang}★${gl_bai}" + 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}도커 이미지 관리" @@ -7191,7 +7190,7 @@ linux_docker() { 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}11. ${gl_bai}Docker-ipv6 액세스 활성화" echo -e "${gl_kjlan}12. ${gl_bai}Docker-ipv6 액세스 끄기" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}19. ${gl_bai}Docker 환경 백업/마이그레이션/복원" @@ -7204,7 +7203,7 @@ linux_docker() { case $sub_choice in 1) clear - send_stats "Docker 환경을 설치하십시오" + send_stats "도커 환경 설치" install_add_docker ;; @@ -7215,7 +7214,7 @@ linux_docker() { 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 "도커 글로벌 상태" + send_stats "도커 전역 상태" echo "도커 버전" docker -v docker compose version @@ -7224,10 +7223,10 @@ linux_docker() { echo -e "도커 이미지:${gl_lv}$image_count${gl_bai} " docker image ls echo "" - echo -e "도커 컨테이너 :${gl_lv}$container_count${gl_bai}" + echo -e "도커 컨테이너:${gl_lv}$container_count${gl_bai}" docker ps -a echo "" - echo -e "도커 볼륨 :${gl_lv}$volume_count${gl_bai}" + echo -e "Docker 볼륨:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" echo -e "도커 네트워크:${gl_lv}$network_count${gl_bai}" @@ -7273,33 +7272,33 @@ linux_docker() { echo "네트워크 운영" echo "------------------------" echo "1. 네트워크 생성" - echo "2. 인터넷에 가입하십시오" + echo "2. 네트워크에 가입하세요" echo "3. 네트워크 종료" - echo "4. 네트워크를 삭제합니다" + echo "4. 네트워크 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) send_stats "네트워크 생성" - read -e -p "새 네트워크 이름 설정 :" dockernetwork + read -e -p "새 네트워크 이름 설정:" dockernetwork docker network create $dockernetwork ;; 2) send_stats "네트워크에 가입하세요" read -e -p "네트워크 이름 추가:" dockernetwork - read -e -p "해당 컨테이너는 네트워크에 추가됩니다 (여러 컨테이너 이름은 공간으로 분리됩니다)." dockernames + 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 + send_stats "네트워크에 가입하세요" + read -e -p "종료 네트워크 이름:" dockernetwork + read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7309,7 +7308,7 @@ linux_docker() { 4) send_stats "네트워크 삭제" - read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork + read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork docker network rm $dockernetwork ;; @@ -7327,11 +7326,11 @@ linux_docker() { echo "도커 볼륨 목록" docker volume ls echo "" - echo "볼륨 작동" + echo "볼륨 작업" echo "------------------------" echo "1. 새 볼륨 생성" - echo "2. 지정된 볼륨을 삭제합니다" - echo "3. 모든 볼륨을 삭제하십시오" + echo "2. 지정된 볼륨 삭제" + echo "3. 모든 볼륨 삭제" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -7339,8 +7338,8 @@ linux_docker() { case $sub_choice in 1) - send_stats "새 볼륨을 만듭니다" - read -e -p "새 볼륨 이름 설정 :" dockerjuan + send_stats "새 볼륨 생성" + read -e -p "새 볼륨 이름 설정:" dockerjuan docker volume create $dockerjuan ;; @@ -7363,7 +7362,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7376,7 +7375,7 @@ linux_docker() { ;; 7) clear - send_stats "도커 청소" + send_stats "도커 정리" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7407,7 +7406,7 @@ linux_docker() { 11) clear - send_stats "Docker V6 열기" + send_stats "도커 v6 켜짐" docker_ipv6_on ;; @@ -7424,7 +7423,7 @@ linux_docker() { 20) clear - send_stats "Docker는 제거합니다" + send_stats "도커 제거" read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7445,7 +7444,7 @@ linux_docker() { kejilion ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -7462,44 +7461,44 @@ linux_test() { while true; do clear - # Send_stats "테스트 스크립트 컬렉션" + # 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 스트리밍 미디어 잠금 해제 탐지" + echo -e "${gl_kjlan}3. ${gl_bai}예우 스트리밍 미디어 잠금 해제 감지" echo -e "${gl_kjlan}4. ${gl_bai}xykt IP 품질 확인 스크립트${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}네트워크 회선 속도 테스트" echo -e "${gl_kjlan}11. ${gl_bai}besttrace 3 네트워크 백홀 지연 라우팅 테스트" - echo -e "${gl_kjlan}12. ${gl_bai}MTR_TRACE 3- 네트워크 백홀 라인 테스트" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed 3 Net 속도 측정" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace 삼중 네트워크 백홀 회선 테스트" + echo -e "${gl_kjlan}13. ${gl_bai}초고속 트리플 네트워크 속도 테스트" echo -e "${gl_kjlan}14. ${gl_bai}nxtrace 빠른 백홀 테스트 스크립트" - echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" - echo -e "${gl_kjlan}16. ${gl_bai}Ludashi2020 3 네트워크 라인 테스트" + echo -e "${gl_kjlan}15. ${gl_bai}nxtrace는 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 Network 품질 신체 검사 스크립트${gl_huang}★${gl_bai}" + 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}IICU/GB5 CPU 성능 테스트 스크립트" + echo -e "${gl_kjlan}22. ${gl_bai}icu/gb5 CPU 성능 테스트 스크립트" echo -e "${gl_kjlan}------------------------" - 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}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 + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) clear - send_stats "ChatGpt는 상태 감지를 잠금 해제합니다" + send_stats "ChatGPT 잠금 해제 상태 감지" bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh) ;; 2) @@ -7515,14 +7514,14 @@ linux_test() { ;; 4) clear - send_stats "xykt_ip 품질 신체 검사 스크립트" + send_stats "xykt_IP 품질 확인 스크립트" bash <(curl -Ls IP.Check.Place) ;; 11) clear - send_stats "Besttrace 3 개의 네트워크 백홀 지연 라우팅 테스트" + send_stats "besttrace 삼중 네트워크 백홀 지연 라우팅 테스트" install wget wget -qO- git.io/besttrace | bash ;; @@ -7544,27 +7543,27 @@ linux_test() { ;; 15) clear - send_stats "nxtrace는 ip backhaul 테스트 스크립트를 지정합니다" - echo "참조 할 수있는 IP 목록" + send_stats "nxtrace는 IP 백홀 테스트 스크립트를 지정합니다." + echo "참조 IP 목록" echo "------------------------" echo "베이징 통신: 219.141.136.12" - echo "베이징 유니폼 : 202.106.50.1" + echo "베이징 유니콤: 202.106.50.1" echo "베이징 모바일: 221.179.155.161" echo "상하이 통신: 202.96.209.133" - echo "상하이 유니폼 : 210.22.97.1" + echo "상하이 유니콤: 210.22.97.1" echo "상하이 모바일: 211.136.112.200" echo "광저우 통신: 58.60.188.222" echo "광저우 차이나 유니콤: 210.21.196.6" echo "광저우 모바일: 120.196.165.24" echo "청두통신: 61.139.2.69" - echo "청두 유니폼 : 119.6.6.6" - echo "청두 모바일 : 211.137.96.205" - echo "Hunan Telecom : 36.111.200.100" + echo "청두 차이나 유니콤: 119.6.6.6" + echo "청두 모바일: 211.137.96.205" + echo "후난 통신: 36.111.200.100" echo "후난 유니콤: 42.48.16.100" - echo "후난 모바일 : 39.134.254.6" + echo "후난 모바일: 39.134.254.6" echo "------------------------" - read -e -p "지정된 IP를 입력하십시오." testip + read -e -p "특정 IP를 입력하세요:" testip curl nxtrace.org/nt |bash nexttrace $testip ;; @@ -7577,7 +7576,7 @@ linux_test() { 17) clear - send_stats "I-ABC 다기능 속도 테스트 스크립트" + send_stats "i-abc 다기능 속도 테스트 스크립트" bash <(curl -sL ${gh_proxy}raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh) ;; @@ -7635,48 +7634,48 @@ linux_Oracle() { 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}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}3. ${gl_bai}DD 재설치 시스템 스크립트" echo -e "${gl_kjlan}4. ${gl_bai}R 형사 시작 스크립트" echo -e "${gl_kjlan}5. ${gl_bai}ROOT 비밀번호 로그인 모드 활성화" echo -e "${gl_kjlan}6. ${gl_bai}IPV6 복구 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) clear - echo "활성 스크립트 : CPU는 10-20% 메모리를 점유합니다." - read -e -p "설치 하시겠습니까? (Y/N) :" choice + echo "활성 스크립트: CPU 사용량 10-20% 메모리 사용량 20%" + read -e -p "설치하시겠습니까? (예/아니요):" 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 + # 사용자에게 CPU 코어 수와 점유율을 입력하라는 메시지를 표시합니다. 사용자가 Enter 키를 누르면 기본값이 사용됩니다. + 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 + 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 + read -e -p "메모리 사용량 비율을 입력하십시오.[기본값:$DEFAULT_MEM_UTIL]: " mem_util local mem_util=${mem_util:-$DEFAULT_MEM_UTIL} - read -e -p "스피드 테스트 간격 시간 (초)을 입력하십시오 [기본값 :$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "속도 테스트 간격 시간(초)을 입력하십시오. [기본값:$DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} - # 도커 컨테이너를 실행하십시오 + # Docker 컨테이너 실행 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7691,7 +7690,7 @@ linux_Oracle() { ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7699,20 +7698,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "Oracle Cloud는 활성 스크립트를 제거합니다" + send_stats "Oracle Cloud 제거 활성 스크립트" ;; 3) clear - echo "시스템을 다시 설치하십시오" + echo "시스템 재설치" echo "--------------------------------" - echo -e "${gl_hong}알아채다:${gl_bai}다시 설치는 접촉을 잃을 위험이 있으며 걱정하는 사람들은 그것을주의해서 사용해야합니다. 재설치는 15 분이 걸릴 것으로 예상됩니다. 데이터를 미리 백업하십시오." - read -e -p "계속할거야? (Y/N) :" choice + echo -e "${gl_hong}알아채다:${gl_bai}재설치 시 연결이 끊어질 수 있으니 걱정되시는 분들은 주의해서 사용해주세요. 재설치에는 약 15분 정도 소요될 예정이오니, 사전에 데이터를 백업해 주시기 바랍니다." + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) while true; do - read -e -p "다시 설치할 시스템을 선택하십시오 : 1. Debian12 | 2. Ubuntu20.04 :" sys_choice + read -e -p "다시 설치하려는 시스템을 선택하십시오: 1. Debian12 | 2. 우분투20.04:" sys_choice case "$sys_choice" in 1) @@ -7745,7 +7744,7 @@ linux_Oracle() { 4) clear - send_stats "형사 R 스크립트 시작" + send_stats "R 형사 시작 스크립트" bash <(wget -qO- ${gh_proxy}github.com/Yohann0617/oci-helper/releases/latest/download/sh_oci-helper_install.sh) ;; 5) @@ -7764,7 +7763,7 @@ linux_Oracle() { ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -7785,7 +7784,7 @@ docker_tato() { 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}" + 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 } @@ -7838,25 +7837,25 @@ linux_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}1. ${gl_bai}LDNMP 환경 설치${gl_huang}★${gl_bai} ${gl_huang}2. ${gl_bai}워드프레스 설치${gl_huang}★${gl_bai}" echo -e "${gl_huang}3. ${gl_bai}Discuz 포럼 설치${gl_huang}4. ${gl_bai}Kedao 클라우드 데스크탑 설치" - echo -e "${gl_huang}5. ${gl_bai}Apple CMS 영화 및 텔레비전 방송국을 설치하십시오${gl_huang}6. ${gl_bai}유니콘 디지털 카드 네트워크를 설치하십시오" - 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}5. ${gl_bai}Apple CMS 영화 및 TV 스테이션 설치${gl_huang}6. ${gl_bai}Unicorn 디지털 카드 네트워크 설치" + echo -e "${gl_huang}7. ${gl_bai}flarum 포럼 웹사이트 설치${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}사이트 리버스 프록시 -IP+포트${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}사이트 역방향 프록시 도메인 이름" + echo -e "${gl_huang}23. ${gl_bai}사이트 역방향 프록시-IP+포트${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}사이트 역방향 프록시 도메인 이름" echo -e "${gl_huang}25. ${gl_bai}Bitwarden 비밀번호 관리 플랫폼 설치${gl_huang}26. ${gl_bai}Halo 블로그 사이트 설치" echo -e "${gl_huang}27. ${gl_bai}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}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}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}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_huang}------------------------${gl_bai}" read -e -p "선택사항을 입력하세요:" sub_choice @@ -7872,7 +7871,7 @@ linux_ldnmp() { 3) clear - # Discuz 포럼 + # 토론 포럼 webname="Discuz论坛" send_stats "설치하다$webname" echo "배포 시작$webname" @@ -7900,7 +7899,7 @@ linux_ldnmp() { ldnmp_web_on echo "데이터베이스 주소: mysql" echo "데이터베이스 이름:$dbname" - echo "사용자 이름 :$dbuse" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "테이블 접두사: discuz_" @@ -7912,7 +7911,7 @@ linux_ldnmp() { # Kedao 클라우드 데스크탑 webname="可道云桌面" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7935,10 +7934,10 @@ linux_ldnmp() { ldnmp_web_on echo "데이터베이스 주소: mysql" - echo "사용자 이름 :$dbuse" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "데이터베이스 이름:$dbname" - echo "Redis 호스트 : Redis" + echo "레디스 호스트: 레디스" ;; @@ -7974,13 +7973,13 @@ linux_ldnmp() { ldnmp_web_on echo "데이터베이스 주소: mysql" - echo "데이터베이스 포트 : 3306" + echo "데이터베이스 포트: 3306" echo "데이터베이스 이름:$dbname" echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 접두사 : MAC_" + echo "데이터베이스 접두사: mac_" echo "------------------------" - echo "설치가 성공한 후 배경 주소에 로그인하십시오." + echo "설치가 성공적으로 완료되면 백엔드 주소로 로그인하세요." echo "https://$yuming/vip.php" ;; @@ -7990,7 +7989,7 @@ linux_ldnmp() { # 한쪽다리 숫자카드 webname="独脚数卡" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,21 +8010,21 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 포트: 3306" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "" - echo "Redis 주소 : Redis" - echo "Redis Password : 기본적으로 채워지지 않습니다" + echo "레디스 주소 : 레디스" + echo "redis 비밀번호: 기본적으로 입력되지 않음" echo "레디스 포트: 6379" echo "" echo "웹사이트 URL: https://$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "백엔드 로그인 경로: /admin" echo "------------------------" echo "사용자 이름: 관리자" - echo "비밀번호 : 관리자" + echo "비밀번호: 관리자" echo "------------------------" echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용하시기 바랍니다." echo "유니콘 숫자카드가 왜 이렇게 귀찮고 이런 문제가 있는지에 대해서도 너무 화가 납니다!" @@ -8075,12 +8074,12 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 이름:$dbname" echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "테이블 접두사: flarum_" - echo "관리자 정보는 직접 설정됩니다" + echo "관리자 정보는 직접 설정 가능" ;; @@ -8127,7 +8126,7 @@ linux_ldnmp() { # LinkStack webname="LinkStack" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8153,9 +8152,9 @@ linux_ldnmp() { clear ldnmp_web_on echo "데이터베이스 주소: mysql" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 포트: 3306" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" ;; @@ -8163,7 +8162,7 @@ linux_ldnmp() { clear webname="PHP动态站点" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8182,7 +8181,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/6${gl_bai}] PHP 소스 코드 업로드" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리 아래" + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리 아래" read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then @@ -8193,7 +8192,7 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/6${gl_bai}] index.php가있는 경로" + 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 {} @@ -8204,9 +8203,9 @@ linux_ldnmp() { 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 -e "[${gl_huang}3/6${gl_bai}] PHP 버전을 선택해주세요." echo "-------------" - read -e -p "1. PHP의 최신 버전 | 2. PHP7.4 :" pho_v + 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 @@ -8223,9 +8222,9 @@ linux_ldnmp() { clear - echo -e "[${gl_huang}4/6${gl_bai}] 지정된 확장자를 설치하십시오" + echo -e "[${gl_huang}4/6${gl_bai}] 지정된 확장 설치" echo "-------------" - echo "설치된 확장" + echo "설치된 확장 프로그램" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -8237,7 +8236,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}5/6${gl_bai}] 사이트 구성 편집" echo "-------------" - echo "계속하려면 모든 키를 누르면 의사 정적 내용 등과 같은 사이트 구성을 자세히 설정할 수 있습니다." + echo "계속하려면 아무 키나 누르세요. 의사정적 콘텐츠 등 사이트 구성을 세부적으로 설정할 수 있습니다." read -n 1 -s -r -p "" install nano nano /home/web/conf.d/$yuming.conf @@ -8246,14 +8245,14 @@ linux_ldnmp() { clear echo -e "[${gl_huang}6/6${gl_bai}] 데이터베이스 관리" echo "-------------" - read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 작성하고 데이터베이스 백업이 있습니다." use_db + read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 구축하고 데이터베이스 백업을 가지고 있습니다." use_db case $use_db in 1) echo ;; 2) echo "데이터베이스 백업은 .gz로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." - read -e -p "다운로드 링크를 입력하여 백업 데이터를 원격으로 다운로드 할 수도 있습니다. Enter가 직접 누르면 원격 다운로드를 건너 뜁니다." url_download_db + read -e -p "다운로드 링크를 입력하여 원격으로 백업 데이터를 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -8278,12 +8277,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "데이터베이스 주소 : MySQL" + echo "데이터베이스 주소: mysql" echo "데이터베이스 이름:$dbname" echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "테이블 접두사:$prefix" - echo "관리자 로그인 정보는 직접 설정됩니다" + echo "관리자 로그인 정보는 직접 설정합니다." ;; @@ -8299,7 +8298,7 @@ linux_ldnmp() { send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming - read -e -p "점프 도메인 이름을 입력하십시오 :" reverseproxy + read -e -p "리디렉션 도메인 이름을 입력하세요." reverseproxy nginx_install_status install_ssltls certs_status @@ -8333,10 +8332,10 @@ linux_ldnmp() { clear webname="反向代理-域名" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" - read -e -p "반세기 도메인 이름을 입력하십시오 :" fandai_yuming + read -e -p "역방향 프록시 도메인 이름을 입력하세요:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8357,7 +8356,7 @@ linux_ldnmp() { clear webname="Bitwarden" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming nginx_install_status install_ssltls @@ -8380,7 +8379,7 @@ linux_ldnmp() { clear webname="halo" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming nginx_install_status install_ssltls @@ -8432,7 +8431,7 @@ linux_ldnmp() { clear webname="静态站点" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming nginx_install_status @@ -8451,7 +8450,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}1/2${gl_bai}] 정적 소스 코드 업로드" echo "-------------" - echo "현재 Zip-Format 소스 코드 패키지 만 허용됩니다. 소스 코드 패키지를/home/web/html에 넣으십시오.${yuming}디렉토리에서" + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리 아래" read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then @@ -8462,7 +8461,7 @@ linux_ldnmp() { rm -f $(ls -t *.zip | head -n 1) clear - echo -e "[${gl_huang}2/2${gl_bai}] index.html이있는 경로" + 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 {} @@ -8500,11 +8499,11 @@ linux_ldnmp() { while true; do clear - echo "백업 파일이 작성되었습니다 : /home /$backup_filename" - read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice + echo "생성된 백업 파일: /home/$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "원격 서버 IP를 입력하세요:" remote_ip read -e -p "대상 서버 SSH 포트 [기본값 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then @@ -8516,7 +8515,7 @@ linux_ldnmp() { ssh-keygen -f "/root/.ssh/known_hosts" -R "$remote_ip" sleep 2 # 添加等待时间 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/home/" - echo "파일은 원격 서버 홈 디렉토리로 전송되었습니다." + echo "파일이 원격 서버 홈 디렉터리로 전송되었습니다." else echo "전송할 파일을 찾을 수 없습니다." fi @@ -8526,7 +8525,7 @@ linux_ldnmp() { break ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac done @@ -8534,7 +8533,7 @@ linux_ldnmp() { 33) clear - send_stats "시간이 지정된 원격 백업" + send_stats "예약된 원격 백업" read -e -p "원격 서버 IP를 입력하세요." useip read -e -p "원격 서버 비밀번호를 입력하세요:" usepasswd @@ -8546,18 +8545,18 @@ linux_ldnmp() { sed -i "s/123456/$usepasswd/g" ${useip}_beifen.sh echo "------------------------" - echo "1. 주간 백업 2. 매일 백업" + echo "1. 주간 백업 2. 일일 백업" read -e -p "선택사항을 입력하세요:" dingshi case $dingshi in 1) check_crontab_installed - read -e -p "주간 백업의 요일을 선택하십시오 (0-6, 0은 일요일을 나타냅니다) :" weekday + 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 + read -e -p "일일 백업 시간 선택(시간, 0-23):" hour (crontab -l ; echo "0 $hour * * * ./${useip}_beifen.sh") | crontab - > /dev/null 2>&1 ;; *) @@ -8576,14 +8575,14 @@ linux_ldnmp() { echo "-------------------------" ls -lt /home/*.gz | awk '{print $NF}' echo "" - read -e -p "최신 백업을 복원하려면 입력하고 백업 파일 이름을 입력하여 지정된 백업을 복원하고 0을 입력하려면 다음을 종료하십시오." filename + read -e -p "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 @@ -8620,11 +8619,11 @@ linux_ldnmp() { root_use while true; do clear - send_stats "LDNMP 환경을 업데이트하십시오" + send_stats "LDNMP 환경 업데이트" echo "LDNMP 환경 업데이트" echo "------------------------" ldnmp_v - echo "구성 요소의 새 버전을 발견하십시오" + echo "새 버전의 구성 요소가 발견되었습니다." echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8644,13 +8643,13 @@ linux_ldnmp() { fi echo "------------------------" echo - echo "1. Nginx 업데이트 2. MySQL 업데이트 3. PHP 업데이트 4. Redis 업데이트" + echo "1. nginx 업데이트 2. mysql 업데이트 3. PHP 업데이트 4. redis 업데이트" echo "------------------------" echo "5. 전체 환경 업데이트" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) nginx_upgrade @@ -8676,7 +8675,7 @@ linux_ldnmp() { ;; 3) local ldnmp_pods="php" - read -e -p "입력하십시오${ldnmp_pods}버전 번호(예: 7.4 8.0 8.1 8.2 8.3)(최신 버전을 얻으려면 Enter 키를 누르세요):" version + read -e -p "입력해주세요${ldnmp_pods}버전 번호(예: 7.4 8.0 8.1 8.2 8.3)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8755,7 +8754,7 @@ linux_ldnmp() { 38) root_use - send_stats "LDNMP 환경을 제거하십시오" + send_stats "LDNMP 환경 제거" read -e -p "$(echo -e "${gl_hong}强烈建议:${gl_bai}先备份全部网站数据,再卸载LDNMP环境。确定删除所有网站数据吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -8769,7 +8768,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -8813,73 +8812,74 @@ while true; do fi done - echo -e "${gl_kjlan}1. ${color1}Baota 패널의 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" - echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}nginxproxymanager 시각적 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 멀티 스토어 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" - echo -e "${gl_kjlan}7. ${color7}Nezha 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" + echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" + echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" + echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}11. ${color11}ZenTao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 시간 작업 관리 플랫폼" - echo -e "${gl_kjlan}13. ${color13}CloudReve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" - echo -e "${gl_kjlan}15. ${color15}emby 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}스피드 테스트 속도 테스트 패널" - echo -e "${gl_kjlan}17. ${color17}Adguardhome Adware${gl_kjlan}18. ${color18}Office Office Online Office Office" - echo -e "${gl_kjlan}19. ${color19}썬더 풀 WAF 방화벽 패널${gl_kjlan}20. ${color20}Portainer 컨테이너 관리 패널" + echo -e "${gl_kjlan}11. ${color11}ZenTao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 예정된 작업 관리 플랫폼" + echo -e "${gl_kjlan}13. ${color13}Cloudreve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" + echo -e "${gl_kjlan}15. ${color15}emby 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}Speedtest 속도 테스트 패널" + echo -e "${gl_kjlan}17. ${color17}AdGuardHome은 애드웨어를 제거합니다${gl_kjlan}18. ${color18}onlyoffice온라인 오피스 OFFICE" + echo -e "${gl_kjlan}19. ${color19}Leichi WAF 방화벽 패널${gl_kjlan}20. ${color20}포테이너 컨테이너 관리 패널" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}21. ${color21}VSCODE 웹 버전${gl_kjlan}22. ${color22}Uptimekuma 모니터링 도구" - echo -e "${gl_kjlan}23. ${color23}메모 웹 메모${gl_kjlan}24. ${color24}WebTop 원격 데스크탑 웹 에디션${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}NextCloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 예약된 작업 관리 프레임워크" + echo -e "${gl_kjlan}21. ${color21}VScode 웹 버전${gl_kjlan}22. ${color22}UptimeKuma 모니터링 도구" + echo -e "${gl_kjlan}23. ${color23}메모 웹 메모${gl_kjlan}24. ${color24}Webtop 원격 데스크톱 웹 버전${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}25. ${color25}Nextcloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 예약된 작업 관리 프레임워크" echo -e "${gl_kjlan}27. ${color27}Dockge 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}LibreSpeed ​​​​속도 테스트 도구" - echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 사이트${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism 개인 앨범 시스템" + echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 스테이션${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism 개인 앨범 시스템" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF 도구 모음${gl_kjlan}32. ${color32}drawio 무료 온라인 차트 작성 소프트웨어${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" - echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatai 채팅 집계 웹 사이트" - echo -e "${gl_kjlan}37. ${color37}MYIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya Alist 가족 버킷" - echo -e "${gl_kjlan}39. ${color39}Bilililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}webssh 웹 버전 SSH 연결 도구" + echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatAI 채팅 집계 웹사이트" + echo -e "${gl_kjlan}37. ${color37}MyIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist 가족 버킷" + echo -e "${gl_kjlan}39. ${color39}Bililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}webssh 웹 버전 SSH 연결 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexte 원격 연결 도구" + echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexterm 원격 연결 도구" echo -e "${gl_kjlan}43. ${color43}RustDesk 원격 데스크톱(서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk 원격 데스크톱(릴레이)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}GitHub 가속 스테이션${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}47. ${color47}프로메테우스 모니터링${gl_kjlan}48. ${color48}프로 메테우스 (호스트 모니터링)" - echo -e "${gl_kjlan}49. ${color49}Prometheus (컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" + echo -e "${gl_kjlan}47. ${color47}프로메테우스 모니터링${gl_kjlan}48. ${color48}프로메테우스(호스트 모니터링)" + echo -e "${gl_kjlan}49. ${color49}프로메테우스(컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}51. ${color51}PVE 오픈 병아리 패널${gl_kjlan}52. ${color52}DPANEL 컨테이너 관리 패널" - echo -e "${gl_kjlan}53. ${color53}llama3 채팅 AI 모델${gl_kjlan}54. ${color54}AMH 호스트 웹사이트 구축 관리 패널" - echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투(서버)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투 (클라이언트)${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}57. ${color57}DeepSeek 채팅 AI 큰 모델${gl_kjlan}58. ${color58}대규모 모델 지식 기반 확장${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}Newapi 큰 모델 자산 관리${gl_kjlan}60. ${color60}JumpServer 오픈 소스 요새 머신" + echo -e "${gl_kjlan}51. ${color51}PVE 오픈 병아리 패널${gl_kjlan}52. ${color52}DPanel 컨테이너 관리 패널" + echo -e "${gl_kjlan}53. ${color53}라마3 채팅 AI 대형 모델${gl_kjlan}54. ${color54}AMH 호스트 웹사이트 구축 관리 패널" + echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투(서버)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투(클라이언트)${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}57. ${color57}Deepseek 채팅 AI 대형 모델${gl_kjlan}58. ${color58}대규모 모델 지식 기반 확장${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}59. ${color59}NewAPI 대형 모델 자산 관리${gl_kjlan}60. ${color60}JumpServer 오픈 소스 요새 머신" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}RAGFlow 대규모 모델 지식 기반" - echo -e "${gl_kjlan}63. ${color63}OpenWebui 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" - echo -e "${gl_kjlan}65. ${color65}N8N 자동화 워크 플로 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}YT-DLP 비디오 다운로드 도구" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" + echo -e "${gl_kjlan}65. ${color65}n8n 자동화된 워크플로우 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp 비디오 다운로드 도구" echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" - echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}Astrbot 채팅 로봇 프레임 워크" + echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}AstrBot 챗봇 프레임워크" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워든 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" - echo -e "${gl_kjlan}75. ${color75}멜로디 음악 엘프${gl_kjlan}76. ${color76}온라인 dos 오래된 게임" - echo -e "${gl_kjlan}77. ${color77}천둥 오프라인 다운로드 도구${gl_kjlan}78. ${color78}Pandawiki 지능형 문서 관리 시스템" - echo -e "${gl_kjlan}79. ${color79}Beszel 서버 모니터링${gl_kjlan}80. ${color80}Linkwarden 북마크 관리" + echo -e "${gl_kjlan}75. ${color75}멜로디 음악 마법사${gl_kjlan}76. ${color76}온라인 DOS 오래된 게임" + echo -e "${gl_kjlan}77. ${color77}Thunder 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" + echo -e "${gl_kjlan}79. ${color79}베젤 서버 모니터링${gl_kjlan}80. ${color80}링크워든 북마크 관리" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}81. ${color81}JitsiMeet 화상 회의${gl_kjlan}82. ${color82}GPT-로드 고성능 AI 투명 프록시" - echo -e "${gl_kjlan}83. ${color83}Komari 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" + echo -e "${gl_kjlan}81. ${color81}JitsiMeet 화상 회의${gl_kjlan}82. ${color82}gpt-load 고성능 AI 투명 프록시" + echo -e "${gl_kjlan}83. ${color83}코마리 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" echo -e "${gl_kjlan}85. ${color85}이미치 픽처 비디오 매니저${gl_kjlan}86. ${color86}젤리핀 미디어 관리 시스템" echo -e "${gl_kjlan}87. ${color87}SyncTV는 함께 영화를 볼 수 있는 훌륭한 도구입니다${gl_kjlan}88. ${color88}Owncast 자체 호스팅 라이브 스트리밍 플랫폼" echo -e "${gl_kjlan}89. ${color89}FileCodeBox 파일 익스프레스${gl_kjlan}90. ${color90}매트릭스 분산형 채팅 프로토콜" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자" - echo -e "${gl_kjlan}93. ${color93}Dufs 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구" + echo -e "${gl_kjlan}91. ${color91}gitea 비공개 코드 저장소${gl_kjlan}92. ${color92}FileBrowser 파일 관리자" + echo -e "${gl_kjlan}93. ${color93}Dufs 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}Gopeed 고속 다운로드 도구" echo -e "${gl_kjlan}95. ${color95}종이 없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAuth 자체 호스팅 2단계 인증자" echo -e "${gl_kjlan}97. ${color97}WireGuard 네트워킹(서버)${gl_kjlan}98. ${color98}WireGuard 네트워킹(클라이언트)" - echo -e "${gl_kjlan}99. ${color99}DSM Synology 가상 컴퓨터${gl_kjlan}100. ${color100}동기화 지점 간 파일 동기화 도구" + echo -e "${gl_kjlan}99. ${color99}DSM Synology 가상 컴퓨터${gl_kjlan}100. ${color100}P2P 파일 동기화 도구 동기화" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}101. ${color101}AI 비디오 생성 도구${gl_kjlan}102. ${color102}vecechat 멀티 플레이어 온라인 채팅 시스템" + echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" + echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" + echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice fi case $sub_choice in @@ -9032,8 +9032,8 @@ while true; do docker_rum() { - read -e -p "로그인 사용자 이름 설정 :" admin - read -e -p "로그인 사용자 비밀번호 설정 :" admin_password + read -e -p "로그인 사용자 이름 설정:" admin + read -e -p "로그인 사용자 비밀번호 설정:" admin_password docker run -d \ --name=webtop-ubuntu \ --security-opt seccomp=unconfined \ @@ -9066,7 +9066,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9075,7 +9075,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "Nezha 모니터링$check_docker $update_status" + echo -e "네자 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9088,7 +9088,7 @@ while true; do echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) @@ -9145,7 +9145,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 건설하십시오" + send_stats "우체국을 짓다" clear install telnet local app_id="9" @@ -9155,16 +9155,16 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우체국 서비스$check_docker $update_status" + echo -e "우정$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1wv421c71t?t=0.1" + 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}" + echo -e "${gl_lv}포트$port현재 사용 가능${gl_bai}" else echo -e "${gl_hong}포트$port현재는 이용할 수 없습니다${gl_bai}" fi @@ -9181,13 +9181,13 @@ while true; do echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름 (예 : Mail.yuming.com)을 설정하십시오." yuming + read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -9223,7 +9223,7 @@ while true; do clear echo "poste.io가 설치되었습니다" echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "다음 주소를 사용하여 poste.io에 액세스할 수 있습니다." echo "https://$yuming" echo "" @@ -9246,9 +9246,9 @@ while true; do add_app_id clear - echo "Poste.io가 설치되었습니다" + echo "poste.io가 설치되었습니다" echo "------------------------" - echo "다음 주소를 사용하여 Poste.io에 액세스 할 수 있습니다." + echo "다음 주소를 사용하여 poste.io에 액세스할 수 있습니다." echo "https://$yuming" echo "" ;; @@ -9259,7 +9259,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." ;; *) @@ -9313,7 +9313,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9397,7 +9397,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -9556,7 +9556,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 수영장을 건설하십시오" + send_stats "천둥 웅덩이를 만들어라" local app_id="19" local docker_name=safeline-mgt @@ -9566,7 +9566,7 @@ while true; do clear echo -e "썬더 풀 서비스$check_docker" echo "레이치(Leichi)는 창팅테크놀로지(Changting Technology)가 개발한 WAF 사이트 방화벽 프로그램 패널로, 자동화된 방어를 위해 사이트를 반전시킬 수 있다." - echo "비디오 소개 : https://www.bilibili.com/video/bv1mz421t74c?t=0.1" + echo "영상 소개: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip fi @@ -9600,7 +9600,7 @@ while true; do add_app_id clear - echo "Thunder Pool WAF 패널이 업데이트되었습니다" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -9611,7 +9611,7 @@ while true; do docker compose down --rmi all sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "기본 설치 디렉토리 인 경우 프로젝트가 제거되었습니다. 설치 디렉토리를 사용자 정의하는 경우 직접 실행하려면 설치 디렉토리로 이동해야합니다." + echo "기본 설치 디렉터리에 있다면 이제 프로젝트가 제거된 것입니다. 설치 디렉터리를 사용자 정의하는 경우 설치 디렉터리로 이동하여 직접 실행해야 합니다." echo "docker compose down && docker compose down --rmi all" ;; *) @@ -10019,7 +10019,7 @@ while true; do local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" - local docker_url="공식 웹 사이트 소개 :${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" + 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" @@ -10276,9 +10276,9 @@ while true; do prometheus_install clear ip_address - echo "설치" + echo "설치 완료" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10296,7 +10296,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10518,7 +10518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10593,7 +10593,7 @@ while true; do echo "설치 완료" check_docker_app_ip echo "초기 사용자 이름: admin" - echo "초기 비밀번호 : changeme" + echo "초기 비밀번호: ChangeMe" } @@ -10935,7 +10935,7 @@ while true; do docker_rum() { - read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd + read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd docker run -d \ --name libretv \ @@ -10969,9 +10969,9 @@ while true; do local app_size="2" docker_app_install() { - read -e -p "로그인 사용자 이름 설정 :" admin + read -e -p "로그인 사용자 이름 설정:" admin read -e -p "로그인 사용자 비밀번호 설정:" admin_password - read -e -p "인증 코드를 입력하십시오." shouquanma + read -e -p "인증 코드 입력:" shouquanma mkdir -p /home/docker/moontv @@ -11075,7 +11075,7 @@ while true; do docker_rum() { read -e -p "로그인 사용자 이름 설정:" app_use - read -e -p "로그인 비밀번호 설정 :" app_passwd + read -e -p "로그인 비밀번호 설정:" app_passwd docker run -d \ --name xunlei \ @@ -11172,11 +11172,11 @@ while true; do install git openssl mkdir -p /home/docker/linkwarden && cd /home/docker/linkwarden - # 공식 Docker-Compose 및 ENV 파일을 다운로드하십시오 + # 공식 docker-compose 및 env 파일 다운로드 curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env" - # 임의의 키와 암호를 생성합니다 + # 임의의 키와 비밀번호 생성 local ADMIN_EMAIL="admin@example.com" local ADMIN_PASSWORD=$(openssl rand -hex 8) @@ -11185,17 +11185,17 @@ while true; do sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 16)|g" .env sed -i "s|^MEILI_MASTER_KEY=.*|MEILI_MASTER_KEY=$(openssl rand -hex 32)|g" .env - # 관리자 계정 정보를 추가하십시오 + # 관리자 계정 정보 추가 echo "ADMIN_EMAIL=${ADMIN_EMAIL}" >> .env echo "ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/linkwarden/docker-compose.yml - # 컨테이너를 시작하십시오 + # 컨테이너 시작 docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11205,7 +11205,7 @@ while true; do curl -O ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/docker-compose.yml curl -L ${gh_proxy}raw.githubusercontent.com/linkwarden/linkwarden/refs/heads/main/.env.sample -o ".env.new" - # 원래 변수를 유지하십시오 + # 원래 변수 유지 source .env mv .env.new .env echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env @@ -11290,7 +11290,7 @@ while true; do docker_rum() { - read -e -p "설정${docker_name}SK-159KEJILIONYYDS163 :와 같은 로그인 키 (SK 별 문자 및 숫자 조합) :" app_passwd + read -e -p "설정${docker_name}로그인 키(sk-다음과 같이 시작하는 문자와 숫자의 조합): sk-159kejilionyyds163:" app_passwd mkdir -p /home/docker/gpt-load && \ docker run -d --name gpt-load \ @@ -11394,7 +11394,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11407,7 +11407,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11568,7 +11568,7 @@ while true; do --restart=always \ matrixdotorg/synapse:latest - echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오." + echo "초기 사용자 또는 관리자를 생성합니다. 다음 사용자 이름과 비밀번호를 설정하고 관리자인지 여부를 설정하세요." docker exec -it matrix register_new_matrix_user \ http://localhost:8008 \ -c /data/homeserver.yaml @@ -11634,7 +11634,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -11812,7 +11812,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11844,7 +11844,7 @@ while true; do docker_rum() { - read -e -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT + read -e -p "네트워크의 클라이언트 수를 입력하십시오(기본값 5):" COUNT COUNT=${COUNT:-5} read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} @@ -11916,18 +11916,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}모든 클라이언트 QR 코드 구성 :${gl_bai}" + echo -e "${gl_huang}모든 클라이언트 QR 코드 구성:${gl_bai}" docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo - echo -e "${gl_huang}모든 클라이언트 구성 코드 :${gl_bai}" + echo -e "${gl_huang}모든 클라이언트 구성 코드:${gl_bai}" docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done' sleep 2 - echo -e "${gl_lv}${COUNT}모든 출력은 모두 각 클라이언트에 의해 구성되며 사용 방법은 다음과 같습니다.${gl_bai}" + echo -e "${gl_lv}${COUNT}각 클라이언트에 대한 모든 출력을 구성합니다. 사용방법은 다음과 같습니다.${gl_bai}" echo -e "${gl_lv}1. 휴대폰에 wg APP을 다운로드하고 위의 QR 코드를 스캔하면 빠르게 인터넷에 연결됩니다.${gl_bai}" - echo -e "${gl_lv}2. Windows 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결하십시오.${gl_bai}" + echo -e "${gl_lv}2. Windows용 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" echo -e "${gl_lv}3. 스크립트를 사용하여 Linux에 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}" - echo -e "${gl_lv}공식 클라이언트 다운로드 방법 : https://www.wireguard.com/install/${gl_bai}" + echo -e "${gl_lv}공식 클라이언트 다운로드 방법: https://www.wireguard.com/install/${gl_bai}" break_end } @@ -11955,16 +11955,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 디렉토리 생성 (존재하지 않는 경우) + # 디렉터리가 없으면 생성 mkdir -p "$(dirname "$CONFIG_FILE")" - echo "클라이언트 구성을 붙여 넣고 다음을 저장하려면 Enter Enter를 두 번 누릅니다." + echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." # 변수 초기화 input="" empty_line_count=0 - # 사용자 입력 라인별로 읽으십시오 + # 사용자 입력을 한 줄씩 읽습니다. while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -12045,7 +12045,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -12114,7 +12114,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -12165,6 +12165,47 @@ while true; do ;; + 103|umami) + local app_id="103" + local app_name="Umami网站统计工具" + local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" + local app_url="官方网站: https://github.com/umami-software/umami" + local docker_name="umami-umami-1" + local docker_port="8103" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml + + docker compose up -d + clear + echo "설치 완료" + check_docker_app_ip + echo "초기 사용자 이름: admin" + echo "초기 비밀번호 : umami" + } + + docker_app_update() { + cd /home/docker/umami/ && docker compose down --rmi all + cd /home/docker/umami/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml + cd /home/docker/umami/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/umami/ && docker compose down --rmi all + rm -rf /home/docker/umami + echo "앱이 제거되었습니다." + } + + docker_app_plus + + ;; + + b) clear @@ -12177,7 +12218,7 @@ while true; do while true; do clear echo "생성된 백업 파일: /$backup_filename" - read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) read -e -p "원격 서버 IP를 입력하세요:" remote_ip @@ -12195,12 +12236,12 @@ while true; do scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no "$latest_tar" "root@$remote_ip:/" echo "원격 서버/루트 디렉터리로 파일이 전송되었습니다." else - echo "전송할 파일은 찾을 수 없었습니다." + echo "전송할 파일을 찾을 수 없습니다." fi break ;; *) - echo "참고 : 현재 백업에는 Docker 프로젝트 만 포함되어 있으며 Pagoda 및 1Panel과 같은 웹 사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "참고: 현재 백업에는 docker 프로젝트만 포함되며, Pagoda, 1panel 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -12211,7 +12252,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 앱 백업" + echo "사용 가능한 애플리케이션 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12222,15 +12263,15 @@ while true; do linux_panel fi - # 사용자가 파일 이름을 입력하지 않으면 최신 압축 패키지를 사용하십시오. + # 사용자가 파일명을 입력하지 않으면 최신 압축 패키지가 사용됩니다. if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) fi if [ -n "$filename" ]; then - echo -e "${gl_huang}감압이 수행되고 있습니다$filename ...${gl_bai}" + echo -e "${gl_huang}압축 해제 중$filename ...${gl_bai}" cd / && tar -xzf "$filename" - echo "응용 프로그램 데이터가 복원되었습니다. 지정된 응용 프로그램 메뉴를 수동으로 입력하고 응용 프로그램을 업데이트하여 응용 프로그램을 복원하십시오." + echo "애플리케이션 데이터가 복원되었습니다. 현재 해당 애플리케이션을 복원하려면 지정된 애플리케이션 메뉴에 수동으로 진입한 후 애플리케이션을 업데이트하시기 바랍니다." else echo "압축된 패키지를 찾을 수 없습니다." fi @@ -12256,32 +12297,32 @@ linux_work() { while true; do clear send_stats "백엔드 작업공간" - echo -e "백엔드 작업 공간" - echo -e "이 시스템은 백엔드에서 실행할 수있는 작업 공간을 제공하며 장기 작업을 수행하는 데 사용할 수 있습니다." + echo -e "백엔드 작업공간" + echo -e "시스템은 장기간 작업을 수행하는 데 사용할 수 있는 백그라운드에서 영구적으로 실행될 수 있는 작업 공간을 제공합니다." echo -e "SSH 연결을 끊더라도 작업 공간의 작업은 중단되지 않으며 작업은 백그라운드에 유지됩니다." - echo -e "${gl_huang}힌트:${gl_bai}작업 공간에 입력 한 후 Ctrl+B를 사용하고 D 만 눌러 작업 공간을 종료하십시오!" + 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}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}작업 공간 No. 4" - echo -e "${gl_kjlan}5. ${gl_bai}작업 공간 번호 5" + 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}7. ${gl_bai}작업 영역 7" echo -e "${gl_kjlan}8. ${gl_bai}작업 영역 8" - echo -e "${gl_kjlan}9. ${gl_bai}작업 공간 No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}작업 공간 번호 10" + 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}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}24. ${gl_bai}지정된 작업공간 삭제" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아갑니다" + echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "선택사항을 입력하세요:" sub_choice @@ -12291,7 +12332,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12313,7 +12354,7 @@ linux_work() { clear install tmux local SESSION_NAME="work4" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 5) @@ -12327,35 +12368,35 @@ linux_work() { clear install tmux local SESSION_NAME="work6" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 7) clear install tmux local SESSION_NAME="work7" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 8) clear install tmux local SESSION_NAME="work8" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 9) clear install tmux local SESSION_NAME="work9" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; 10) clear install tmux local SESSION_NAME="work10" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12371,7 +12412,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 2를 켜십시오. 2를 끕니다" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12397,7 +12438,7 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1과 같이 생성하거나 입력 한 작업 공간의 이름을 입력하십시오." SESSION_NAME + read -e -p "1001 kj001 work1과 같이 생성하거나 입력한 작업공간의 이름을 입력하세요." SESSION_NAME tmux_run send_stats "맞춤형 작업공간" ;; @@ -12410,7 +12451,7 @@ linux_work() { ;; 24) - read -e -p "삭제하려는 작업 공간의 이름을 입력하십시오." gongzuoqu_name + read -e -p "삭제하려는 작업공간의 이름을 입력하세요:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name send_stats "작업공간 삭제" ;; @@ -12447,37 +12488,37 @@ linux_Settings() { # 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}지정된 버전의 Python 설치" - 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}루트 계정을 비활성화하여 새 계정을 생성하십시오${gl_kjlan}10. ${gl_bai}우선 순위 ipv4/ipv6 전환" + echo -e "${gl_kjlan}1. ${gl_bai}스크립트 시작 단축키 설정${gl_kjlan}2. ${gl_bai}로그인 비밀번호 변경" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" + 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}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}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}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}21. ${gl_bai}기본 호스트 확인${gl_kjlan}22. ${gl_bai}SSH 방어 프로그램" echo -e "${gl_kjlan}23. ${gl_bai}전류 제한 자동 종료${gl_kjlan}24. ${gl_bai}ROOT 개인 키 로그인 모드" echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기 경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템 커널 매개변수 최적화${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}29. ${gl_bai}바이러스 스캐닝 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${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}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}39. ${gl_bai}명령 즐겨 찾기${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}37. ${gl_bai}명령줄 기록${gl_kjlan}38. ${gl_bai}rsync 원격 동기화 도구" + echo -e "${gl_kjlan}39. ${gl_bai}명령 즐겨찾기${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${gl_bai}메시지 보드${gl_kjlan}66. ${gl_bai}원 스톱 시스템 최적화${gl_huang}★${gl_bai}" + 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 + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) @@ -12490,7 +12531,7 @@ 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 "바로 가기 키가 설정되어 있습니다" + echo "단축키가 설정되었습니다" send_stats "스크립트 단축키가 설정되었습니다" break_end linux_Settings @@ -12500,7 +12541,7 @@ linux_Settings() { 2) clear send_stats "로그인 비밀번호를 설정하세요" - echo "로그인 비밀번호를 설정하십시오" + echo "로그인 비밀번호를 설정하세요" passwd ;; 3) @@ -12513,16 +12554,16 @@ linux_Settings() { root_use send_stats "py 버전 관리" echo "파이썬 버전 관리" - echo "비디오 소개 : https://www.bilibili.com/video/bv1pm42157ck?t=0.1" + echo "영상 소개: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" echo "이 기능은 Python이 공식적으로 지원하는 모든 버전을 원활하게 설치할 수 있습니다!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') - echo -e "현재 파이썬 버전 번호 :${gl_huang}$VERSION${gl_bai}" + echo -e "현재 Python 버전 번호:${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 "더 많은 버전 확인: https://www.python.org/downloads/" echo "------------" - read -e -p "설치하려는 Python 버전 번호를 입력하십시오 (종료하려면 0을 입력하십시오) :" py_new_v + read -e -p "설치하려는 Python 버전 번호를 입력하세요(종료하려면 0 입력)." py_new_v if [[ "$py_new_v" == "0" ]]; then @@ -12589,7 +12630,7 @@ EOF local VERSION=$(python -V 2>&1 | awk '{print $2}') echo -e "현재 Python 버전 번호:${gl_huang}$VERSION${gl_bai}" - send_stats "스크립트 Py 버전을 스위치하십시오" + send_stats "스크립트 PY 버전 전환" ;; @@ -12598,12 +12639,12 @@ EOF send_stats "열린 포트" iptables_open remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1 - echo "모든 포트가 열려 있습니다" + echo "모든 포트가 열려 있습니다." ;; 6) root_use - send_stats "SSH 포트를 수정하십시오" + send_stats "SSH 포트 수정" while true; do clear @@ -12616,15 +12657,15 @@ EOF echo -e "현재 SSH 포트 번호는 다음과 같습니다.${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "1 ~ 65535 범위의 포트 번호가있는 숫자 (종료하려면 0을 입력하십시오)" + echo "포트 번호 범위는 1~65535입니다. (종료하려면 0을 입력하세요.)" - # 사용자에게 새 SSH 포트 번호를 입력하라는 메시지 + # 사용자에게 새 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 포트가 수정되었습니다" + send_stats "SSH 포트가 수정되었습니다." new_ssh_port elif [[ $new_port -eq 0 ]]; then send_stats "SSH 포트 수정 종료" @@ -12687,14 +12728,14 @@ EOF if grep -Eq '^\s*precedence\s+::ffff:0:0/96\s+100\s*$' /etc/gai.conf 2>/dev/null; then echo -e "현재 네트워크 우선순위 설정:${gl_huang}IPv4${gl_bai}우선 사항" else - echo -e "현재 네트워크 우선 순위 설정 :${gl_huang}IPv6${gl_bai}우선 사항" + echo -e "현재 네트워크 우선순위 설정:${gl_huang}IPv6${gl_bai}우선 사항" fi echo "" echo "------------------------" echo "1. IPv4 우선 2. IPv6 우선 3. IPv6 복구 도구" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선호하는 네트워크를 선택하세요:" choice @@ -12702,20 +12743,20 @@ EOF 1) grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "IPv4 우선 순위로 전환되었습니다" - send_stats "IPv4 우선 순위로 전환되었습니다" + echo "IPv4 우선순위로 전환됨" + send_stats "IPv4 우선순위로 전환됨" ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선 순위로 전환되었습니다" - send_stats "IPv6 우선 순위로 전환되었습니다" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) echo "이 기능은 jhb에서 제공합니다. 감사합니다!" - send_stats "IPv6 수정" + send_stats "IPv6 수리" ;; *) @@ -12741,9 +12782,9 @@ EOF 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 -e "현재 가상 메모리:${gl_huang}$swap_info${gl_bai}" echo "------------------------" - echo "1. 1024m 2. 할당 2048m 3. 4096m 할당 4. 사용자 정의 크기" + echo "1. 1024M 할당 2. 2048M 할당 3. 4096M 할당 4. 사용자 정의 크기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12767,7 +12808,7 @@ EOF ;; 4) - read -e -p "가상 메모리 크기 (단위 M)를 입력하십시오." new_swap + read -e -p "가상 메모리 크기(단위 M)를 입력하세요." new_swap add_swap "$new_swap" send_stats "사용자 정의 가상 메모리 세트" ;; @@ -12804,11 +12845,11 @@ EOF echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) - # 사용자에게 새 사용자 이름을 입력하도록 프롬프트하십시오 + # 사용자에게 새 사용자 이름을 묻는 메시지 표시 read -e -p "새 사용자 이름을 입력하세요:" new_username # 새로운 사용자 생성 및 비밀번호 설정 @@ -12820,13 +12861,13 @@ EOF 2) # 사용자에게 새 사용자 이름을 묻는 메시지 표시 - read -e -p "새 사용자 이름을 입력하십시오 :" new_username + read -e -p "새 사용자 이름을 입력하세요:" new_username - # 새 사용자를 생성하고 비밀번호를 설정하십시오 + # 새로운 사용자 생성 및 비밀번호 설정 useradd -m -s /bin/bash "$new_username" passwd "$new_username" - # 새로운 사용자에게 허가를 부여하십시오 + # 새 사용자에게 sudo 권한 부여 echo "$new_username ALL=(ALL:ALL) ALL" | tee -a /etc/sudoers install sudo @@ -12848,8 +12889,8 @@ EOF ;; 5) - read -e -p "삭제하려면 사용자 이름을 입력하십시오." username - # 사용자와 홈 디렉토리를 삭제하십시오 + read -e -p "삭제하려는 사용자 이름을 입력하세요:" username + # 사용자 및 해당 홈 디렉터리 삭제 userdel -r "$username" ;; @@ -12871,7 +12912,7 @@ EOF done echo "" - 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") @@ -12893,7 +12934,7 @@ EOF done echo "" - echo "16 비트 랜덤 비밀번호" + echo "16자리 랜덤 비밀번호" echo "------------------------" for i in {1..5}; do local password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16) @@ -12913,30 +12954,30 @@ EOF 15) root_use - send_stats "시간대를 변경하십시오" + 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 "현재 시스템 시간:$current_time" echo "" - echo "시간대 스위칭" + echo "시간대 스위치" echo "------------------------" echo "아시아" echo "1. 중국 상하이 시간 2. 중국 홍콩 시간" - echo "3. 일본의 도쿄 시간 4. 한국의 서울 시간" + echo "3. 일본 도쿄 시간 4. 한국 서울 시간" echo "5. 싱가포르 시간 6. 콜카타, 인도 시간" echo "7. 아랍에미리트 두바이 시간 8. 호주 시드니 시간" - echo "9. 태국 방콕에서의 시간" + echo "9. 태국 방콕 시간" echo "------------------------" echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" @@ -12948,11 +12989,11 @@ EOF echo "23. 캐나다 시간 24. 멕시코 시간" echo "25. 브라질 시간 26. 아르헨티나 시간" echo "------------------------" - echo "31. UTC 글로벌 표준 시간" + echo "31. UTC 세계 표준시" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -12995,14 +13036,14 @@ EOF 18) root_use - send_stats "호스트 이름을 수정하십시오" + 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 + read -e -p "새 호스트 이름을 입력하십시오(종료하려면 0을 입력하십시오):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine @@ -13028,7 +13069,7 @@ EOF fi echo "호스트 이름이 다음으로 변경되었습니다.$new_hostname" - send_stats "호스트 이름이 변경되었습니다" + send_stats "호스트 이름이 변경됨" sleep 1 else echo "호스트 이름을 변경하지 않고 종료되었습니다." @@ -13042,17 +13083,17 @@ EOF send_stats "시스템 업데이트 소스 변경" clear echo "업데이트 소스 지역 선택" - echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" + echo "LinuxMirrors에 액세스하여 시스템 업데이트 소스 전환" echo "------------------------" echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" choice + read -e -p "선택 항목을 입력하세요." choice case $choice in 1) - send_stats "중국 본토의 기본 소스" + send_stats "중국 본토 기본 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) @@ -13077,29 +13118,29 @@ EOF clear check_crontab_installed clear - echo "시간이 정한 작업 목록" + echo "예약된 작업 목록" crontab -l echo "" echo "작동하다" echo "------------------------" - echo "1. 타이밍 작업 추가 2. 타이밍 작업 삭제 3. 타이밍 작업 편집" + echo "1. 예약된 작업 추가 2. 예약된 작업 삭제 3. 예약된 작업 편집" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) - read -e -p "새 작업에 대한 실행 명령을 입력하십시오." newquest + read -e -p "새 작업의 실행 명령을 입력하십시오:" newquest echo "------------------------" echo "1. 월간 작업 2. 주간 작업" - echo "3. 일일 작업 4. 시간당 작업" + echo "3. 일일 작업 4. 시간별 작업" echo "------------------------" - read -e -p "선택을 입력하십시오 :" dingshi + read -e -p "선택사항을 입력하세요:" dingshi case $dingshi in 1) - read -e -p "작업을 수행하려면 매월 어느 날을 선택합니까? (1-30) :" day + read -e -p "작업을 실행하기로 선택한 달의 날짜는 무엇입니까? (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) @@ -13107,7 +13148,7 @@ EOF (crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1 ;; 3) - read -e -p "매일 작업을 수행 할 시간을 선택하십시오. (시간, 0-23) :" hour + read -e -p "매일 몇 시에 작업을 수행하기로 선택하시나요? (시간, 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) @@ -13123,11 +13164,11 @@ EOF 2) read -e -p "삭제할 작업의 키워드를 입력하세요:" kquest crontab -l | grep -v "$kquest" | crontab - - send_stats "타이밍 작업을 삭제하십시오" + send_stats "예약된 작업 삭제" ;; 3) crontab -e - send_stats "타이밍 작업 편집" + send_stats "예약된 작업 편집" ;; *) break # 跳出循环,退出菜单 @@ -13139,24 +13180,24 @@ EOF 21) root_use - send_stats "지역 호스트 구문 분석" + send_stats "로컬 호스트 확인" while true; do clear echo "기본 호스트 확인 목록" - echo "여기에 구문 분석 일치를 추가하면 더 이상 동적 구문 분석이 사용되지 않습니다." + echo "여기에 파싱 매칭을 추가하면 더 이상 동적 파싱이 사용되지 않습니다." cat /etc/hosts echo "" echo "작동하다" echo "------------------------" echo "1. 새로운 해상도 추가 2. 해상도 주소 삭제" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택사항을 입력하세요:" host_dns case $host_dns in 1) - read -e -p "새 구문 분석 기록 형식을 입력하십시오 : 110.25.5.33 Kejilion.pro :" addhost + read -e -p "새로운 구문 분석 기록 형식을 입력하세요: 110.25.5.33 kejilion.pro:" addhost echo "$addhost" >> /etc/hosts send_stats "로컬 호스트 해상도가 추가되었습니다." @@ -13164,7 +13205,7 @@ EOF 2) read -e -p "삭제해야 하는 구문 분석된 콘텐츠의 키워드를 입력하세요." delhost sed -i "/$delhost/d" /etc/hosts - send_stats "로컬 호스트 구문 분석 및 삭제" + send_stats "로컬 호스트 확인 및 삭제" ;; *) break # 跳出循环,退出菜单 @@ -13180,8 +13221,8 @@ EOF check_f2b_status echo -e "SSH 방어 프로그램$check_f2b_status" - echo "FAIL2BAN은 무자비한 힘을 방지하는 SSH 도구입니다" - echo "공식 웹 사이트 소개 :${gh_proxy}github.com/fail2ban/fail2ban" + echo "fall2ban은 무차별 대입 크래킹을 방지하는 SSH 도구입니다." + echo "공식 웹사이트 소개:${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" echo "1. 방어 프로그램 설치" echo "------------------------" @@ -13190,9 +13231,9 @@ EOF echo "------------------------" echo "9. 방어 프로그램 제거" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in 1) f2b_install_sshd @@ -13230,44 +13271,44 @@ EOF send_stats "전류 제한 차단 기능" while true; do clear - echo "현재 제한 종료 기능" - echo "비디오 소개 : https://www.bilibili.com/video/bv1mc411j7qd?t=0.1" + echo "전류 제한 차단 기능" + echo "영상 소개: https://www.bilibili.com/video/BV1mC411j7Qd?t=0.1" echo "------------------------------------------------" - echo "서버 트래픽 계산을 다시 시작하는 현재 트래픽 사용이 지워집니다!" + echo "서버가 다시 시작되면 현재 트래픽 사용량이 지워집니다!" output_status echo -e "${gl_kjlan}받은 총액:${gl_bai}$rx" - echo -e "${gl_kjlan}총 보내기 :${gl_bai}$tx" + echo -e "${gl_kjlan}보낸 총액:${gl_bai}$tx" # Limiting_Shut_down.sh 파일이 있는지 확인하세요. if [ -f ~/Limiting_Shut_down.sh ]; then - # threshold_gb의 값을 얻으십시오 + # Threshold_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}" + echo -e "${gl_lv}현재 설정된 아웃바운드 트래픽 제한 임계값은 다음과 같습니다.${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}현재 제한 종료 기능이 활성화되어 있지 않습니다.${gl_bai}" + echo -e "${gl_hui}현재 제한 종료 기능이 현재 활성화되어 있지 않습니다.${gl_bai}" fi echo echo "------------------------------------------------" - echo "시스템은 실제 트래픽이 1 분마다 임계 값에 도달하는지 여부를 감지하고 서버가 도착하면 자동으로 종료됩니다!" + echo "시스템은 매분마다 실제 트래픽이 임계값에 도달했는지 여부를 감지하고 임계값에 도달한 후 자동으로 서버를 종료합니다!" echo "------------------------" - echo "1. 현재 한계 셧다운 함수 켜기 2. 현재 한계 종료 함수 비활성화" + echo "1. 전류 제한 종료 기능을 활성화합니다. 2. 전류 제한 종료 기능을 비활성화합니다." echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "선택사항을 입력하세요:" Limiting case "$Limiting" in 1) # 새 가상 메모리 크기 입력 - echo "실제 서버에 트래픽이 100g 인 경우 트래픽 오류 나 오버플로를 피하기 위해 임계 값을 95G로 설정하고 전원을 미리 차단할 수 있습니다." - read -e -p "들어오는 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100G) :" rx_threshold_gb + echo "실제 서버의 트래픽이 100G만 있는 경우 임계값을 95G로 설정하고 미리 종료하여 트래픽 오류나 오버플로를 방지할 수 있습니다." + read -e -p "인바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} - read -e -p "아웃 바운드 트래픽 임계 값을 입력하십시오 (단위 G, 기본값은 100g) :" tx_threshold_gb + read -e -p "아웃바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "트래픽 재설정 날짜를 입력하십시오 (매월 1 일에 기본 재설정) :" cz_day + read -e -p "트래픽 재설정 날짜를 입력하세요(기본적으로 매월 1일 재설정)." cz_day cz_day=${cz_day:-1} cd ~ @@ -13281,7 +13322,7 @@ EOF crontab -l | grep -v 'reboot' | crontab - (crontab -l ; echo "0 1 $cz_day * * reboot") | crontab - > /dev/null 2>&1 echo "전류 제한 종료가 설정되었습니다." - send_stats "전류 제한 종료가 설정되었습니다" + send_stats "전류 제한 종료가 설정되었습니다." ;; 2) check_crontab_installed @@ -13301,15 +13342,15 @@ EOF 24) root_use - send_stats "개인 키 로그인" + send_stats "개인키 로그인" while true; do clear echo "ROOT 개인 키 로그인 모드" - echo "비디오 소개 : https://www.bilibili.com/video/bv1q4421x78n?t=209.4" + echo "영상 소개: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" echo "------------------------------------------------" echo "SSH를 통해 더욱 안전하게 로그인할 수 있는 키 쌍이 생성됩니다." echo "------------------------" - echo "1. 새 키 생성 2. 기존 키 가져 오기 3. 기본 키보기" + echo "1. 새 키 생성 2. 기존 키 가져오기 3. 로컬 키 보기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13317,7 +13358,7 @@ EOF case $host_dns in 1) - send_stats "새로운 키를 생성하십시오" + send_stats "새 키 생성" add_sshkey break_end @@ -13350,18 +13391,18 @@ EOF 25) root_use - send_stats "전보 경고" + send_stats "전신 경고" echo "TG-bot 모니터링 및 조기경보 기능" echo "영상소개: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" echo "로컬 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인에 대한 실시간 모니터링 및 경고를 달성하려면 경고를 수신하도록 tg 로봇 API 및 사용자 ID를 구성해야 합니다." - echo "임계 값에 도달하면 사용자가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽과 관련하여 서버를 다시 시작하면 다시 계산됩니다.${gl_bai}" - read -e -p "계속할거야? (Y/N) :" choice + echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." + echo -e "${gl_hui}- 트래픽에 관해서는 서버를 다시 시작하면 다시 계산됩니다 -${gl_bai}" + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) - send_stats "전보 경고가 활성화되었습니다" + send_stats "텔레그램 경고 활성화됨" cd ~ install nano tmux bc jq check_crontab_installed @@ -13383,7 +13424,7 @@ EOF sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh chmod +x ~/TG-SSH-check-notify.sh - # ~/.profile 파일에 추가하십시오 + # ~/.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 @@ -13395,13 +13436,13 @@ EOF clear echo "TG-bot 조기경보 시스템이 활성화되었습니다." - echo -e "${gl_hui}다른 시스템의 루트 디렉토리에 TG-Check-Notify.sh 경고 파일을 배치하고 직접 사용할 수도 있습니다!${gl_bai}" + echo -e "${gl_hui}TG-check-notify.sh 경고 파일을 다른 컴퓨터의 루트 디렉터리에 넣고 직접 사용할 수도 있습니다!${gl_bai}" ;; [Nn]) echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -13452,7 +13493,7 @@ EOF ;; 37) clear - send_stats "명령 줄 기록" + 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; } @@ -13484,27 +13525,27 @@ EOF 66) root_use - send_stats "원 스톱 튜닝" + send_stats "원스톱 튜닝" echo "원스톱 시스템 튜닝" 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 "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 "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. Linux 시스템에서 커널 매개 변수 최적화로 전환하십시오${gl_huang}균형 최적화 모드${gl_bai}" + echo -e "10. Linux 시스템 커널 매개변수 최적화가 다음으로 전환됩니다.${gl_huang}균형 잡힌 최적화 모드${gl_bai}" echo "------------------------------------------------" read -e -p "원클릭 유지 관리를 원하시나요? (예/아니요):" choice case "$choice" in [Yy]) clear - send_stats "원 스톱 튜닝 시작" + send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하세요" @@ -13515,18 +13556,18 @@ EOF echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. 가상 메모리를 설정합니다${gl_huang}1G${gl_bai}" + 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 -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 -e "[${gl_lv}OK${gl_bai}] 6/10. 열려 있는${gl_huang}BBR${gl_bai}가속하다" echo "------------------------------------------------" set_timedate Asia/Shanghai @@ -13552,20 +13593,20 @@ EOF 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 -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. Linux 시스템의 커널 매개 변수 최적화" - echo -e "${gl_lv}원 스톱 시스템 튜닝이 완료되었습니다${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 10/10. Linux 시스템 커널 매개변수 최적화" + echo -e "${gl_lv}원스톱 시스템 튜닝이 완료되었습니다${gl_bai}" ;; [Nn]) echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac @@ -13591,7 +13632,7 @@ EOF echo "개인 정보 보호 및 보안" echo "스크립트는 사용자의 기능 사용에 대한 데이터를 수집하고 스크립트 경험을 최적화하며 더 재미 있고 유용한 기능을 만듭니다." - echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용 된 기능의 이름을 수집합니다." + echo "스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 사용된 기능 이름이 수집됩니다." echo "------------------------------------------------" echo -e "현재 상태:$status_message" echo "--------------------" @@ -13614,7 +13655,7 @@ EOF 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 "개인 정보 보호 및 보안이 컬렉션을 위해 마감되었습니다" + send_stats "개인정보 보호 및 보안 수집이 사용 중지되었습니다." ;; *) break @@ -13630,11 +13671,11 @@ EOF 102) clear - send_stats "기술 라이온 스크립트를 제거하십시오" + send_stats "기술 사자 스크립트 제거" echo "기술 사자 스크립트 제거" echo "------------------------------------------------" echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." - read -e -p "계속할거야? (Y/N) :" choice + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13651,7 +13692,7 @@ EOF echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -13661,7 +13702,7 @@ EOF ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -13689,41 +13730,41 @@ linux_file() { echo "------------------------" ls --color=auto -x echo "------------------------" - echo "1. 디렉토리를 입력합니다. 2. 디렉토리 만들기 3. 디렉토리 권한 수정 4. 디렉토리 이름 바꾸기" - echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 돌아갑니다." + echo "1. 디렉터리 입력 2. 디렉터리 생성 3. 디렉터리 권한 수정 4. 디렉터리 이름 바꾸기" + echo "5. 디렉토리 삭제 6. 이전 메뉴 디렉토리로 복귀" echo "------------------------" echo "11. 파일 생성 12. 파일 편집 13. 파일 권한 수정 14. 파일 이름 바꾸기" - echo "15. 파일을 삭제하십시오" + echo "15. 파일 삭제" echo "------------------------" - echo "21. 파일 디렉토리 압축 22. zip 파일 디렉토리 23. 파일 디렉토리 이동 24. 파일 디렉토리 복사" - echo "25. 파일을 다른 서버로 전달합니다" + echo "21. 파일 디렉터리 압축 22. 파일 디렉터리 압축 풀기 23. 파일 디렉터리 이동 24. 파일 디렉터리 복사" + echo "25. 다른 서버로 파일 전송" echo "------------------------" - echo "0. 이전 메뉴로 돌아갑니다" + echo "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" Limiting + read -e -p "선택사항을 입력하세요:" Limiting case "$Limiting" in 1) # 进入目录 - read -e -p "디렉토리 이름을 입력하십시오 :" dirname - cd "$dirname" 2>/dev/null || echo "디렉토리에 입력 할 수 없습니다" - send_stats "디렉토리로 이동하십시오" + read -e -p "디렉토리 이름을 입력하십시오:" dirname + cd "$dirname" 2>/dev/null || echo "디렉토리에 들어갈 수 없습니다" + send_stats "디렉토리 입력" ;; 2) # 创建目录 - read -e -p "작성하려면 디렉토리 이름을 입력하십시오." dirname + read -e -p "생성할 디렉터리 이름을 입력하세요." dirname mkdir -p "$dirname" && echo "디렉터리가 생성되었습니다." || echo "생성 실패" - send_stats "디렉토리를 만듭니다" + send_stats "디렉터리 생성" ;; 3) # 修改目录权限 read -e -p "디렉토리 이름을 입력하십시오:" dirname read -e -p "권한을 입력하세요(예: 755):" perm - chmod "$perm" "$dirname" && echo "권한이 수정되었습니다." || echo "수정이 실패했습니다" - send_stats "디렉토리 권한을 수정하십시오" + 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 "디렉토리의 이름을 바꿉니다" + read -e -p "현재 디렉터리 이름을 입력하세요." current_name + read -e -p "새 디렉터리 이름을 입력하세요." new_name + mv "$current_name" "$new_name" && echo "디렉터리 이름이 변경되었습니다." || echo "이름 바꾸기 실패" + send_stats "디렉터리 이름 바꾸기" ;; 5) # 删除目录 read -e -p "삭제할 디렉터리 이름을 입력하세요:" dirname @@ -13732,46 +13773,46 @@ linux_file() { ;; 6) # 返回上一级选单目录 cd .. - send_stats "이전 메뉴 디렉토리로 돌아갑니다" + send_stats "이전 메뉴 디렉토리로 돌아가기" ;; 11) # 创建文件 - read -e -p "작성하려면 파일 이름을 입력하십시오." filename - touch "$filename" && echo "생성 된 파일" || echo "생성 실패" + read -e -p "생성할 파일 이름을 입력하세요:" filename + touch "$filename" && echo "파일이 생성되었습니다." || echo "생성 실패" send_stats "파일 생성" ;; 12) # 编辑文件 - read -e -p "편집 할 파일 이름을 입력하십시오." filename + read -e -p "편집할 파일 이름을 입력하십시오:" filename install nano nano "$filename" send_stats "파일 편집" ;; 13) # 修改文件权限 - read -e -p "파일 이름을 입력하십시오 :" filename - read -e -p "권한을 입력하십시오 (예 : 755) :" perm + read -e -p "파일 이름을 입력하세요:" filename + read -e -p "권한을 입력하세요(예: 755):" perm chmod "$perm" "$filename" && echo "권한이 수정되었습니다." || echo "수정 실패" - send_stats "파일 권한을 수정하십시오" + send_stats "파일 권한 수정" ;; 14) # 重命名文件 read -e -p "현재 파일 이름을 입력하십시오:" current_name read -e -p "새 파일 이름을 입력하세요:" new_name - mv "$current_name" "$new_name" && echo "파일 이름이 변경되었습니다." || echo "이름 바꾸지 실패했습니다" - send_stats "파일의 이름을 바꿉니다" + mv "$current_name" "$new_name" && echo "파일 이름이 변경되었습니다." || echo "이름 바꾸기 실패" + send_stats "파일 이름 바꾸기" ;; 15) # 删除文件 - read -e -p "삭제하려면 파일 이름을 입력하십시오." filename - rm -f "$filename" && echo "파일이 삭제되었습니다" || echo "삭제 실패" + 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 "압축 파일/디렉토리" + tar -czvf "$name.tar.gz" "$name" && echo "압축$name.tar.gz" || echo "압축 실패" + send_stats "압축된 파일/디렉토리" ;; 22) # 解压文件/目录 - read -e -p "추출할 파일 이름(.tar.gz)을 입력하십시오:" filename + read -e -p "추출할 파일 이름(.tar.gz)을 입력하십시오." filename install tar - tar -xzvf "$filename" && echo "압축이 풀렸습니다.$filename" || echo "감압이 실패했습니다" + tar -xzvf "$filename" && echo "압축이 풀렸습니다.$filename" || echo "압축 해제 실패" send_stats "파일/디렉토리 압축 풀기" ;; @@ -13779,14 +13820,14 @@ linux_file() { read -e -p "이동할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉토리를 이동하지 못했습니다 : 파일 또는 디렉토리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리 이동 실패: 파일 또는 디렉터리가 존재하지 않습니다." continue fi read -e -p "대상 경로(새 파일 또는 디렉터리 이름 포함)를 입력하세요." dest_path if [ -z "$dest_path" ]; then echo "오류: 대상 경로를 입력하십시오." - send_stats "움직이는 파일 또는 디렉토리 실패 : 대상 경로가 지정되지 않았습니다." + send_stats "파일 또는 디렉터리 이동 실패: 대상 경로가 지정되지 않았습니다." continue fi @@ -13799,35 +13840,35 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." continue fi read -e -p "대상 경로(새 파일 또는 디렉터리 이름 포함)를 입력하세요." dest_path if [ -z "$dest_path" ]; then - echo "오류 : 대상 경로를 입력하십시오." + echo "오류: 대상 경로를 입력하십시오." send_stats "파일 또는 디렉터리 복사 실패: 대상 경로가 지정되지 않았습니다." continue fi # 디렉토리를 반복적으로 복사하려면 -r 옵션을 사용하십시오. - cp -r "$src_path" "$dest_path" && echo "복사된 파일 또는 디렉터리$dest_path" || echo "파일이나 디렉토리를 복사하지 못했습니다" - send_stats "파일 또는 디렉토리를 복사하십시오" + 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 "오류 : 파일이 존재하지 않습니다." + echo "오류: 파일이 존재하지 않습니다." send_stats "파일 전송 실패: 파일이 존재하지 않습니다." continue fi - read -e -p "원격 서버 IP를 입력하십시오 :" remote_ip + read -e -p "원격 서버 IP를 입력하세요:" remote_ip if [ -z "$remote_ip" ]; then echo "오류: 원격 서버 IP를 입력하세요." - send_stats "파일 전송 실패 : 원격 서버 IP가 입력되지 않았습니다" + send_stats "파일 전송 실패: 원격 서버 IP가 입력되지 않았습니다." continue fi @@ -13842,23 +13883,23 @@ linux_file() { continue fi - read -e -p "로그인 포트 (기본값 22)를 입력하십시오 :" remote_port + 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를 사용하여 파일 전송 scp -P "$remote_port" -o StrictHostKeyChecking=no "$file_to_transfer" "$remote_user@$remote_ip:/home/" < /dev/null 2>&1 - echo -e "${gl_lv}스크립트는 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" + echo -e "${gl_lv}스크립트가 최신 버전으로 업데이트되었습니다!${gl_huang}v$sh_v_new${gl_bai}" send_stats "스크립트가 최신 상태입니다.$sh_v_new" break_end ~/kejilion.sh @@ -14164,7 +14205,7 @@ while true; do 3) clear (crontab -l | grep -v "kejilion.sh") | crontab - - echo -e "${gl_lv}자동 업데이트가 닫힙니다${gl_bai}" + echo -e "${gl_lv}자동 업데이트가 꺼졌습니다${gl_bai}" send_stats "자동 스크립트 업데이트 끄기" break_end ;; @@ -14188,7 +14229,7 @@ echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" echo -e "기술 사자 스크립트 도구 상자 v$sh_v" -echo -e "명령 줄 입력${gl_huang}k${gl_kjlan}빠른 시작 스크립트${gl_bai}" +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}시스템 업데이트" @@ -14199,9 +14240,9 @@ 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_huang}10. ${gl_bai}LDNMP 웹사이트 구축" echo -e "${gl_kjlan}11. ${gl_bai}응용 시장" -echo -e "${gl_kjlan}12. ${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}광고 칼럼" @@ -14212,7 +14253,7 @@ 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 +read -e -p "선택사항을 입력하세요:" choice case $choice in 1) linux_info ;; @@ -14232,13 +14273,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Phantom Beast Palu 서버 오프닝 스크립트" ; cd ~ + p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; 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 "잘못된 입력!" ;; + *) echo "입력이 잘못되었습니다!" ;; esac break_end done @@ -14246,13 +14287,13 @@ done k_info() { -send_stats "K 명령 참조 사용 사례" +send_stats "k 명령 참조 사용 사례" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." -echo "스크립트 시작 k" -echo "소프트웨어 패키지 설치 K 설치 나노 wget | K 추가 나노 wget | K Nano wget을 설치하십시오" -echo "패키지 k 제거 나노 wget | K del nano wget | k 제거 나노 wget | K를 제거하십시오" +echo "시작 스크립트 k" +echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 nano wget을 설치합니다." +echo "패키지 제거 k 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" echo "시스템 k 업데이트 업데이트 | k 업데이트" echo "클린 시스템 정크 k 클린 | 케이 깨끗하다" echo "시스템 패널을 다시 설치하십시오. k dd | k 다시 설치하다" @@ -14263,10 +14304,10 @@ echo "가상 시간대 설정 k 시간 아시아/상하이 | k 시간대 아시 echo "시스템 휴지통 k 쓰레기 | khsz | k 휴지통" echo "시스템 백업 기능 k 백업 | k bf | k 백업" echo "SSH 원격 연결 도구 k SSH | k 원격 연결" -echo "rsync 원격 동기화 도구 K rsync | K 원격 동기화" -echo "하드 디스크 관리 도구 K 디스크 | K 하드 디스크 관리" -echo "인트라넷 침투 (서버 측) K frps" -echo "인트라넷 침투 (클라이언트) K frpc" +echo "rsync 원격 동기화 도구 k rsync | k 원격 동기화" +echo "하드 디스크 관리 도구 k 디스크 | k 하드 디스크 관리" +echo "인트라넷 침투(서버) k frps" +echo "인트라넷 침투(클라이언트) k frpc" echo "소프트웨어 시작 k start sshd | k sshd를 시작하세요" echo "소프트웨어 중지 k 중지 sshd | k sshd 중지" echo "소프트웨어 재시작 k 재시작 sshd | k sshd를 다시 시작하세요" @@ -14274,24 +14315,24 @@ echo "소프트웨어 상태 확인 k status sshd | k 상태 sshd" echo "k 도커 활성화 | k 자동 시작 도커 | k 소프트웨어를 부팅할 때 도커를 활성화합니다." echo "도메인 이름 인증서 신청 k SSL" echo "도메인 이름 인증서 만료 쿼리 k SSL ps" -echo "Docker Management Plane K Docker" -echo "도커 환경 설치 K 도커 설치 | K 도커 설치" +echo "도커 관리 플레인 k 도커" +echo "docker 환경 설치 k docker 설치 |k docker 설치" echo "도커 컨테이너 관리 k 도커 ps |k 도커 컨테이너" -echo "Docker Image Management K Docker img | K Docker Image" -echo "LDNMP 사이트 관리 K 웹" +echo "도커 이미지 관리 k docker img |k 도커 이미지" +echo "LDNMP 사이트 관리 k web" echo "LDNMP 캐시 정리 k 웹 캐시" echo "WordPress k wp 설치 | k 워드프레스 | k wp xxx.com" -echo "리버스 프록시 k fd | k rp | k an-generation | k fd xxx.com을 설치하십시오." +echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" -echo "방화벽 패널 K FHQ | K 방화벽" +echo "방화벽 패널 k fhq |k 방화벽" echo "포트 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 "블록 IP K ZZIP 177.5.25.36 | K 블록 IP 177.5.25.36" -echo "명령 즐겨 찾기 k fav | K 명령 즐겨 찾기" -echo "앱 시장 관리 K 앱" +echo "k 포트 닫기 gbdk 7800 |k 포트 7800 닫기" +echo "릴리스 IP k fxip 127.0.0.0/8 |k 릴리스 IP 127.0.0.0/8" +echo "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" +echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" +echo "애플리케이션 시장 관리 k app" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" -echo "디스플레이 시스템 정보 K 정보" +echo "시스템 정보 표시 k 정보" } @@ -14300,11 +14341,11 @@ if [ "$#" -eq 0 ]; then # 인수 없이 대화형 논리를 실행합니다. kejilion_sh else - # 매개 변수가있는 경우 해당 함수를 실행하십시오 + # 매개변수가 있으면 해당 함수를 실행합니다. case $1 in install|add|安装) shift - send_stats "소프트웨어를 설치하십시오" + send_stats "소프트웨어 설치" install "$@" ;; remove|del|uninstall|卸载) @@ -14381,7 +14422,7 @@ else time|时区) shift - send_stats "시간대를 빠르게 설정하십시오" + send_stats "시간대를 빠르게 설정" set_timedate "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 56f7acff1..24eec9078 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.8" +sh_v="4.1.9" gl_hui='\e[37m' @@ -3372,11 +3372,11 @@ ldnmp_web_status() { echo "" echo "操作" echo "------------------------" - echo "1. 申請/更新域名證書 2. 更換站點域名" + echo "1. 申請/更新域名證書 2. 克隆站點域名" echo "3. 清理站點緩存 4. 創建關聯站點" echo "5. 查看訪問日誌 6. 查看錯誤日誌" echo "7. 編輯全局配置 8. 編輯站點配置" - echo "9. 管理站點數據庫 10. 查看站點分析報告" + echo "9. 管理站點數據庫 10. 查看站點分析報告" echo "------------------------" echo "20. 刪除指定站點數據" echo "------------------------" @@ -3395,8 +3395,7 @@ ldnmp_web_status() { ;; 2) - send_stats "更換站點域名" - echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站數據再更換站點域名!" + send_stats "克隆站點域名" read -e -p "請輸入舊域名:" oddyuming read -e -p "請輸入新域名:" yuming install_certbot @@ -3410,7 +3409,7 @@ ldnmp_web_status() { 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;" + # 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 }') @@ -3422,18 +3421,18 @@ ldnmp_web_status() { done # 網站目錄替換 - mv /home/web/html/$oddyuming /home/web/html/$yuming + cp -r /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 + cp /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 + # rm /home/web/certs/${oddyuming}_key.pem + # rm /home/web/certs/${oddyuming}_cert.pem - docker exec nginx nginx -s reload + cd /home/web && docker compose restart ;; @@ -8874,6 +8873,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機${gl_kjlan}100. ${color100}Syncthing點對點文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具${gl_kjlan}102. ${color102}VoceChat多人在線聊天系統" + echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -12165,6 +12165,47 @@ while true; do ;; + 103|umami) + local app_id="103" + local app_name="Umami网站统计工具" + local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" + local app_url="官方网站: https://github.com/umami-software/umami" + local docker_name="umami-umami-1" + local docker_port="8103" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml + + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + echo "初始用戶名: admin" + echo "初始密碼: umami" + } + + docker_app_update() { + cd /home/docker/umami/ && docker compose down --rmi all + cd /home/docker/umami/ + git pull origin main + sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml + cd /home/docker/umami/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/umami/ && docker compose down --rmi all + rm -rf /home/docker/umami + echo "應用已卸載" + } + + docker_app_plus + + ;; + + b) clear From 47c95e5bb030878e479def24d2f80c23227d22de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:56:07 +0800 Subject: [PATCH 275/553] Update kejilion.sh --- cn/kejilion.sh | 51 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 76e3736cf..8c6b24610 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" - echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具" + echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}VNC驱动的安卓模拟器(x86_64架构)" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml @@ -12205,6 +12205,53 @@ while true; do ;; + 104|android) + + local app_id="104" + local docker_name="android-container" + local docker_img="budtmo/docker-android:emulator_11.0" + local docker_port=8104 + + docker_rum() { + + read -e -p "设置访问密码: " app_passwd + + docker run -d \ + --name android-container \ + --restart=always \ + -p ${docker_port}:6080 \ + -e EMULATOR_DEVICE="Samsung Galaxy S10" \ + -e WEB_VNC=true \ + -e VNC_PASSWORD="${app_passwd}" \ + -v /home/docker/android:/home/androidusr \ + --device /dev/kvm \ + budtmo/docker-android:emulator_11.0 + + docker volume create android_data + docker run -d \ + --name android-container \ + --restart=always \ + -p 6080:6080 \ + -e EMULATOR_DEVICE="Samsung Galaxy S10" \ + -e WEB_VNC=true \ + -e VNC_PASSWORD="mypassword123" \ + -v android_data:/home/androidusr \ + --device /dev/kvm \ + budtmo/docker-android:emulator_11.0 + + + + + } + + local docker_describe="是一个基于 Docker 容器的 Android 模拟器环境" + local docker_url="官网介绍: https://github.com/budtmo/docker-android" + local docker_use="" + local docker_passwd="" + local app_size="3" + docker_app + + ;; b) From d0b6a2fa69cba88bacca0a2605838e33789da1ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:58:12 +0800 Subject: [PATCH 276/553] Update kejilion.sh --- cn/kejilion.sh | 51 ++------------------------------------------------ 1 file changed, 2 insertions(+), 49 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8c6b24610..76e3736cf 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8873,7 +8873,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" - echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}VNC驱动的安卓模拟器(x86_64架构)" + echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl wget + install git openssl mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml @@ -12205,53 +12205,6 @@ while true; do ;; - 104|android) - - local app_id="104" - local docker_name="android-container" - local docker_img="budtmo/docker-android:emulator_11.0" - local docker_port=8104 - - docker_rum() { - - read -e -p "设置访问密码: " app_passwd - - docker run -d \ - --name android-container \ - --restart=always \ - -p ${docker_port}:6080 \ - -e EMULATOR_DEVICE="Samsung Galaxy S10" \ - -e WEB_VNC=true \ - -e VNC_PASSWORD="${app_passwd}" \ - -v /home/docker/android:/home/androidusr \ - --device /dev/kvm \ - budtmo/docker-android:emulator_11.0 - - docker volume create android_data - docker run -d \ - --name android-container \ - --restart=always \ - -p 6080:6080 \ - -e EMULATOR_DEVICE="Samsung Galaxy S10" \ - -e WEB_VNC=true \ - -e VNC_PASSWORD="mypassword123" \ - -v android_data:/home/androidusr \ - --device /dev/kvm \ - budtmo/docker-android:emulator_11.0 - - - - - } - - local docker_describe="是一个基于 Docker 容器的 Android 模拟器环境" - local docker_url="官网介绍: https://github.com/budtmo/docker-android" - local docker_use="" - local docker_passwd="" - local app_size="3" - docker_app - - ;; b) From 598a7a89dfe5ac07c95312b6271e71a4d3fae35f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 16 Oct 2025 11:58:59 +0800 Subject: [PATCH 277/553] Update kejilion.sh From 98496d17dd3de2dfca69777ca17dc97400da6106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 16 Oct 2025 12:01:29 +0800 Subject: [PATCH 278/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 4b835c421..3d4cfb38a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml From 1a36345cea8bdaa675372cfcb0b010ae07270980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 16 Oct 2025 12:02:04 +0800 Subject: [PATCH 279/553] Add wget installation to docker_app_install function --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 76e3736cf..bbeee49ef 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml From 1228e0dce5a358e9c916b21581c9efc17d5d8e9a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 19 Oct 2025 03:57:26 +0000 Subject: [PATCH 280/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-19=2003:57:26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 14 +++++++------- jp/kejilion.sh | 38 +++++++++++++++++++------------------- kr/kejilion.sh | 28 ++++++++++++++-------------- tw/kejilion.sh | 2 +- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 305b75111..d1698edd1 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -6118,7 +6118,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard disk partition management" + echo "Hard drive partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -9155,7 +9155,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal service$check_docker $update_status" + echo -e "postal services$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml @@ -12556,7 +12556,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by python!" + echo "This function can seamlessly install any version officially supported by Python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -14102,7 +14102,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" +echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14177,7 +14177,7 @@ while true; do CheckFirstRun_true yinsiyuanquan2 cp -f ~/kejilion.sh /usr/local/bin/k > /dev/null 2>&1 - echo -e "${gl_lv}The script has been updated to the latest version!${gl_huang}v$sh_v_new${gl_bai}" + echo -e "${gl_lv}脚本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" send_stats "The script is up to date$sh_v_new" break_end ~/kejilion.sh @@ -14287,7 +14287,7 @@ done k_info() { -send_stats "k command reference use case" +send_stats "k command reference examples" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "The following is a reference use case for the k command:" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 146f811f2..29fbbd273 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -890,7 +890,7 @@ open_port() { 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" + echo "ポートがオープンしました$port" fi done @@ -1218,7 +1218,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -2114,7 +2114,7 @@ web_security() { send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" - echo "CF パラメータを取得します。" + echo "CFパラメータを取得します。" echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" @@ -4341,7 +4341,7 @@ while true; do 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 "3. DNS 構成を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -5785,7 +5785,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6006,7 +6006,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6097,7 +6097,7 @@ format_partition() { fi } -# パーティションのステータスを確認する +# 检查分区状态 check_partition() { send_stats "パーティションのステータスを確認する" read -e -p "確認するパーティション名を入力してください (例: sda1):" PARTITION @@ -6109,7 +6109,7 @@ check_partition() { fi # パーティションのステータスを確認する - echo "パーティション /dev/ を確認してください$PARTITION状態:" + echo "检查分区 /dev/$PARTITION状態:" fsck "/dev/$PARTITION" } @@ -6137,7 +6137,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6424,7 +6424,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -8814,7 +8814,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -8822,7 +8822,7 @@ while true; do echo -e "${gl_kjlan}13. ${color13}Cloudreve ネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルなピクチャーベッド画像管理プログラム" echo -e "${gl_kjlan}15. ${color15}emby マルチメディア管理システム${gl_kjlan}16. ${color16}Speedtest スピードテストパネル" echo -e "${gl_kjlan}17. ${color17}AdGuardHome はアドウェアを削除します${gl_kjlan}18. ${color18}Onlyofficeオンラインオフィス OFFICE" - echo -e "${gl_kjlan}19. ${color19}Leichi WAF ファイアウォール パネル${gl_kjlan}20. ${color20}portainer容器管理面板" + echo -e "${gl_kjlan}19. ${color19}Leichi WAF ファイアウォール パネル${gl_kjlan}20. ${color20}ポーターコンテナ管理パネル" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VScode Web バージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" echo -e "${gl_kjlan}23. ${color23}メモウェブメモ${gl_kjlan}24. ${color24}Webtop リモート デスクトップ Web バージョン${gl_huang}★${gl_bai}" @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml @@ -11846,7 +11846,7 @@ while true; do read -e -p "ネットワーク内のクライアントの数を入力してください (デフォルトは 5):" COUNT COUNT=${COUNT:-5} - read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0):" NETWORK + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0)。" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -12748,8 +12748,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -12977,7 +12977,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13844,7 +13844,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14287,7 +14287,7 @@ done k_info() { -send_stats "k コマンドリファレンスの使用例" +send_stats "k コマンドのリファレンス例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 88d94db65..36d551dbe 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -2672,7 +2672,7 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -2872,7 +2872,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -6870,7 +6870,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 중...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업할 컨테이너의 이름을 입력하십시오(여러 개의 공백을 구분하고 Enter를 눌러 실행 중인 모든 컨테이너를 백업하십시오)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers install tar jq gzip install_docker @@ -7298,7 +7298,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -8814,7 +8814,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9075,7 +9075,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "네자 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9155,7 +9155,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우정$check_docker $update_status" + echo -e "우편 서비스$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9187,7 +9187,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml @@ -12412,7 +12412,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12492,7 +12492,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -12748,8 +12748,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -14287,7 +14287,7 @@ done k_info() { -send_stats "k 명령 참조 사용 사례" +send_stats "k 명령 참조 예" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 24eec9078..ac3dbbf37 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -11384,7 +11384,7 @@ while true; do local app_size="3" docker_app_install() { - install git openssl + install git openssl wget mkdir -p /home/docker/${docker_name} && cd /home/docker/${docker_name} wget -O docker-compose.yml ${gh_proxy}github.com/immich-app/immich/releases/latest/download/docker-compose.yml From 386e681c5c353374c1a66f7b2eb987dbdd969fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:33:56 +0800 Subject: [PATCH 281/553] Update kejilion.sh --- kejilion.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 3d4cfb38a..f6d2d88ef 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -10497,7 +10497,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -10536,7 +10536,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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' \ @@ -10653,7 +10653,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12109,7 +12109,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12176,7 +12176,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d From 66cc110032c1a62adf98b14609df9eeeabb2bfb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:34:42 +0800 Subject: [PATCH 282/553] Update git clone URLs to use HTTPS --- cn/kejilion.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index bbeee49ef..8e390fe64 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -10497,7 +10497,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -10536,7 +10536,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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' \ @@ -10653,7 +10653,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12109,7 +12109,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12176,7 +12176,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d From 2782176e5816d229226bc9ca950bd47a6fa5870e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:37:47 +0800 Subject: [PATCH 283/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index d24b25ed2..35443ef0e 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1324,5 +1324,6 @@ k快捷命令增加了 k info 系统信息快速查询。 2025-10-09 v4.1.9 LDNMP建站中将更换站点域名功能调整成克隆站点功能,这样可以保留老站点,让用户自己处决。 应用市场新增了Umami网站统计工具的安装及使用。 +应用市场优化了部分应用因网络原因无法安装的问题。 ------------------------ From 64108524983f5c74d321d32cbc1128eba51931d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:40:41 +0800 Subject: [PATCH 284/553] Update kejilion.sh --- kejilion.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index f6d2d88ef..e1f51f22a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1335,11 +1335,9 @@ ldnmp_v() { 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 + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.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 From 10e290fcc5446eea8d1e987fb0c08ce5632cc20d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:41:59 +0800 Subject: [PATCH 285/553] Update kejilion.sh --- cn/kejilion.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8e390fe64..e1f51f22a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="CN" +canshu="default" permission_granted="false" ENABLE_STATS="true" @@ -1335,11 +1335,9 @@ ldnmp_v() { 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 + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.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 From cc3b77ac0b10c824020b86a5f14a2e73aa249684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:42:22 +0800 Subject: [PATCH 286/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e1f51f22a..c8b5d374f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12,7 +12,7 @@ gl_zi='\033[35m' gl_kjlan='\033[96m' -canshu="default" +canshu="CN" permission_granted="false" ENABLE_STATS="true" From 0b538d35d70440a17a6edaaa1e65bb45e880e1e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:50:26 +0800 Subject: [PATCH 287/553] Update kejilion.sh --- cn/kejilion.sh | 245 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 223 insertions(+), 22 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index c8b5d374f..c7e5e46b5 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.9" +sh_v="4.2.0" gl_hui='\e[37m' @@ -1353,31 +1353,34 @@ install_ldnmp_conf() { } +update_docker_compose_with_db_creds() { + cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + if ! grep -q "stream" /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 -install_ldnmp() { + 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:]') - check_swap + 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 - cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + 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 - if ! grep -q "network_mode" /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 +install_ldnmp() { - 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 + check_swap + update_docker_compose_with_db_creds cd /home/web && docker compose up -d sleep 1 @@ -3275,8 +3278,6 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" - yuming="${1:-}" - reverseproxy_port="${2:-}" send_stats "安装$webname" echo "开始部署 $webname" @@ -3314,6 +3315,194 @@ ldnmp_Proxy_backend() { + + + +list_stream_services() { + + STREAM_DIR="/home/web/stream.d" + printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + + if [ -z "$(ls -A "$STREAM_DIR")" ]; then + return + fi + + for conf in "$STREAM_DIR"/*; do + # 服务名取文件名 + service_name=$(basename "$conf" .conf) + + # 获取 upstream 块中的 server 后端 IP:端口 + backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) + + # 获取 listen 端口 + listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) + + # 默认本地 IP + ip_address + local_ip="$ipv4_address" + + # 获取通信类型,优先从文件名后缀或内容判断 + if grep -qi 'udp;' "$conf"; then + proto="udp" + else + proto="tcp" + fi + + # 拼接监听 IP:端口 + local_addr="$local_ip:$listen_port" + + printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" + done +} + + + + + + + + + +stream_panel() { + send_stats "Stream四层代理" + local app_id="104" + local docker_name="nginx" + + while true; do + clear + check_docker_app + check_docker_image_update $docker_name + echo -e "Stream四层代理转发工具 $check_docker $update_status" + echo "NGINX Stream 是 NGINX 的 TCP/UDP 代理模块,用于实现高性能的 传输层流量转发和负载均衡。" + echo "------------------------" + if [ -d "/home/web/stream.d" ]; then + list_stream_services + fi + echo "" + echo "------------------------" + echo "1. 安装 2. 更新 3. 卸载" + echo "------------------------" + echo "4. 添加转发服务 5. 修改转发服务 6. 删除转发服务" + echo "------------------------" + echo "0. 返回上一级选单" + echo "------------------------" + read -e -p "输入你的选择: " choice + case $choice in + 1) + nginx_install_status + add_app_id + ;; + 2) + update_docker_compose_with_db_creds + nginx_upgrade + add_app_id + ;; + 3) + read -e -p "确定要删除 nginx 容器吗?这可能会影响网站功能!(y/N): " confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + docker rm -f nginx + echo "nginx 容器已删除。" + else + echo "操作已取消。" + fi + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + ;; + + 4) + ldnmp_Proxy_backend_stream + add_app_id + ;; + 5) + send_stats "编辑转发配置" + read -e -p "请输入你要编辑的服务名: " stream_name + install nano + nano /home/web/stream.d/$stream_name.conf + docker restart nginx + ;; + 6) + send_stats "删除转发配置" + read -e -p "请输入你要删除的服务名: " stream_name + rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 + docker restart nginx + ;; + *) + break + ;; + esac + break_end + done +} + + + +ldnmp_Proxy_backend_stream() { + clear + webname="Stream四层代理-负载均衡" + + send_stats "安装$webname" + echo "开始部署 $webname" + + # 获取代理名称 + read -rp "请输入代理转发名称 (如 mysql_proxy): " proxy_name + if [ -z "$proxy_name" ]; then + echo "名称不能为空"; return 1 + fi + + # 获取监听端口 + read -rp "请输入本机监听端口 (如 3306): " listen_port + if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then + echo "端口必须是数字"; return 1 + fi + + echo "请选择协议类型:" + echo "1. TCP 2. UDP" + read -rp "请输入序号 [1-2]: " proto_choice + + case "$proto_choice" in + 1) proto="tcp"; listen_suffix="" ;; + 2) proto="udp"; listen_suffix=" udp" ;; + *) echo "无效选择"; return 1 ;; + esac + + read -e -p "请输入你的一个或者多个后端IP+端口用空格隔开(例如 10.13.0.2:3306 10.13.0.3:3306): " reverseproxy_port + + nginx_install_status + + cd /home && mkdir -p web/stream.d + grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf + wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf + + backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) + sed -i "s/backend_yuming_com/${proxy_name}_${backend}/g" /home/web/stream.d/"$proxy_name".conf + sed -i "s|listen 80|listen $listen_port $listen_suffix|g" /home/web/stream.d/$proxy_name.conf + sed -i "s|listen \[::\]:|listen [::]:${listen_port} ${listen_suffix}|g" "/home/web/stream.d/${proxy_name}.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/stream.d/$proxy_name.conf + + docker exec nginx nginx -s reload + clear + echo "您的 $webname 搭建好了!" + echo "------------------------" + echo "访问地址:" + ip_address + if [ -n "$ipv4_address" ]; then + echo "$ipv4_address:${listen_port}" + fi + if [ -n "$ipv6_address" ]; then + echo "$ipv6_address:${listen_port}" + fi + echo "" +} + + + + + find_container_by_host_port() { port="$1" docker_name=$(docker ps --format '{{.ID}} {{.Names}}' | while read id name; do @@ -7845,7 +8034,7 @@ linux_ldnmp() { echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}29. ${gl_bai}Stream四层代理转发 ${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}还原全站数据" @@ -8425,6 +8614,10 @@ linux_ldnmp() { ;; + 29) + stream_panel + ;; + 30) clear webname="静态站点" @@ -8871,7 +9064,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" - echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具" + echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12203,7 +12396,9 @@ while true; do ;; - + 104|stream) + stream_panel + ;; b) clear @@ -14322,6 +14517,7 @@ echo "LDNMP缓存清理 k web cache" echo "安装WordPress k wp |k wordpress |k wp xxx.com" echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "安装L4负载均衡 k stream |k L4负载均衡" echo "防火墙面板 k fhq |k 防火墙" echo "开放端口 k dkdk 8080 |k 打开端口 8080" echo "关闭端口 k gbdk 7800 |k 关闭端口 7800" @@ -14412,6 +14608,11 @@ else ldnmp_Proxy_backend ;; + + stream|L4负载均衡) + ldnmp_Proxy_backend_stream + ;; + swap) shift send_stats "快速设置虚拟内存" From b1258bda4dfa313bea6f502c4ccd96041eece633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:50:59 +0800 Subject: [PATCH 288/553] Update kejilion.sh --- kejilion.sh | 245 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 223 insertions(+), 22 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index e1f51f22a..76cfb8b41 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.9" +sh_v="4.2.0" gl_hui='\e[37m' @@ -1353,31 +1353,34 @@ install_ldnmp_conf() { } +update_docker_compose_with_db_creds() { + cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + if ! grep -q "stream" /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 -install_ldnmp() { + 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:]') - check_swap + 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 - cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + 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 - if ! grep -q "network_mode" /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 +install_ldnmp() { - 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 + check_swap + update_docker_compose_with_db_creds cd /home/web && docker compose up -d sleep 1 @@ -3275,8 +3278,6 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" - yuming="${1:-}" - reverseproxy_port="${2:-}" send_stats "安装$webname" echo "开始部署 $webname" @@ -3314,6 +3315,194 @@ ldnmp_Proxy_backend() { + + + +list_stream_services() { + + STREAM_DIR="/home/web/stream.d" + printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + + if [ -z "$(ls -A "$STREAM_DIR")" ]; then + return + fi + + for conf in "$STREAM_DIR"/*; do + # 服务名取文件名 + service_name=$(basename "$conf" .conf) + + # 获取 upstream 块中的 server 后端 IP:端口 + backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) + + # 获取 listen 端口 + listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) + + # 默认本地 IP + ip_address + local_ip="$ipv4_address" + + # 获取通信类型,优先从文件名后缀或内容判断 + if grep -qi 'udp;' "$conf"; then + proto="udp" + else + proto="tcp" + fi + + # 拼接监听 IP:端口 + local_addr="$local_ip:$listen_port" + + printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" + done +} + + + + + + + + + +stream_panel() { + send_stats "Stream四层代理" + local app_id="104" + local docker_name="nginx" + + while true; do + clear + check_docker_app + check_docker_image_update $docker_name + echo -e "Stream四层代理转发工具 $check_docker $update_status" + echo "NGINX Stream 是 NGINX 的 TCP/UDP 代理模块,用于实现高性能的 传输层流量转发和负载均衡。" + echo "------------------------" + if [ -d "/home/web/stream.d" ]; then + list_stream_services + fi + echo "" + echo "------------------------" + echo "1. 安装 2. 更新 3. 卸载" + echo "------------------------" + echo "4. 添加转发服务 5. 修改转发服务 6. 删除转发服务" + echo "------------------------" + echo "0. 返回上一级选单" + echo "------------------------" + read -e -p "输入你的选择: " choice + case $choice in + 1) + nginx_install_status + add_app_id + ;; + 2) + update_docker_compose_with_db_creds + nginx_upgrade + add_app_id + ;; + 3) + read -e -p "确定要删除 nginx 容器吗?这可能会影响网站功能!(y/N): " confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + docker rm -f nginx + echo "nginx 容器已删除。" + else + echo "操作已取消。" + fi + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + ;; + + 4) + ldnmp_Proxy_backend_stream + add_app_id + ;; + 5) + send_stats "编辑转发配置" + read -e -p "请输入你要编辑的服务名: " stream_name + install nano + nano /home/web/stream.d/$stream_name.conf + docker restart nginx + ;; + 6) + send_stats "删除转发配置" + read -e -p "请输入你要删除的服务名: " stream_name + rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 + docker restart nginx + ;; + *) + break + ;; + esac + break_end + done +} + + + +ldnmp_Proxy_backend_stream() { + clear + webname="Stream四层代理-负载均衡" + + send_stats "安装$webname" + echo "开始部署 $webname" + + # 获取代理名称 + read -rp "请输入代理转发名称 (如 mysql_proxy): " proxy_name + if [ -z "$proxy_name" ]; then + echo "名称不能为空"; return 1 + fi + + # 获取监听端口 + read -rp "请输入本机监听端口 (如 3306): " listen_port + if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then + echo "端口必须是数字"; return 1 + fi + + echo "请选择协议类型:" + echo "1. TCP 2. UDP" + read -rp "请输入序号 [1-2]: " proto_choice + + case "$proto_choice" in + 1) proto="tcp"; listen_suffix="" ;; + 2) proto="udp"; listen_suffix=" udp" ;; + *) echo "无效选择"; return 1 ;; + esac + + read -e -p "请输入你的一个或者多个后端IP+端口用空格隔开(例如 10.13.0.2:3306 10.13.0.3:3306): " reverseproxy_port + + nginx_install_status + + cd /home && mkdir -p web/stream.d + grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf + wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf + + backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) + sed -i "s/backend_yuming_com/${proxy_name}_${backend}/g" /home/web/stream.d/"$proxy_name".conf + sed -i "s|listen 80|listen $listen_port $listen_suffix|g" /home/web/stream.d/$proxy_name.conf + sed -i "s|listen \[::\]:|listen [::]:${listen_port} ${listen_suffix}|g" "/home/web/stream.d/${proxy_name}.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/stream.d/$proxy_name.conf + + docker exec nginx nginx -s reload + clear + echo "您的 $webname 搭建好了!" + echo "------------------------" + echo "访问地址:" + ip_address + if [ -n "$ipv4_address" ]; then + echo "$ipv4_address:${listen_port}" + fi + if [ -n "$ipv6_address" ]; then + echo "$ipv6_address:${listen_port}" + fi + echo "" +} + + + + + find_container_by_host_port() { port="$1" docker_name=$(docker ps --format '{{.ID}} {{.Names}}' | while read id name; do @@ -7845,7 +8034,7 @@ linux_ldnmp() { echo -e "${gl_huang}23. ${gl_bai}站点反向代理-IP+端口 ${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站点反向代理-域名" echo -e "${gl_huang}25. ${gl_bai}安装Bitwarden密码管理平台 ${gl_huang}26. ${gl_bai}安装Halo博客网站" echo -e "${gl_huang}27. ${gl_bai}安装AI绘画提示词生成器 ${gl_huang}28. ${gl_bai}站点反向代理-负载均衡" - echo -e "${gl_huang}30. ${gl_bai}自定义静态站点" + echo -e "${gl_huang}29. ${gl_bai}Stream四层代理转发 ${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}还原全站数据" @@ -8425,6 +8614,10 @@ linux_ldnmp() { ;; + 29) + stream_panel + ;; + 30) clear webname="静态站点" @@ -8871,7 +9064,7 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" - echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具" + echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12203,7 +12396,9 @@ while true; do ;; - + 104|stream) + stream_panel + ;; b) clear @@ -14322,6 +14517,7 @@ echo "LDNMP缓存清理 k web cache" echo "安装WordPress k wp |k wordpress |k wp xxx.com" echo "安装反向代理 k fd |k rp |k 反代 |k fd xxx.com" echo "安装负载均衡 k loadbalance |k 负载均衡" +echo "安装L4负载均衡 k stream |k L4负载均衡" echo "防火墙面板 k fhq |k 防火墙" echo "开放端口 k dkdk 8080 |k 打开端口 8080" echo "关闭端口 k gbdk 7800 |k 关闭端口 7800" @@ -14412,6 +14608,11 @@ else ldnmp_Proxy_backend ;; + + stream|L4负载均衡) + ldnmp_Proxy_backend_stream + ;; + swap) shift send_stats "快速设置虚拟内存" From e36b977ed00138356335e279d98b0a23817f712d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:53:34 +0800 Subject: [PATCH 289/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 35443ef0e..a0373922c 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1326,4 +1326,7 @@ LDNMP建站中将更换站点域名功能调整成克隆站点功能,这样可 应用市场新增了Umami网站统计工具的安装及使用。 应用市场优化了部分应用因网络原因无法安装的问题。 ------------------------ +2025-10-21 v4.2.0 +LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 +------------------------ From 369b8142f150768bd95f7cd3069796581753b503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 21 Oct 2025 16:41:25 +0800 Subject: [PATCH 290/553] Update kejilion.sh --- cn/kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index c7e5e46b5..20493cf01 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3467,7 +3467,6 @@ ldnmp_Proxy_backend_stream() { read -e -p "请输入你的一个或者多个后端IP+端口用空格隔开(例如 10.13.0.2:3306 10.13.0.3:3306): " reverseproxy_port nginx_install_status - cd /home && mkdir -p web/stream.d grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf @@ -12396,7 +12395,7 @@ while true; do ;; - 104|stream) + 104|nginx-stream) stream_panel ;; From 6009c87655278d9d8666a9f6793d9bea8b631e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 21 Oct 2025 16:42:19 +0800 Subject: [PATCH 291/553] Update kejilion.sh --- kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 76cfb8b41..febb040ed 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3467,7 +3467,6 @@ ldnmp_Proxy_backend_stream() { read -e -p "请输入你的一个或者多个后端IP+端口用空格隔开(例如 10.13.0.2:3306 10.13.0.3:3306): " reverseproxy_port nginx_install_status - cd /home && mkdir -p web/stream.d grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf @@ -12396,7 +12395,7 @@ while true; do ;; - 104|stream) + 104|nginx-stream) stream_panel ;; From 89237d6438cc2f1c95a3d91391e137fdd571a8a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:31:17 +0800 Subject: [PATCH 292/553] Update kejilion.sh --- cn/kejilion.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 20493cf01..251135024 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9064,6 +9064,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" + echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12399,6 +12400,69 @@ while true; do stream_panel ;; + + 105|siyuan) + + local app_id="105" + local docker_name="siyuan" + local docker_img="b3log/siyuan" + local docker_port=8105 + + docker_rum() { + + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name siyuan \ + --restart=always \ + -v /home/docker/siyuan/workspace:/siyuan/workspace \ + -p ${docker_port}:6806 \ + -e PUID=1001 \ + -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode="${app_passwd}" + + } + + local docker_describe="思源笔记是一款隐私优先的知识管理系统" + local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 106|drawnix) + + local app_id="105" + local docker_name="drawnix" + local docker_img="pubuzhixing/drawnix" + local docker_port=8106 + + docker_rum() { + + docker run -d \ + --restart=always \ + --name drawnix \ + -p ${docker_port}:80 \ + pubuzhixing/drawnix + + } + + local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" + local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + b) clear send_stats "全部应用备份" From 4d51ace7d5756338c68015f3ca2866422992336a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:31:56 +0800 Subject: [PATCH 293/553] Add Siyuan and Drawnix applications to script --- kejilion.sh | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index febb040ed..a7d56f673 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9064,6 +9064,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" + echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12399,6 +12400,69 @@ while true; do stream_panel ;; + + 105|siyuan) + + local app_id="105" + local docker_name="siyuan" + local docker_img="b3log/siyuan" + local docker_port=8105 + + docker_rum() { + + read -e -p "设置登录密码: " app_passwd + + docker run -d \ + --name siyuan \ + --restart=always \ + -v /home/docker/siyuan/workspace:/siyuan/workspace \ + -p ${docker_port}:6806 \ + -e PUID=1001 \ + -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode="${app_passwd}" + + } + + local docker_describe="思源笔记是一款隐私优先的知识管理系统" + local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 106|drawnix) + + local app_id="105" + local docker_name="drawnix" + local docker_img="pubuzhixing/drawnix" + local docker_port=8106 + + docker_rum() { + + docker run -d \ + --restart=always \ + --name drawnix \ + -p ${docker_port}:80 \ + pubuzhixing/drawnix + + } + + local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" + local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + b) clear send_stats "全部应用备份" From 001a9b6c1e8dd183dce9c1aa1ca46e35bd142229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:34:00 +0800 Subject: [PATCH 294/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index a0373922c..68d56497d 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1328,5 +1328,7 @@ LDNMP建站中将更换站点域名功能调整成克隆站点功能,这样可 ------------------------ 2025-10-21 v4.2.0 LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 +应用市场新增了思源笔记的安装及使用。 +应用市场新增了开源Drawnix白板工具的安装及使用。 ------------------------ From 6e03e4cd65a3a573125f5efe457f2f3072e4958d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 23 Oct 2025 10:50:52 +0800 Subject: [PATCH 295/553] Update kejilion.sh --- cn/kejilion.sh | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 251135024..9d260faf6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9065,6 +9065,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" + echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12437,7 +12438,7 @@ while true; do 106|drawnix) - local app_id="105" + local app_id="106" local docker_name="drawnix" local docker_img="pubuzhixing/drawnix" local docker_port=8106 @@ -12462,6 +12463,37 @@ while true; do ;; + 106|drawnix) + + local app_id="107" + local docker_name="pansou" + local docker_img="ghcr.io/fish2018/pansou-web" + local docker_port=8107 + + docker_rum() { + + docker run -d \ + --name pansou \ + --restart=always \ + -p ${docker_port}:80 \ + -v /home/docker/pansou/data:/app/data \ + -v /home/docker/pansou/logs:/app/logs \ + -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + ghcr.io/fish2018/pansou-web + + } + + local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" + local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + b) clear From f6892e1ef1b259df2090737965c76afc004d7011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 23 Oct 2025 10:51:25 +0800 Subject: [PATCH 296/553] Add PanSou cloud storage search tool --- kejilion.sh | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index a7d56f673..d7c5bfab3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9065,6 +9065,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" + echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12437,7 +12438,7 @@ while true; do 106|drawnix) - local app_id="105" + local app_id="106" local docker_name="drawnix" local docker_img="pubuzhixing/drawnix" local docker_port=8106 @@ -12462,6 +12463,37 @@ while true; do ;; + 106|drawnix) + + local app_id="107" + local docker_name="pansou" + local docker_img="ghcr.io/fish2018/pansou-web" + local docker_port=8107 + + docker_rum() { + + docker run -d \ + --name pansou \ + --restart=always \ + -p ${docker_port}:80 \ + -v /home/docker/pansou/data:/app/data \ + -v /home/docker/pansou/logs:/app/logs \ + -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + ghcr.io/fish2018/pansou-web + + } + + local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" + local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + b) clear From 0b0cfab71d99b9ca39c0782a9f361d6a9a2d98ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 23 Oct 2025 10:52:58 +0800 Subject: [PATCH 297/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 68d56497d..61e1e6a00 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1330,5 +1330,6 @@ LDNMP建站中将更换站点域名功能调整成克隆站点功能,这样可 LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 应用市场新增了思源笔记的安装及使用。 应用市场新增了开源Drawnix白板工具的安装及使用。 +应用市场新增了PanSou网盘搜索工具的安装及使用。 ------------------------ From 63d7a5d5d7d00df5873d91ea62174cf7bf6dc734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 23 Oct 2025 10:55:53 +0800 Subject: [PATCH 298/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index d7c5bfab3..1231b02fe 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12463,7 +12463,7 @@ while true; do ;; - 106|drawnix) + 107|pansou) local app_id="107" local docker_name="pansou" From 459eefe9c71a8e49a70604bd0109359707d3f424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 23 Oct 2025 10:56:32 +0800 Subject: [PATCH 299/553] Rename drawnix to pansou in kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9d260faf6..d4039a24b 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12463,7 +12463,7 @@ while true; do ;; - 106|drawnix) + 107|pansou) local app_id="107" local docker_name="pansou" From 380b39da3acaab57d041345c4c46f847e3c01321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:56:59 +0800 Subject: [PATCH 300/553] Update kejilion.sh --- cn/kejilion.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index d4039a24b..111b30b72 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -216,6 +216,8 @@ check_disk_space() { local required_gb=$1 local path=${2:-/} + mkdir -p "$path" + local required_space_mb=$((required_gb * 1024)) local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') @@ -3391,26 +3393,31 @@ stream_panel() { 1) nginx_install_status add_app_id + send_stats "安装Stream四层代理" ;; 2) update_docker_compose_with_db_creds nginx_upgrade add_app_id + send_stats "更新Stream四层代理" ;; 3) read -e -p "确定要删除 nginx 容器吗?这可能会影响网站功能!(y/N): " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then docker rm -f nginx + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + send_stats "更新Stream四层代理" echo "nginx 容器已删除。" else echo "操作已取消。" fi - sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + ;; 4) ldnmp_Proxy_backend_stream add_app_id + send_stats "添加四层代理" ;; 5) send_stats "编辑转发配置" @@ -3418,12 +3425,14 @@ stream_panel() { install nano nano /home/web/stream.d/$stream_name.conf docker restart nginx + send_stats "修改四层代理" ;; 6) send_stats "删除转发配置" read -e -p "请输入你要删除的服务名: " stream_name rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 docker restart nginx + send_stats "删除四层代理" ;; *) break From 777d00357f0727540061667c522f47361b6d133d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:57:35 +0800 Subject: [PATCH 301/553] Add send_stats calls for various operations --- kejilion.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 1231b02fe..f21db5585 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -216,6 +216,8 @@ check_disk_space() { local required_gb=$1 local path=${2:-/} + mkdir -p "$path" + local required_space_mb=$((required_gb * 1024)) local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') @@ -3391,26 +3393,31 @@ stream_panel() { 1) nginx_install_status add_app_id + send_stats "安装Stream四层代理" ;; 2) update_docker_compose_with_db_creds nginx_upgrade add_app_id + send_stats "更新Stream四层代理" ;; 3) read -e -p "确定要删除 nginx 容器吗?这可能会影响网站功能!(y/N): " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then docker rm -f nginx + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + send_stats "更新Stream四层代理" echo "nginx 容器已删除。" else echo "操作已取消。" fi - sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + ;; 4) ldnmp_Proxy_backend_stream add_app_id + send_stats "添加四层代理" ;; 5) send_stats "编辑转发配置" @@ -3418,12 +3425,14 @@ stream_panel() { install nano nano /home/web/stream.d/$stream_name.conf docker restart nginx + send_stats "修改四层代理" ;; 6) send_stats "删除转发配置" read -e -p "请输入你要删除的服务名: " stream_name rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 docker restart nginx + send_stats "删除四层代理" ;; *) break From f0f4247fd61ba7819eb4f6bbeb4b4f36de8bb59a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 24 Oct 2025 11:34:39 +0000 Subject: [PATCH 302/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-24=2011:34:39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 379 ++++++++++++++++++++++++++++++++++---- jp/kejilion.sh | 485 +++++++++++++++++++++++++++++++++++++++---------- kr/kejilion.sh | 407 +++++++++++++++++++++++++++++++++++------ tw/kejilion.sh | 361 +++++++++++++++++++++++++++++++++--- 4 files changed, 1422 insertions(+), 210 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index d1698edd1..767701c6f 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.9" +sh_v="4.2.0" gl_hui='\e[37m' @@ -216,6 +216,8 @@ check_disk_space() { local required_gb=$1 local path=${2:-/} + mkdir -p "$path" + local required_space_mb=$((required_gb * 1024)) local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') @@ -913,7 +915,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add shutdown rule + # Add a shutdown rule 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 @@ -1335,11 +1337,9 @@ ldnmp_v() { install_ldnmp_conf() { # Create necessary directories and files - cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/redis web/log/nginx && touch web/docker-compose.yml + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.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 @@ -1355,31 +1355,34 @@ install_ldnmp_conf() { } +update_docker_compose_with_db_creds() { + cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + if ! grep -q "stream" /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 -install_ldnmp() { + 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:]') - check_swap + 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 - cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + 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 - if ! grep -q "network_mode" /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 +install_ldnmp() { - 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 + check_swap + update_docker_compose_with_db_creds cd /home/web && docker compose up -d sleep 1 @@ -3277,8 +3280,6 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" - yuming="${1:-}" - reverseproxy_port="${2:-}" send_stats "Install$webname" echo "Start deployment$webname" @@ -3316,6 +3317,200 @@ ldnmp_Proxy_backend() { + + + +list_stream_services() { + + STREAM_DIR="/home/web/stream.d" + printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + + if [ -z "$(ls -A "$STREAM_DIR")" ]; then + return + fi + + for conf in "$STREAM_DIR"/*; do + # Service name takes file name + service_name=$(basename "$conf" .conf) + + # Get the server backend IP:port in the upstream block + backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) + + # Get listen port + listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) + + # Default local IP + ip_address + local_ip="$ipv4_address" + + # Get the communication type, first judging from the file name suffix or content + if grep -qi 'udp;' "$conf"; then + proto="udp" + else + proto="tcp" + fi + + # Splice listening IP:port + local_addr="$local_ip:$listen_port" + + printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" + done +} + + + + + + + + + +stream_panel() { + send_stats "Stream four-layer proxy" + local app_id="104" + local docker_name="nginx" + + while true; do + clear + check_docker_app + check_docker_image_update $docker_name + echo -e "Stream four-layer proxy forwarding tool$check_docker $update_status" + echo "NGINX Stream is the TCP/UDP proxy module of NGINX, which is used to achieve high-performance transport layer traffic forwarding and load balancing." + echo "------------------------" + if [ -d "/home/web/stream.d" ]; then + list_stream_services + fi + echo "" + echo "------------------------" + echo "1. Install 2. Update 3. Uninstall" + echo "------------------------" + echo "4. Add forwarding service 5. Modify forwarding service 6. Delete forwarding service" + echo "------------------------" + echo "0. Return to the previous menu" + echo "------------------------" + read -e -p "Enter your selection:" choice + case $choice in + 1) + nginx_install_status + add_app_id + send_stats "Install Stream four-layer agent" + ;; + 2) + update_docker_compose_with_db_creds + nginx_upgrade + add_app_id + send_stats "Update Stream four-layer proxy" + ;; + 3) + read -e -p "Are you sure you want to delete the nginx container? This may affect website functionality! (y/N):" confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + docker rm -f nginx + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + send_stats "Update Stream four-layer proxy" + echo "nginx container has been deleted." + else + echo "The operation has been cancelled." + fi + + ;; + + 4) + ldnmp_Proxy_backend_stream + add_app_id + send_stats "Add layer 4 proxy" + ;; + 5) + send_stats "Edit forwarding configuration" + read -e -p "Please enter the service name you want to edit:" stream_name + install nano + nano /home/web/stream.d/$stream_name.conf + docker restart nginx + send_stats "Modify layer 4 proxy" + ;; + 6) + send_stats "Delete forwarding configuration" + read -e -p "Please enter the service name you want to delete:" stream_name + rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 + docker restart nginx + send_stats "Delete layer 4 proxy" + ;; + *) + break + ;; + esac + break_end + done +} + + + +ldnmp_Proxy_backend_stream() { + clear + webname="Stream四层代理-负载均衡" + + send_stats "Install$webname" + echo "Start deployment$webname" + + # Get agent name + read -rp "Please enter a proxy forwarding name (e.g. mysql_proxy):" proxy_name + if [ -z "$proxy_name" ]; then + echo "Name cannot be empty"; return 1 + fi + + # Get listening port + read -rp "Please enter the local listening port (such as 3306):" listen_port + if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then + echo "Port must be numeric"; return 1 + fi + + echo "Please select agreement type:" + echo "1. TCP 2. UDP" + read -rp "Please enter the serial number [1-2]:" proto_choice + + case "$proto_choice" in + 1) proto="tcp"; listen_suffix="" ;; + 2) proto="udp"; listen_suffix=" udp" ;; + *) echo "Invalid selection"; return 1 ;; + esac + + read -e -p "Please enter one or more of your backend IP+ports separated by spaces (for example, 10.13.0.2:3306 10.13.0.3:3306):" reverseproxy_port + + nginx_install_status + cd /home && mkdir -p web/stream.d + grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf + wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf + + backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) + sed -i "s/backend_yuming_com/${proxy_name}_${backend}/g" /home/web/stream.d/"$proxy_name".conf + sed -i "s|listen 80|listen $listen_port $listen_suffix|g" /home/web/stream.d/$proxy_name.conf + sed -i "s|listen \[::\]:|listen [::]:${listen_port} ${listen_suffix}|g" "/home/web/stream.d/${proxy_name}.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/stream.d/$proxy_name.conf + + docker exec nginx nginx -s reload + clear + echo "your$webnameIt's built!" + echo "------------------------" + echo "Visit address:" + ip_address + if [ -n "$ipv4_address" ]; then + echo "$ipv4_address:${listen_port}" + fi + if [ -n "$ipv6_address" ]; then + echo "$ipv6_address:${listen_port}" + fi + echo "" +} + + + + + find_container_by_host_port() { port="$1" docker_name=$(docker ps --format '{{.ID}} {{.Names}}' | while read id name; do @@ -4502,14 +4697,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion } @@ -6950,7 +7145,7 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # mirror + # Mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -7847,7 +8042,7 @@ linux_ldnmp() { echo -e "${gl_huang}23. ${gl_bai}Site reverse proxy-IP+port${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}Site reverse proxy-domain name" echo -e "${gl_huang}25. ${gl_bai}Install Bitwarden Password Management Platform${gl_huang}26. ${gl_bai}Install Halo Blog Site" echo -e "${gl_huang}27. ${gl_bai}Install the AI ​​painting prompt word generator${gl_huang}28. ${gl_bai}Site reverse proxy-load balancing" - echo -e "${gl_huang}30. ${gl_bai}Custom static site" + echo -e "${gl_huang}29. ${gl_bai}Stream four-layer proxy forwarding${gl_huang}30. ${gl_bai}Custom static site" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up site-wide data" echo -e "${gl_huang}33. ${gl_bai}Scheduled remote backup${gl_huang}34. ${gl_bai}Restore whole site data" @@ -8427,6 +8622,10 @@ linux_ldnmp() { ;; + 29) + stream_panel + ;; + 30) clear webname="静态站点" @@ -8814,7 +9013,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -8873,7 +9072,9 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing peer-to-peer file synchronization tool" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multi-person online chat system" - echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool" + echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool${gl_kjlan}104. ${color104}Stream four-layer proxy forwarding tool" + echo -e "${gl_kjlan}105. ${color105}Siyuan Notes${gl_kjlan}106. ${color106}Drawnix open source whiteboard tool" + echo -e "${gl_kjlan}107. ${color107}PanSou network disk search" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" @@ -9155,7 +9356,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal services$check_docker $update_status" + echo -e "postal service$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -10497,7 +10698,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -10536,7 +10737,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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' \ @@ -10653,7 +10854,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12109,7 +12310,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12176,7 +12377,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12205,6 +12406,102 @@ while true; do ;; + 104|nginx-stream) + stream_panel + ;; + + + 105|siyuan) + + local app_id="105" + local docker_name="siyuan" + local docker_img="b3log/siyuan" + local docker_port=8105 + + docker_rum() { + + read -e -p "Set login password:" app_passwd + + docker run -d \ + --name siyuan \ + --restart=always \ + -v /home/docker/siyuan/workspace:/siyuan/workspace \ + -p ${docker_port}:6806 \ + -e PUID=1001 \ + -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode="${app_passwd}" + + } + + local docker_describe="思源笔记是一款隐私优先的知识管理系统" + local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 106|drawnix) + + local app_id="106" + local docker_name="drawnix" + local docker_img="pubuzhixing/drawnix" + local docker_port=8106 + + docker_rum() { + + docker run -d \ + --restart=always \ + --name drawnix \ + -p ${docker_port}:80 \ + pubuzhixing/drawnix + + } + + local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" + local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 107|pansou) + + local app_id="107" + local docker_name="pansou" + local docker_img="ghcr.io/fish2018/pansou-web" + local docker_port=8107 + + docker_rum() { + + docker run -d \ + --name pansou \ + --restart=always \ + -p ${docker_port}:80 \ + -v /home/docker/pansou/data:/app/data \ + -v /home/docker/pansou/logs:/app/logs \ + -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + ghcr.io/fish2018/pansou-web + + } + + local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" + local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) @@ -12310,7 +12607,7 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" + echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" @@ -12556,7 +12853,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by Python!" + echo "This function can seamlessly install any version officially supported by python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -14177,7 +14474,7 @@ while true; do 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}" + echo -e "${gl_lv}The script has been updated to the latest version!${gl_huang}v$sh_v_new${gl_bai}" send_stats "The script is up to date$sh_v_new" break_end ~/kejilion.sh @@ -14324,6 +14621,7 @@ echo "LDNMP cache cleaning k web cache" echo "Install WordPress k wp | k wordpress | k wp xxx.com" echo "Install reverse proxy k fd |k rp |k reverse proxy |k fd xxx.com" echo "Install load balancing k loadbalance |k load balancing" +echo "Install L4 load balancing k stream |k L4 load balancing" echo "firewall panel k fhq |k firewall" echo "open port k dkdk 8080 |k open port 8080" echo "Close port k gbdk 7800 |k Close port 7800" @@ -14414,6 +14712,11 @@ else ldnmp_Proxy_backend ;; + + stream|L4负载均衡) + ldnmp_Proxy_backend_stream + ;; + swap) shift send_stats "Quickly set up virtual memory" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 29fbbd273..a9559b67b 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.9" +sh_v="4.2.0" gl_hui='\e[37m' @@ -116,7 +116,7 @@ UserLicenseAgreement() { clear echo -e "${gl_kjlan}テクノロジー ライオン スクリプト ツールボックスへようこそ${gl_bai}" echo "初めてスクリプトを使用する場合は、ユーザー使用許諾契約を読み、同意してください。" - echo "ユーザー使用許諾契約書: https://blog.kejilion.pro/user-license-agreement/" + echo "ユーザー使用許諾契約: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "上記の条件に同意しますか? (y/n):" user_input @@ -216,6 +216,8 @@ check_disk_space() { local required_gb=$1 local path=${2:-/} + mkdir -p "$path" + local required_space_mb=$((required_gb * 1024)) local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') @@ -243,7 +245,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストールする$package...${gl_bai}" + 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 @@ -895,7 +897,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -953,12 +955,12 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリース済みIP$ip" + echo "リリースされたIP$ip" fi done save_iptables_rules - send_stats "リリース済みIP" + send_stats "リリースされたIP" } block_ip() { @@ -1218,7 +1220,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -1335,11 +1337,9 @@ ldnmp_v() { 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 + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.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 @@ -1355,31 +1355,34 @@ install_ldnmp_conf() { } +update_docker_compose_with_db_creds() { + cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + if ! grep -q "stream" /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 -install_ldnmp() { + 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:]') - check_swap + 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 - cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + 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 - if ! grep -q "network_mode" /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 +install_ldnmp() { - 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 + check_swap + update_docker_compose_with_db_creds cd /home/web && docker compose up -d sleep 1 @@ -1523,7 +1526,7 @@ certs_status() { else send_stats "ドメイン名証明書の申請に失敗しました" echo -e "${gl_hong}知らせ:${gl_bai}証明書の申請に失敗しました。次の考えられる理由を確認して、再試行してください。" - echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" + echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているか確認してください" echo -e "2. DNS 解決の問題 ➠ ドメイン名がサーバー IP に正しく解決されていることを確認します。" echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" @@ -1865,7 +1868,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる: コメントを追加 + # ブロトリを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1996,7 +1999,7 @@ web_security() { echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. インターセプトパラメータを設定します。 12. ブロックされた IP をすべてクリアします。" echo "------------------------" echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" @@ -2111,11 +2114,11 @@ web_security() { ;; 22) - send_stats "高負荷により5秒シールドが可能" + send_stats "高負荷で5秒シールド可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" - echo "CFパラメータを取得します。" - echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" + echo "CF パラメータを取得します。" + echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側にある API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -2231,7 +2234,7 @@ web_optimization() { send_stats "LDNMP環境の最適化" echo -e "LDNMP環境の最適化${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" + echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" echo "------------------------" echo "3. gzip 圧縮をオンにする 4. gzip 圧縮をオフにする" echo "5. br 圧縮をオンにする 6. br 圧縮をオフにする" @@ -2439,7 +2442,7 @@ check_docker_image_update() { # 公式画像のサポートを追加 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIからイメージのリリース時刻を取得する + # 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) @@ -2487,7 +2490,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8を確認して許可します。 + # ローカルネットワーク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 @@ -2504,7 +2507,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8を確認して許可します。 + # ローカルネットワーク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 @@ -2759,7 +2762,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2872,7 +2875,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3277,8 +3280,6 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" - yuming="${1:-}" - reverseproxy_port="${2:-}" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -3316,6 +3317,200 @@ ldnmp_Proxy_backend() { + + + +list_stream_services() { + + STREAM_DIR="/home/web/stream.d" + printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + + if [ -z "$(ls -A "$STREAM_DIR")" ]; then + return + fi + + for conf in "$STREAM_DIR"/*; do + # サービス名がファイル名になります + service_name=$(basename "$conf" .conf) + + # 上流ブロックでサーバーのバックエンド IP:ポートを取得します。 + backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) + + # リッスンポートの取得 + listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) + + # デフォルトのローカルIP + ip_address + local_ip="$ipv4_address" + + # ファイル名の接尾辞または内容から最初に判断して通信タイプを取得します + if grep -qi 'udp;' "$conf"; then + proto="udp" + else + proto="tcp" + fi + + # スプライス リスニング IP:ポート + local_addr="$local_ip:$listen_port" + + printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" + done +} + + + + + + + + + +stream_panel() { + send_stats "ストリーム 4 層プロキシ" + local app_id="104" + local docker_name="nginx" + + while true; do + clear + check_docker_app + check_docker_image_update $docker_name + echo -e "ストリーム 4 層プロキシ転送ツール$check_docker $update_status" + echo "NGINX Stream は NGINX の TCP/UDP プロキシ モジュールであり、高性能のトランスポート層トラフィック転送とロード バランシングを実現するために使用されます。" + echo "------------------------" + if [ -d "/home/web/stream.d" ]; then + list_stream_services + fi + echo "" + echo "------------------------" + echo "1. インストール 2. アップデート 3. アンインストール" + echo "------------------------" + echo "4. 転送サービスの追加 5. 転送サービスの変更 6. 転送サービスの削除" + echo "------------------------" + echo "0. 前のメニューに戻る" + echo "------------------------" + read -e -p "選択内容を入力してください:" choice + case $choice in + 1) + nginx_install_status + add_app_id + send_stats "Stream 4 層エージェントのインストール" + ;; + 2) + update_docker_compose_with_db_creds + nginx_upgrade + add_app_id + send_stats "ストリームの 4 層プロキシを更新します" + ;; + 3) + read -e -p "nginx コンテナを削除してもよろしいですか?これはウェブサイトの機能に影響を与える可能性があります。 (y/N):" confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + docker rm -f nginx + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + send_stats "ストリームの 4 層プロキシを更新します" + echo "nginxコンテナは削除されました。" + else + echo "操作はキャンセルされました。" + fi + + ;; + + 4) + ldnmp_Proxy_backend_stream + add_app_id + send_stats "レイヤ 4 プロキシを追加する" + ;; + 5) + send_stats "転送設定を編集する" + read -e -p "編集するサービス名を入力してください:" stream_name + install nano + nano /home/web/stream.d/$stream_name.conf + docker restart nginx + send_stats "レイヤ 4 プロキシを変更する" + ;; + 6) + send_stats "転送設定の削除" + read -e -p "削除するサービス名を入力してください:" stream_name + rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 + docker restart nginx + send_stats "レイヤ 4 プロキシを削除する" + ;; + *) + break + ;; + esac + break_end + done +} + + + +ldnmp_Proxy_backend_stream() { + clear + webname="Stream四层代理-负载均衡" + + send_stats "インストール$webname" + echo "導入を開始する$webname" + + # エージェント名を取得する + read -rp "プロキシ転送名を入力してください (例: mysql_proxy):" proxy_name + if [ -z "$proxy_name" ]; then + echo "名前を空にすることはできません"; return 1 + fi + + # リスニングポートの取得 + read -rp "ローカルのリスニング ポート (3306 など) を入力してください。" listen_port + if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then + echo "ポートは数値である必要があります"; return 1 + fi + + echo "契約の種類を選択してください:" + echo "1. TCP 2. UDP" + read -rp "シリアル番号を入力してください [1-2]:" proto_choice + + case "$proto_choice" in + 1) proto="tcp"; listen_suffix="" ;; + 2) proto="udp"; listen_suffix=" udp" ;; + *) echo "無効な選択"; return 1 ;; + esac + + read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306)。" reverseproxy_port + + nginx_install_status + cd /home && mkdir -p web/stream.d + grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf + wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf + + backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) + sed -i "s/backend_yuming_com/${proxy_name}_${backend}/g" /home/web/stream.d/"$proxy_name".conf + sed -i "s|listen 80|listen $listen_port $listen_suffix|g" /home/web/stream.d/$proxy_name.conf + sed -i "s|listen \[::\]:|listen [::]:${listen_port} ${listen_suffix}|g" "/home/web/stream.d/${proxy_name}.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/stream.d/$proxy_name.conf + + docker exec nginx nginx -s reload + clear + echo "あなたの$webname建てられました!" + echo "------------------------" + echo "訪問先住所:" + ip_address + if [ -n "$ipv4_address" ]; then + echo "$ipv4_address:${listen_port}" + fi + if [ -n "$ipv6_address" ]; then + echo "$ipv6_address:${listen_port}" + fi + echo "" +} + + + + + find_container_by_host_port() { port="$1" docker_name=$(docker ps --format '{{.ID}} {{.Names}}' | while read id name; do @@ -3476,7 +3671,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3928,7 +4123,7 @@ frps_panel() { 8) send_stats "IPアクセスをブロックする" - echo "ドメイン名アクセスを逆にしている場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全になります。" + echo "ドメイン名アクセスを反転している場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全です。" read -e -p "ブロックするポートを入力してください:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4341,7 +4536,7 @@ while true; do 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 "3. DNS 設定を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4502,14 +4697,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには、root ユーザーが必要です。" && break_end && kejilion } @@ -5055,7 +5250,7 @@ elrepo() { echo "ビデオ紹介: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat シリーズのディストリビューション CentOS/RedHat/Alma/Rocky/oracle のみをサポートします" - echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試して、慎重に実稼働環境をアップグレードすることをお勧めします。" + echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice @@ -5785,7 +5980,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -5985,9 +6180,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションのマウント +# パーティションをマウントする mount_partition() { - send_stats "パーティションのマウント" + send_stats "パーティションをマウントする" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6097,7 +6292,7 @@ format_partition() { fi } -# 检查分区状态 +# パーティションのステータスを確認する check_partition() { send_stats "パーティションのステータスを確認する" read -e -p "確認するパーティション名を入力してください (例: sda1):" PARTITION @@ -6109,7 +6304,7 @@ check_partition() { fi # パーティションのステータスを確認する - echo "检查分区 /dev/$PARTITION状態:" + echo "パーティション /dev/ を確認してください$PARTITION状態:" fsck "/dev/$PARTITION" } @@ -6137,7 +6332,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6166,7 +6361,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port + read -e -p "SSH ポートを入力してください (デフォルトは 22):" port port=${port:-22} echo "認証方法を選択してください:" @@ -6334,7 +6529,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期スケジュールされたタスクを追加する" + send_stats "同期のスケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6424,7 +6619,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6608,7 +6803,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftopをインストールする" + send_stats "iftop をインストールする" ;; 7) clear @@ -6912,7 +7107,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -6923,7 +7118,7 @@ docker_ssh_migration() { echo "# docker-compose 復元:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}プロジェクトの作成 [$project_name] パッケージ内容:${project_dir}${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name]パッケージ化:${project_dir}${NC}" else echo -e "${RED}docker-compose.yml が見つからないため、このコンテナをスキップします...${NC}" fi @@ -7079,7 +7274,7 @@ docker_ssh_migration() { [[ "$has_container" == false ]] && echo -e "${YELLOW}共通コンテナのバックアップ情報が見つかりません${NC}" - # /home/docker 下のファイルを復元します + # /home/docker 下のファイルを復元する if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker @@ -7185,7 +7380,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -7229,7 +7424,7 @@ linux_docker() { echo -e "Docker ボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Docker ネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7328,7 +7523,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -7662,7 +7857,7 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 + # CPU コアの数と占有率を入力するようユーザーに求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 read -e -p "CPU コアの数を入力してください [デフォルト:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} @@ -7847,7 +8042,7 @@ linux_ldnmp() { echo -e "${gl_huang}23. ${gl_bai}サイト リバース プロキシ - IP+ポート${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}サイト リバース プロキシ ドメイン名" echo -e "${gl_huang}25. ${gl_bai}Bitwarden パスワード管理プラットフォームをインストールする${gl_huang}26. ${gl_bai}Halo ブログ サイトをインストールする" echo -e "${gl_huang}27. ${gl_bai}AI絵画プロンプトワードジェネレーターをインストールする${gl_huang}28. ${gl_bai}サイト リバース プロキシ負荷分散" - echo -e "${gl_huang}30. ${gl_bai}カスタム静的サイト" + echo -e "${gl_huang}29. ${gl_bai}ストリーム 4 層プロキシ転送${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}サイト全体のデータを復元する" @@ -8027,7 +8222,7 @@ linux_ldnmp() { echo "パスワード: 管理者" echo "------------------------" echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" - echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、問題が多いのか、とても腹が立っています。" + echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、こんな問題を抱えているのか、とても腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8427,6 +8622,10 @@ linux_ldnmp() { ;; + 29) + stream_panel + ;; + 30) clear webname="静态站点" @@ -8466,7 +8665,7 @@ linux_ldnmp() { # find "$(realpath .)" -name "index.html" -print find "$(realpath .)" -name "index.html" -print | xargs -I {} dirname {} - read -e -p "(/home/web/html/ のような、index.html へのパスを入力してください)$yuming/index/): " index_lujing + read -e -p "(/home/web/html/ のような)index.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 @@ -8852,7 +9051,7 @@ while true; do echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}ITツールツールボックス" echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstBot チャットボット フレームワーク" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstrBot チャットボット フレームワーク" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV プライベートムービー${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" @@ -8862,7 +9061,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos の個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}イミッチピクチャービデオマネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}Owncast の自己ホスト型ライブ ストリーミング プラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBox ファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" @@ -8873,7 +9072,9 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM Synology 仮想マシン${gl_kjlan}100. ${color100}Syncthing ピアツーピア ファイル同期ツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI動画生成ツール${gl_kjlan}102. ${color102}VoceChat 複数人オンライン チャット システム" - echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール" + echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール${gl_kjlan}104. ${color104}ストリーム 4 層プロキシ転送ツール" + echo -e "${gl_kjlan}105. ${color105}思源ノート${gl_kjlan}106. ${color106}Drawnix オープンソース ホワイトボード ツール" + echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" @@ -9075,7 +9276,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "ネザモニタリング$check_docker $update_status" + echo -e "ネザ監視$check_docker $update_status" echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" echo "公式 Web サイト構築ドキュメント: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9084,7 +9285,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -10497,7 +10698,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -10536,7 +10737,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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' \ @@ -10653,7 +10854,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12109,7 +12310,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12176,7 +12377,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12205,6 +12406,102 @@ while true; do ;; + 104|nginx-stream) + stream_panel + ;; + + + 105|siyuan) + + local app_id="105" + local docker_name="siyuan" + local docker_img="b3log/siyuan" + local docker_port=8105 + + docker_rum() { + + read -e -p "ログインパスワードを設定します:" app_passwd + + docker run -d \ + --name siyuan \ + --restart=always \ + -v /home/docker/siyuan/workspace:/siyuan/workspace \ + -p ${docker_port}:6806 \ + -e PUID=1001 \ + -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode="${app_passwd}" + + } + + local docker_describe="思源笔记是一款隐私优先的知识管理系统" + local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 106|drawnix) + + local app_id="106" + local docker_name="drawnix" + local docker_img="pubuzhixing/drawnix" + local docker_port=8106 + + docker_rum() { + + docker run -d \ + --restart=always \ + --name drawnix \ + -p ${docker_port}:80 \ + pubuzhixing/drawnix + + } + + local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" + local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 107|pansou) + + local app_id="107" + local docker_name="pansou" + local docker_img="ghcr.io/fish2018/pansou-web" + local docker_port=8107 + + docker_rum() { + + docker run -d \ + --name pansou \ + --restart=always \ + -p ${docker_port}:80 \ + -v /home/docker/pansou/data:/app/data \ + -v /home/docker/pansou/logs:/app/logs \ + -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + ghcr.io/fish2018/pansou-web + + } + + local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" + local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) @@ -12310,7 +12607,7 @@ linux_work() { 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}ワークスペースNo.5" + 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" @@ -12561,7 +12858,7 @@ linux_Settings() { echo -e "現在のPythonのバージョン番号:${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 "他のバージョンを確認する: https://www.python.org/downloads/" echo "------------" read -e -p "インストールする Python のバージョン番号を入力します (終了するには 0 を入力します)。" py_new_v @@ -12962,7 +13259,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得します + # 現在のシステム時刻を取得する local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -12977,7 +13274,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13824,7 +14121,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -13844,7 +14141,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -13980,10 +14277,10 @@ while true; do 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}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}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}" @@ -14159,7 +14456,7 @@ while true; do fi echo "------------------------" - echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" + echo "1. 今すぐ更新します 2. 自動更新をオンにします 3. 自動更新をオフにします" echo "------------------------" echo "0. メインメニューに戻る" echo "------------------------" @@ -14251,7 +14548,7 @@ echo -e "${gl_kjlan}p. ${gl_bai}Eudemons Parlu サーバー開始スクリプ 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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice @@ -14294,7 +14591,7 @@ echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" -echo "システム k アップデートを更新 | kアップデート" +echo "システム k 更新を更新します。 kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" @@ -14303,7 +14600,7 @@ echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" echo "システムごみ箱のゴミ箱 | k hz | k ごみ箱" echo "システムバックアップ機能 kバックアップ | k bf | k バックアップ" -echo "ssh リモート接続ツール k ssh | k リモート接続" +echo "ssh リモート接続ツール k ssh | kリモート接続" echo "rsync リモート同期ツール k rsync | k リモート同期" echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" echo "イントラネット普及率 (サーバー) k frps" @@ -14322,10 +14619,11 @@ echo "docker イメージ管理 k docker img |k docker image" echo "LDNMP サイト管理 k Web" echo "LDNMP キャッシュのクリーニング k Web キャッシュ" echo "WordPress をインストールします。 kワードプレス | k wp xxx.com" -echo "リバース プロキシをインストールします k fd |k rp |k リバース プロキシ |k fd xxx.com" +echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" +echo "L4 ロード バランシング k ストリーム |k L4 ロード バランシングをインストールする" echo "ファイアウォール パネル k fhq |k ファイアウォール" -echo "ポートを開きます k dkdk 8080 |k ポートを開きます 8080" +echo "ポートを開く 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 "ブロック IP k zzip 177.5.25.36 |k ブロック IP 177.5.25.36" @@ -14414,9 +14712,14 @@ else ldnmp_Proxy_backend ;; + + stream|L4负载均衡) + ldnmp_Proxy_backend_stream + ;; + swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "仮想メモリを素早く設定する" add_swap "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 36d551dbe..aea2c98cd 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.9" +sh_v="4.2.0" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -216,6 +216,8 @@ check_disk_space() { local required_gb=$1 local path=${2:-/} + mkdir -p "$path" + local required_space_mb=$((required_gb * 1024)) local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') @@ -1335,11 +1337,9 @@ ldnmp_v() { 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 + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.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 @@ -1355,31 +1355,34 @@ install_ldnmp_conf() { } +update_docker_compose_with_db_creds() { + cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + if ! grep -q "stream" /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 -install_ldnmp() { + 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:]') - check_swap + 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 - cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + 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 - if ! grep -q "network_mode" /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 +install_ldnmp() { - 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 + check_swap + update_docker_compose_with_db_creds cd /home/web && docker compose up -d sleep 1 @@ -2112,7 +2115,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 고부하를 감지하면 자동으로 실드를 열고, 저부하를 감지하면 자동으로 5초 동안 실드를 닫습니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -2443,7 +2446,7 @@ check_docker_image_update() { 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) @@ -2759,7 +2762,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -3185,7 +3188,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" echo "------------------------" echo "$webname설치정보는 다음과 같습니다." @@ -3194,7 +3197,7 @@ ldnmp_web_on() { nginx_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" } @@ -3277,8 +3280,6 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" - yuming="${1:-}" - reverseproxy_port="${2:-}" send_stats "설치하다$webname" echo "배포 시작$webname" @@ -3316,6 +3317,200 @@ ldnmp_Proxy_backend() { + + + +list_stream_services() { + + STREAM_DIR="/home/web/stream.d" + printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + + if [ -z "$(ls -A "$STREAM_DIR")" ]; then + return + fi + + for conf in "$STREAM_DIR"/*; do + # 서비스 이름은 파일 이름을 사용합니다. + service_name=$(basename "$conf" .conf) + + # 업스트림 블록에서 서버 백엔드 IP:포트 가져오기 + backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) + + # 청취 포트 가져오기 + listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) + + # 기본 로컬 IP + ip_address + local_ip="$ipv4_address" + + # 먼저 파일 이름 접미사 또는 내용으로 판단하여 통신 유형을 가져옵니다. + if grep -qi 'udp;' "$conf"; then + proto="udp" + else + proto="tcp" + fi + + # 스플라이스 청취 IP:포트 + local_addr="$local_ip:$listen_port" + + printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" + done +} + + + + + + + + + +stream_panel() { + send_stats "4계층 프록시 스트리밍" + local app_id="104" + local docker_name="nginx" + + while true; do + clear + check_docker_app + check_docker_image_update $docker_name + echo -e "스트림 4계층 프록시 전달 도구$check_docker $update_status" + echo "NGINX 스트림은 고성능 전송 계층 트래픽 전달 및 로드 밸런싱을 달성하는 데 사용되는 NGINX의 TCP/UDP 프록시 모듈입니다." + echo "------------------------" + if [ -d "/home/web/stream.d" ]; then + list_stream_services + fi + echo "" + echo "------------------------" + echo "1. 설치 2. 업데이트 3. 제거" + echo "------------------------" + echo "4. 포워딩 서비스 추가 5. 포워딩 서비스 수정 6. 포워딩 서비스 삭제" + echo "------------------------" + echo "0. 이전 메뉴로 돌아가기" + echo "------------------------" + read -e -p "선택 항목을 입력하세요." choice + case $choice in + 1) + nginx_install_status + add_app_id + send_stats "Stream 4계층 에이전트 설치" + ;; + 2) + update_docker_compose_with_db_creds + nginx_upgrade + add_app_id + send_stats "Stream 4계층 프록시 업데이트" + ;; + 3) + read -e -p "nginx 컨테이너를 삭제하시겠습니까? 이는 웹사이트 기능에 영향을 미칠 수 있습니다! (예/아니요):" confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + docker rm -f nginx + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + send_stats "Stream 4계층 프록시 업데이트" + echo "nginx 컨테이너가 삭제되었습니다." + else + echo "작업이 취소되었습니다." + fi + + ;; + + 4) + ldnmp_Proxy_backend_stream + add_app_id + send_stats "레이어 4 프록시 추가" + ;; + 5) + send_stats "전달 구성 수정" + read -e -p "편집하려는 서비스 이름을 입력하십시오:" stream_name + install nano + nano /home/web/stream.d/$stream_name.conf + docker restart nginx + send_stats "레이어 4 프록시 수정" + ;; + 6) + send_stats "전달 구성 삭제" + read -e -p "삭제하려는 서비스 이름을 입력하세요." stream_name + rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 + docker restart nginx + send_stats "레이어 4 프록시 삭제" + ;; + *) + break + ;; + esac + break_end + done +} + + + +ldnmp_Proxy_backend_stream() { + clear + webname="Stream四层代理-负载均衡" + + send_stats "설치하다$webname" + echo "배포 시작$webname" + + # 에이전트 이름 가져오기 + read -rp "프록시 전달 이름(예: mysql_proxy)을 입력하세요." proxy_name + if [ -z "$proxy_name" ]; then + echo "이름은 비워둘 수 없습니다."; return 1 + fi + + # 수신 포트 가져오기 + read -rp "로컬 수신 포트(예: 3306)를 입력하십시오." listen_port + if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then + echo "포트는 숫자여야 합니다."; return 1 + fi + + echo "계약 유형을 선택하십시오:" + echo "1. TCP 2. UDP" + read -rp "일련 번호 [1-2]를 입력하십시오:" proto_choice + + case "$proto_choice" in + 1) proto="tcp"; listen_suffix="" ;; + 2) proto="udp"; listen_suffix=" udp" ;; + *) echo "잘못된 선택"; return 1 ;; + esac + + read -e -p "하나 이상의 백엔드 IP+포트를 공백으로 구분하여 입력하세요(예: 10.13.0.2:3306 10.13.0.3:3306)." reverseproxy_port + + nginx_install_status + cd /home && mkdir -p web/stream.d + grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf + wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf + + backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) + sed -i "s/backend_yuming_com/${proxy_name}_${backend}/g" /home/web/stream.d/"$proxy_name".conf + sed -i "s|listen 80|listen $listen_port $listen_suffix|g" /home/web/stream.d/$proxy_name.conf + sed -i "s|listen \[::\]:|listen [::]:${listen_port} ${listen_suffix}|g" "/home/web/stream.d/${proxy_name}.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/stream.d/$proxy_name.conf + + docker exec nginx nginx -s reload + clear + echo "당신의$webname건설되었습니다!" + echo "------------------------" + echo "방문 주소:" + ip_address + if [ -n "$ipv4_address" ]; then + echo "$ipv4_address:${listen_port}" + fi + if [ -n "$ipv6_address" ]; then + echo "$ipv6_address:${listen_port}" + fi + echo "" +} + + + + + find_container_by_host_port() { port="$1" docker_name=$(docker ps --format '{{.ID}} {{.Names}}' | while read id name; do @@ -3619,7 +3814,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3681,7 +3876,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -4884,7 +5079,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" + echo "XanMod 커널이 업데이트되었습니다. 다시 시작한 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -4894,7 +5089,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" + echo "XanMod 커널이 제거되었습니다. 다시 시작한 후 적용" server_reboot ;; @@ -4948,7 +5143,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 다시 시작한 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -5037,7 +5232,7 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" + echo "elrepo 커널이 제거되었습니다. 다시 시작한 후 적용" send_stats "Red Hat 커널 제거" server_reboot @@ -5091,7 +5286,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -7009,7 +7204,7 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]가 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7025,7 +7220,7 @@ docker_ssh_migration() { [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리 용기:$container${NC}" + echo -e "${GREEN}처리용기:$container${NC}" # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then @@ -7847,7 +8042,7 @@ linux_ldnmp() { echo -e "${gl_huang}23. ${gl_bai}사이트 역방향 프록시-IP+포트${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}사이트 역방향 프록시 도메인 이름" echo -e "${gl_huang}25. ${gl_bai}Bitwarden 비밀번호 관리 플랫폼 설치${gl_huang}26. ${gl_bai}Halo 블로그 사이트 설치" echo -e "${gl_huang}27. ${gl_bai}AI 그림 프롬프트 단어 생성기 설치${gl_huang}28. ${gl_bai}사이트 역방향 프록시-로드 밸런싱" - echo -e "${gl_huang}30. ${gl_bai}사용자 정의 정적 사이트" + echo -e "${gl_huang}29. ${gl_bai}스트림 4계층 프록시 전달${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}전체 사이트 데이터 복원" @@ -8026,7 +8221,7 @@ linux_ldnmp() { echo "사용자 이름: 관리자" echo "비밀번호: 관리자" echo "------------------------" - echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용하시기 바랍니다." + echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용해주세요." echo "유니콘 숫자카드가 왜 이렇게 귀찮고 이런 문제가 있는지에 대해서도 너무 화가 납니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -8427,6 +8622,10 @@ linux_ldnmp() { ;; + 29) + stream_panel + ;; + 30) clear webname="静态站点" @@ -8873,7 +9072,9 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM Synology 가상 컴퓨터${gl_kjlan}100. ${color100}P2P 파일 동기화 도구 동기화" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" - echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구" + echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" @@ -9066,7 +9267,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9155,7 +9356,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우편 서비스$check_docker $update_status" + echo -e "우정$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9187,7 +9388,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -10497,7 +10698,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -10536,7 +10737,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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' \ @@ -10653,7 +10854,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12109,7 +12310,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12176,7 +12377,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12205,6 +12406,102 @@ while true; do ;; + 104|nginx-stream) + stream_panel + ;; + + + 105|siyuan) + + local app_id="105" + local docker_name="siyuan" + local docker_img="b3log/siyuan" + local docker_port=8105 + + docker_rum() { + + read -e -p "로그인 비밀번호 설정:" app_passwd + + docker run -d \ + --name siyuan \ + --restart=always \ + -v /home/docker/siyuan/workspace:/siyuan/workspace \ + -p ${docker_port}:6806 \ + -e PUID=1001 \ + -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode="${app_passwd}" + + } + + local docker_describe="思源笔记是一款隐私优先的知识管理系统" + local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 106|drawnix) + + local app_id="106" + local docker_name="drawnix" + local docker_img="pubuzhixing/drawnix" + local docker_port=8106 + + docker_rum() { + + docker run -d \ + --restart=always \ + --name drawnix \ + -p ${docker_port}:80 \ + pubuzhixing/drawnix + + } + + local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" + local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 107|pansou) + + local app_id="107" + local docker_name="pansou" + local docker_img="ghcr.io/fish2018/pansou-web" + local docker_port=8107 + + docker_rum() { + + docker run -d \ + --name pansou \ + --restart=always \ + -p ${docker_port}:80 \ + -v /home/docker/pansou/data:/app/data \ + -v /home/docker/pansou/logs:/app/logs \ + -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + ghcr.io/fish2018/pansou-web + + } + + local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" + local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) @@ -12310,7 +12607,7 @@ linux_work() { 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}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" @@ -12492,7 +12789,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -12502,7 +12799,7 @@ linux_Settings() { 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}ROOT 개인 키 로그인 모드" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기 경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템 커널 매개변수 최적화${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}바이러스 검사 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" echo -e "${gl_kjlan}------------------------" @@ -14321,9 +14618,10 @@ echo "도커 컨테이너 관리 k 도커 ps |k 도커 컨테이너" echo "도커 이미지 관리 k docker img |k 도커 이미지" echo "LDNMP 사이트 관리 k web" echo "LDNMP 캐시 정리 k 웹 캐시" -echo "WordPress k wp 설치 | k 워드프레스 | k wp xxx.com" +echo "WordPress k wp 설치 | k 워드프레스 | kwp xxx.com" echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" +echo "L4 로드 밸런싱 설치 k 스트림 |k L4 로드 밸런싱" echo "방화벽 패널 k fhq |k 방화벽" echo "포트 k 열기 DKdk 8080 |k 포트 8080 열기" echo "k 포트 닫기 gbdk 7800 |k 포트 7800 닫기" @@ -14414,6 +14712,11 @@ else ldnmp_Proxy_backend ;; + + stream|L4负载均衡) + ldnmp_Proxy_backend_stream + ;; + swap) shift send_stats "가상 메모리를 빠르게 설정하세요" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index ac3dbbf37..ded2d8c10 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.1.9" +sh_v="4.2.0" gl_hui='\e[37m' @@ -216,6 +216,8 @@ check_disk_space() { local required_gb=$1 local path=${2:-/} + mkdir -p "$path" + local required_space_mb=$((required_gb * 1024)) local available_space_mb=$(df -m "$path" | awk 'NR==2 {print $4}') @@ -1335,11 +1337,9 @@ ldnmp_v() { 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 + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.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 @@ -1355,31 +1355,34 @@ install_ldnmp_conf() { } +update_docker_compose_with_db_creds() { + cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + if ! grep -q "stream" /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 -install_ldnmp() { + 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:]') - check_swap + 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 - cp /home/web/docker-compose.yml /home/web/docker-compose1.yml + 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 - if ! grep -q "network_mode" /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 +install_ldnmp() { - 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 + check_swap + update_docker_compose_with_db_creds cd /home/web && docker compose up -d sleep 1 @@ -3277,8 +3280,6 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear webname="反向代理-负载均衡" - yuming="${1:-}" - reverseproxy_port="${2:-}" send_stats "安裝$webname" echo "開始部署$webname" @@ -3316,6 +3317,200 @@ ldnmp_Proxy_backend() { + + + +list_stream_services() { + + STREAM_DIR="/home/web/stream.d" + printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + + if [ -z "$(ls -A "$STREAM_DIR")" ]; then + return + fi + + for conf in "$STREAM_DIR"/*; do + # 服務名取文件名 + service_name=$(basename "$conf" .conf) + + # 獲取 upstream 塊中的 server 後端 IP:端口 + backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) + + # 獲取 listen 端口 + listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) + + # 默認本地 IP + ip_address + local_ip="$ipv4_address" + + # 獲取通信類型,優先從文件名後綴或內容判斷 + if grep -qi 'udp;' "$conf"; then + proto="udp" + else + proto="tcp" + fi + + # 拼接監聽 IP:端口 + local_addr="$local_ip:$listen_port" + + printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" + done +} + + + + + + + + + +stream_panel() { + send_stats "Stream四層代理" + local app_id="104" + local docker_name="nginx" + + while true; do + clear + check_docker_app + check_docker_image_update $docker_name + echo -e "Stream四層代理轉發工具$check_docker $update_status" + echo "NGINX Stream 是 NGINX 的 TCP/UDP 代理模塊,用於實現高性能的 傳輸層流量轉發和負載均衡。" + echo "------------------------" + if [ -d "/home/web/stream.d" ]; then + list_stream_services + fi + echo "" + echo "------------------------" + echo "1. 安裝 2. 更新 3. 卸載" + echo "------------------------" + echo "4. 添加轉發服務 5. 修改轉發服務 6. 刪除轉發服務" + echo "------------------------" + echo "0. 返回上一級選單" + echo "------------------------" + read -e -p "輸入你的選擇:" choice + case $choice in + 1) + nginx_install_status + add_app_id + send_stats "安裝Stream四層代理" + ;; + 2) + update_docker_compose_with_db_creds + nginx_upgrade + add_app_id + send_stats "更新Stream四層代理" + ;; + 3) + read -e -p "確定要刪除 nginx 容器嗎?這可能會影響網站功能! (y/N):" confirm + if [[ "$confirm" =~ ^[Yy]$ ]]; then + docker rm -f nginx + sed -i "/\b${app_id}\b/d" /home/docker/appno.txt + send_stats "更新Stream四層代理" + echo "nginx 容器已刪除。" + else + echo "操作已取消。" + fi + + ;; + + 4) + ldnmp_Proxy_backend_stream + add_app_id + send_stats "添加四層代理" + ;; + 5) + send_stats "編輯轉發配置" + read -e -p "請輸入你要編輯的服務名:" stream_name + install nano + nano /home/web/stream.d/$stream_name.conf + docker restart nginx + send_stats "修改四層代理" + ;; + 6) + send_stats "刪除轉發配置" + read -e -p "請輸入你要刪除的服務名:" stream_name + rm /home/web/stream.d/$stream_name.conf > /dev/null 2>&1 + docker restart nginx + send_stats "刪除四層代理" + ;; + *) + break + ;; + esac + break_end + done +} + + + +ldnmp_Proxy_backend_stream() { + clear + webname="Stream四层代理-负载均衡" + + send_stats "安裝$webname" + echo "開始部署$webname" + + # 獲取代理名稱 + read -rp "請輸入代理轉發名稱 (如 mysql_proxy):" proxy_name + if [ -z "$proxy_name" ]; then + echo "名稱不能為空"; return 1 + fi + + # 獲取監聽端口 + read -rp "請輸入本機監聽端口 (如 3306):" listen_port + if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then + echo "端口必須是數字"; return 1 + fi + + echo "請選擇協議類型:" + echo "1. TCP 2. UDP" + read -rp "請輸入序號 [1-2]:" proto_choice + + case "$proto_choice" in + 1) proto="tcp"; listen_suffix="" ;; + 2) proto="udp"; listen_suffix=" udp" ;; + *) echo "無效選擇"; return 1 ;; + esac + + read -e -p "請輸入你的一個或者多個後端IP+端口用空格隔開(例如 10.13.0.2:3306 10.13.0.3:3306):" reverseproxy_port + + nginx_install_status + cd /home && mkdir -p web/stream.d + grep -q '^[[:space:]]*stream[[:space:]]*{' /home/web/nginx.conf || echo -e '\nstream {\n include /etc/nginx/stream.d/*.conf;\n}' | tee -a /home/web/nginx.conf + wget -O /home/web/stream.d/$proxy_name.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend-stream.conf + + backend=$(tr -dc 'A-Za-z' < /dev/urandom | head -c 8) + sed -i "s/backend_yuming_com/${proxy_name}_${backend}/g" /home/web/stream.d/"$proxy_name".conf + sed -i "s|listen 80|listen $listen_port $listen_suffix|g" /home/web/stream.d/$proxy_name.conf + sed -i "s|listen \[::\]:|listen [::]:${listen_port} ${listen_suffix}|g" "/home/web/stream.d/${proxy_name}.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/stream.d/$proxy_name.conf + + docker exec nginx nginx -s reload + clear + echo "您的$webname搭建好了!" + echo "------------------------" + echo "訪問地址:" + ip_address + if [ -n "$ipv4_address" ]; then + echo "$ipv4_address:${listen_port}" + fi + if [ -n "$ipv6_address" ]; then + echo "$ipv6_address:${listen_port}" + fi + echo "" +} + + + + + find_container_by_host_port() { port="$1" docker_name=$(docker ps --format '{{.ID}} {{.Names}}' | while read id name; do @@ -7847,7 +8042,7 @@ linux_ldnmp() { echo -e "${gl_huang}23. ${gl_bai}站點反向代理-IP+端口${gl_huang}★${gl_bai} ${gl_huang}24. ${gl_bai}站點反向代理-域名" echo -e "${gl_huang}25. ${gl_bai}安裝Bitwarden密碼管理平台${gl_huang}26. ${gl_bai}安裝Halo博客網站" echo -e "${gl_huang}27. ${gl_bai}安裝AI繪畫提示詞生成器${gl_huang}28. ${gl_bai}站點反向代理-負載均衡" - echo -e "${gl_huang}30. ${gl_bai}自定義靜態站點" + echo -e "${gl_huang}29. ${gl_bai}Stream四層代理轉發${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}還原全站數據" @@ -8427,6 +8622,10 @@ linux_ldnmp() { ;; + 29) + stream_panel + ;; + 30) clear webname="静态站点" @@ -8873,7 +9072,9 @@ while true; do echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機${gl_kjlan}100. ${color100}Syncthing點對點文件同步工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具${gl_kjlan}102. ${color102}VoceChat多人在線聊天系統" - echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具" + echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具${gl_kjlan}104. ${color104}Stream四層代理轉發工具" + echo -e "${gl_kjlan}105. ${color105}思源筆記${gl_kjlan}106. ${color106}Drawnix開源白板工具" + echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -10497,7 +10698,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -10536,7 +10737,7 @@ while true; do 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 + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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' \ @@ -10653,7 +10854,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/infiniflow/ragflow.git && cd ragflow/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12109,7 +12310,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12176,7 +12377,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12205,6 +12406,102 @@ while true; do ;; + 104|nginx-stream) + stream_panel + ;; + + + 105|siyuan) + + local app_id="105" + local docker_name="siyuan" + local docker_img="b3log/siyuan" + local docker_port=8105 + + docker_rum() { + + read -e -p "設置登錄密碼:" app_passwd + + docker run -d \ + --name siyuan \ + --restart=always \ + -v /home/docker/siyuan/workspace:/siyuan/workspace \ + -p ${docker_port}:6806 \ + -e PUID=1001 \ + -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode="${app_passwd}" + + } + + local docker_describe="思源笔记是一款隐私优先的知识管理系统" + local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 106|drawnix) + + local app_id="106" + local docker_name="drawnix" + local docker_img="pubuzhixing/drawnix" + local docker_port=8106 + + docker_rum() { + + docker run -d \ + --restart=always \ + --name drawnix \ + -p ${docker_port}:80 \ + pubuzhixing/drawnix + + } + + local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" + local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 107|pansou) + + local app_id="107" + local docker_name="pansou" + local docker_img="ghcr.io/fish2018/pansou-web" + local docker_port=8107 + + docker_rum() { + + docker run -d \ + --name pansou \ + --restart=always \ + -p ${docker_port}:80 \ + -v /home/docker/pansou/data:/app/data \ + -v /home/docker/pansou/logs:/app/logs \ + -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + ghcr.io/fish2018/pansou-web + + } + + local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" + local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) @@ -14324,6 +14621,7 @@ echo "LDNMP緩存清理 k web cache" echo "安裝WordPress k wp |k wordpress |k wp xxx.com" echo "安裝反向代理 k fd |k rp |k 反代 |k fd xxx.com" echo "安裝負載均衡 k loadbalance |k 負載均衡" +echo "安裝L4負載均衡 k stream |k L4負載均衡" echo "防火牆面板 k fhq |k 防火牆" echo "開放端口 k dkdk 8080 |k 打開端口 8080" echo "關閉端口 k gbdk 7800 |k 關閉端口 7800" @@ -14414,6 +14712,11 @@ else ldnmp_Proxy_backend ;; + + stream|L4负载均衡) + ldnmp_Proxy_backend_stream + ;; + swap) shift send_stats "快速設置虛擬內存" From 7184d257e8616c2af2d61c4c19877284430375cf Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 26 Oct 2025 03:32:11 +0000 Subject: [PATCH 303/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-10-26=2003:32:11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 98 ++++++++++++++++++++-------------------- jp/kejilion.sh | 118 ++++++++++++++++++++++++------------------------- kr/kejilion.sh | 102 +++++++++++++++++++++--------------------- 3 files changed, 159 insertions(+), 159 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 767701c6f..333c368f2 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -915,7 +915,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add a shutdown rule + # Add shutdown rule 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 @@ -2543,7 +2543,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -2562,7 +2562,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -2803,7 +2803,7 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3454,7 +3454,7 @@ ldnmp_Proxy_backend_stream() { # Get agent name read -rp "Please enter a proxy forwarding name (e.g. mysql_proxy):" proxy_name if [ -z "$proxy_name" ]; then - echo "Name cannot be empty"; return 1 + echo "name cannot be empty"; return 1 fi # Get listening port @@ -4100,7 +4100,7 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" ;; 5) echo "Reverse intranet penetration service into domain name access" @@ -4197,7 +4197,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" ;; 4) @@ -4697,14 +4697,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion } @@ -4972,7 +4972,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall Windows 11" + send_stats "Reinstall windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5506,7 +5506,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -5585,7 +5585,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ @@ -5848,9 +5848,9 @@ send_stats "Command Favorites" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# Create backup +# Create a backup create_backup() { - send_stats "Create backup" + send_stats "Create a backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # Prompt user for backup directory @@ -5892,7 +5892,7 @@ create_backup() { echo "- $path" done - # Create backup + # Create a backup echo "Creating backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6035,7 +6035,7 @@ add_connection() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started entering the key content, continue adding + # If it is the first line or you have already started to enter the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi @@ -6313,7 +6313,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard drive partition management" + echo "Hard disk partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -6383,7 +6383,7 @@ add_task() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started entering the key content, continue adding + # If it is the first line or you have already started to enter the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi @@ -7306,7 +7306,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in using key + # Log in with key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7673,7 +7673,7 @@ linux_test() { echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" echo -e "${gl_kjlan}15. ${gl_bai}nxtrace specifies IP backhaul test script" echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three network line test" - echo -e "${gl_kjlan}17. ${gl_bai}i-abc multi-function speed test script" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunctional speed test script" echo -e "${gl_kjlan}18. ${gl_bai}NetQuality network quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" @@ -9460,7 +9460,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" ;; *) @@ -9514,7 +9514,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -9612,7 +9612,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10497,7 +10497,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10719,7 +10719,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10770,7 +10770,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10811,7 +10811,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10874,7 +10874,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11202,7 +11202,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11423,7 +11423,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11473,7 +11473,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11608,7 +11608,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11835,7 +11835,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11973,7 +11973,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12027,7 +12027,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12260,7 +12260,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12330,7 +12330,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12399,7 +12399,7 @@ while true; do docker_app_uninstall() { cd /home/docker/umami/ && docker compose down --rmi all rm -rf /home/docker/umami - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12549,7 +12549,7 @@ while true; do r) root_use send_stats "Restore all apps" - echo "Available application backups" + echo "Available app backups" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12609,7 +12609,7 @@ linux_work() { echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" - echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" + echo -e "${gl_kjlan}7. ${gl_bai}Workspace No. 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" echo -e "${gl_kjlan}10. ${gl_bai}Workspace 10" @@ -12782,7 +12782,7 @@ linux_Settings() { while true; do clear - # send_stats "System Tools" + # send_stats "system tools" echo -e "system tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut key${gl_kjlan}2. ${gl_bai}Change login password" @@ -12853,7 +12853,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by python!" + echo "This function can seamlessly install any version officially supported by Python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13045,8 +13045,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 priority" - send_stats "Switched to IPv6 priority" + echo "Switched to IPv6 first" + send_stats "Switched to IPv6 first" ;; 3) @@ -13584,7 +13584,7 @@ EOF echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" + echo -e "${gl_hui}Current limiting shutdown function is not currently enabled${gl_bai}" fi echo @@ -14137,7 +14137,7 @@ linux_file() { read -e -p "Please enter the file or directory path to copy:" src_path if [ ! -e "$src_path" ]; then echo "Error: File or directory does not exist." - send_stats "Copying file or directory failed: File or directory does not exist" + send_stats "Failed to copy file or directory: File or directory does not exist" continue fi @@ -14248,7 +14248,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}Connect to$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}connect to$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14282,7 +14282,7 @@ while true; do echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}Install technology lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom instructions" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}custom directive" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14584,7 +14584,7 @@ done k_info() { -send_stats "k command reference examples" +send_stats "k command reference use case" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "The following is a reference use case for the k command:" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index a9559b67b..f75fad562 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 @@ -116,7 +116,7 @@ UserLicenseAgreement() { clear echo -e "${gl_kjlan}テクノロジー ライオン スクリプト ツールボックスへようこそ${gl_bai}" echo "初めてスクリプトを使用する場合は、ユーザー使用許諾契約を読み、同意してください。" - echo "ユーザー使用許諾契約: https://blog.kejilion.pro/user-license-agreement/" + echo "ユーザー使用許諾契約書: https://blog.kejilion.pro/user-license-agreement/" echo -e "----------------------" read -r -p "上記の条件に同意しますか? (y/n):" user_input @@ -955,12 +955,12 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリースされたIP$ip" + echo "リリース済みIP$ip" fi done save_iptables_rules - send_stats "リリースされたIP" + send_stats "リリース済みIP" } block_ip() { @@ -1130,7 +1130,7 @@ iptables_panel() { echo "------------------------" echo "13. DDOS 防御を開始します。 14. DDOS 防御をオフにします。" echo "------------------------" - echo "15. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" + echo "15. 指定した国の IP をブロック 16. 指定した国の IP のみを許可" echo "17. 指定国における知的財産制限を解除する" echo "------------------------" echo "0. 前のメニューに戻る" @@ -1526,7 +1526,7 @@ certs_status() { else send_stats "ドメイン名証明書の申請に失敗しました" echo -e "${gl_hong}知らせ:${gl_bai}証明書の申請に失敗しました。次の考えられる理由を確認して、再試行してください。" - echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているか確認してください" + echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" echo -e "2. DNS 解決の問題 ➠ ドメイン名がサーバー IP に正しく解決されていることを確認します。" echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" @@ -1663,7 +1663,7 @@ cf_purge_cache() { # キャッシュをクリアするかどうかをユーザーに確認する read -e -p "Cloudflareのキャッシュをクリアする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF情報は以下に保存されます。$CONFIG_FILECF 情報は後で変更できます。" + echo "CF 情報は次の場所に保存されます。$CONFIG_FILECF 情報は後で変更できます。" read -e -p "API_TOKEN を入力してください:" API_TOKEN read -e -p "CF ユーザー名を入力してください:" EMAIL read -e -p "zone_id を入力してください (複数の場合はスペースで区切ります):" -a ZONE_IDS @@ -2114,10 +2114,10 @@ web_security() { ;; 22) - send_stats "高負荷で5秒シールド可能" + send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" - echo "CF パラメータを取得します。" + echo "CFパラメータを取得します。" echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側にある API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" @@ -2442,7 +2442,7 @@ check_docker_image_update() { # 公式画像のサポートを追加 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIからイメージのリリース時間を取得する + # 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) @@ -3330,13 +3330,13 @@ list_stream_services() { fi for conf in "$STREAM_DIR"/*; do - # サービス名がファイル名になります + # サービス名はファイル名を取得します service_name=$(basename "$conf" .conf) # 上流ブロックでサーバーのバックエンド IP:ポートを取得します。 backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) - # リッスンポートの取得 + # リッスンポートを取得する listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) # デフォルトのローカルIP @@ -3420,7 +3420,7 @@ stream_panel() { send_stats "レイヤ 4 プロキシを追加する" ;; 5) - send_stats "転送設定を編集する" + send_stats "転送設定の編集" read -e -p "編集するサービス名を入力してください:" stream_name install nano nano /home/web/stream.d/$stream_name.conf @@ -3671,7 +3671,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -4018,7 +4018,7 @@ generate_access_urls() { done fi - # HTTPS 構成を処理する + # HTTPS 構成の処理 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -4586,7 +4586,7 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 見つかった場合は、PasswordAuthentication が Yes に設定されます + # 見つかった場合、PasswordAuthentication は Yes に設定されます 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" @@ -4697,14 +4697,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには、root ユーザーが必要です。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion } @@ -5298,7 +5298,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドパラメータを構築する + # clamscan コマンドのパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5550,7 +5550,7 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linuxカーネルチューニング管理" + send_stats "Linux カーネルのチューニング管理" echo "Linuxシステムのカーネルパラメータの最適化" echo "ビデオ紹介: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" @@ -5558,7 +5558,7 @@ Kernel_optimize() { echo -e "${gl_huang}ヒント:${gl_bai}本番環境では注意して使用してください。" echo "--------------------" echo "1. ハイパフォーマンス最適化モード: システムのパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU 設定を最適化します。" - echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常の使用に適しています。" + echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常的な使用に適しています。" echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" echo "5. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" @@ -5585,7 +5585,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モード" + send_stats "ウェブサイト最適化モデル" ;; 4) cd ~ @@ -5675,7 +5675,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えて" + send_stats "英語に切り替えてください" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -5848,9 +5848,9 @@ send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップの作成 +# バックアップを作成する create_backup() { - send_stats "バックアップの作成" + send_stats "バックアップを作成する" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5892,7 +5892,7 @@ create_backup() { echo "- $path" done - # バックアップの作成 + # バックアップを作成する echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6180,9 +6180,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントする +# パーティションのマウント mount_partition() { - send_stats "パーティションをマウントする" + send_stats "パーティションのマウント" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6201,7 +6201,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6313,7 +6313,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -7097,7 +7097,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" + echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7192,7 +7192,7 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりません。復元ディレクトリのパスを入力してください:" original_path - # 作成プロジェクトのコンテナがすでに実行されているかどうかを確認します + # 構成プロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then echo -e "${YELLOW}プロジェクトの作成 [$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" @@ -7299,14 +7299,14 @@ docker_ssh_migration() { read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーを使用してログインする + # キーでログイン scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -8222,7 +8222,7 @@ linux_ldnmp() { echo "パスワード: 管理者" echo "------------------------" echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" - echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、こんな問題を抱えているのか、とても腹が立っています。" + echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、問題が多いのか、とても腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8665,7 +8665,7 @@ linux_ldnmp() { # find "$(realpath .)" -name "index.html" -print find "$(realpath .)" -name "index.html" -print | xargs -I {} dirname {} - read -e -p "(/home/web/html/ のような)index.html へのパスを入力してください。$yuming/index/): " index_lujing + read -e -p "(/home/web/html/ のような、index.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 @@ -8703,7 +8703,7 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "エラー: リモート サーバーの IP を入力してください。" @@ -8927,7 +8927,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "LDNMP環境の完全アップデート" + send_stats "LDNMP環境の完全なアップデート" cd /home/web/ docker compose down --rmi all @@ -9285,7 +9285,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12159,7 +12159,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12519,7 +12519,7 @@ while true; do case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then @@ -12549,7 +12549,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリケーションのバックアップ" + echo "利用可能なアプリのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12597,7 +12597,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12609,7 +12609,7 @@ linux_work() { 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}7. ${gl_bai}ワークスペースNo.7" echo -e "${gl_kjlan}8. ${gl_bai}作業エリア8" echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo.9" echo -e "${gl_kjlan}10. ${gl_bai}ワークスペース10" @@ -12782,12 +12782,12 @@ linux_Settings() { while true; do clear - # send_stats 「システムツール」 + # 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}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" - echo -e "${gl_kjlan}5. ${gl_bai}すべてのポートを開く${gl_kjlan}6. ${gl_bai}SSH接続ポートを変更する" + 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}------------------------" @@ -13045,8 +13045,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -13584,7 +13584,7 @@ EOF 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません${gl_bai}" fi echo @@ -13688,7 +13688,7 @@ EOF 25) root_use - send_stats "電報警報" + send_stats "電報警告" echo "TG-bot監視・早期警告機能" echo "動画紹介:https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" @@ -14248,7 +14248,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}に接続します$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}に接続する$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14277,12 +14277,12 @@ while true; do 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}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}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}" @@ -14322,7 +14322,7 @@ while true; do 5) clear - send_stats "クラスターを復元する" + send_stats "クラスタを復元する" echo "servers.py をアップロードし、任意のキーを押してアップロードを開始してください。" echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}ファイルに${gl_huang}/root/cluster/${gl_bai}復元完了!" break_end @@ -14584,13 +14584,13 @@ done k_info() { -send_stats "k コマンドのリファレンス例" +send_stats "k コマンドリファレンスの使用例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" -echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | k nano wget をアンインストールする | nano wgetをアンインストールします" echo "システム k 更新を更新します。 kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" @@ -14600,7 +14600,7 @@ echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" echo "システムごみ箱のゴミ箱 | k hz | k ごみ箱" echo "システムバックアップ機能 kバックアップ | k bf | k バックアップ" -echo "ssh リモート接続ツール k ssh | kリモート接続" +echo "ssh リモート接続ツール k ssh | k リモート接続" echo "rsync リモート同期ツール k rsync | k リモート同期" echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" echo "イントラネット普及率 (サーバー) k frps" @@ -14623,7 +14623,7 @@ echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xx echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" echo "L4 ロード バランシング k ストリーム |k L4 ロード バランシングをインストールする" echo "ファイアウォール パネル k fhq |k ファイアウォール" -echo "ポートを開く k dkdk 8080 |k ポートを開く 8080" +echo "ポートを開きます 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 "ブロック IP k zzip 177.5.25.36 |k ブロック IP 177.5.25.36" @@ -14818,7 +14818,7 @@ else shift case $1 in install|安装) - send_stats "Docker をすばやくインストールする" + send_stats "Dockerを素早くインストールする" install_docker ;; ps|容器) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index aea2c98cd..110dc751e 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -1124,7 +1124,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP 지우기" + echo "7. 지정된 IP를 삭제합니다." echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1347,7 +1347,7 @@ install_ldnmp_conf() { 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 파일에서 교체 + # 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 @@ -1531,7 +1531,7 @@ certs_status() { echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." - echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." + echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하세요." break_end clear echo "다시 배포해 보세요.$webname" @@ -2115,7 +2115,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 고부하를 감지하면 자동으로 실드를 열고, 저부하를 감지하면 자동으로 5초 동안 실드를 닫습니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -2381,7 +2381,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. +# check_docker="${gl_hui}가 ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -2543,7 +2543,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2562,7 +2562,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2659,7 +2659,7 @@ clear_host_port_rules() { install iptables - # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi @@ -2675,7 +2675,7 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -3191,7 +3191,7 @@ ldnmp_web_on() { echo "당신의$webname건설되었습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치정보는 다음과 같습니다." + echo "$webname설치 정보는 다음과 같습니다." } @@ -3350,7 +3350,7 @@ list_stream_services() { proto="tcp" fi - # 스플라이스 청취 IP:포트 + # 접속 수신 IP:포트 local_addr="$local_ip:$listen_port" printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" @@ -4123,7 +4123,7 @@ frps_panel() { 8) send_stats "IP 접근 차단" - echo "역방향 도메인 이름 접근이 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." + echo "역방향 도메인 이름 접근을 가지고 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." read -e -p "차단할 포트를 입력하세요:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -5250,7 +5250,7 @@ elrepo() { echo "영상 소개: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat 시리즈 배포판 CentOS/RedHat/Alma/Rocky/oracle만 지원" - echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경을 주의해서 업그레이드하시는 것을 추천드립니다!" + echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경도 주의해서 업그레이드하시는 것을 추천드립니다!" echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5286,7 +5286,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -5585,7 +5585,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모드" + send_stats "웹사이트 최적화 모델" ;; 4) cd ~ @@ -5792,7 +5792,7 @@ linux_trash() { clear echo -e "현재 휴지통${trash_status}" - echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 저장됩니다!" + echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 들어갑니다!" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "휴지통이 비어 있습니다." echo "------------------------" @@ -6031,11 +6031,11 @@ add_connection() { echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -6313,7 +6313,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6379,11 +6379,11 @@ add_task() { echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -7065,7 +7065,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 중...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(여러 개의 공백을 구분하고 Enter를 눌러 실행 중인 모든 컨테이너를 백업하십시오)." containers install tar jq gzip install_docker @@ -7220,7 +7220,7 @@ docker_ssh_migration() { [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리용기:$container${NC}" + echo -e "${GREEN}처리 용기:$container${NC}" # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then @@ -7306,7 +7306,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키를 사용하여 로그인 + # 키로 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7493,7 +7493,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7539,7 +7539,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8221,7 +8221,7 @@ linux_ldnmp() { echo "사용자 이름: 관리자" echo "비밀번호: 관리자" echo "------------------------" - echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용해주세요." + echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용하시기 바랍니다." echo "유니콘 숫자카드가 왜 이렇게 귀찮고 이런 문제가 있는지에 대해서도 너무 화가 납니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -9053,7 +9053,7 @@ while true; do echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}AstrBot 챗봇 프레임워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워든 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워드 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 마법사${gl_kjlan}76. ${color76}온라인 DOS 오래된 게임" echo -e "${gl_kjlan}77. ${color77}Thunder 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" @@ -9766,7 +9766,7 @@ while true; do check_docker_app clear echo -e "썬더 풀 서비스$check_docker" - echo "레이치(Leichi)는 창팅테크놀로지(Changting Technology)가 개발한 WAF 사이트 방화벽 프로그램 패널로, 자동화된 방어를 위해 사이트를 반전시킬 수 있다." + echo "레이치(Leichi)는 창팅테크놀로지가 개발한 WAF 사이트 방화벽 프로그램 패널로, 자동화된 방어를 위해 사이트를 반전시킬 수 있다." echo "영상 소개: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip @@ -12549,7 +12549,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 애플리케이션 백업" + echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12609,7 +12609,7 @@ linux_work() { 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}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" @@ -12709,7 +12709,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12786,7 +12786,7 @@ linux_Settings() { 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}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 Python 버전을 설치합니다." 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 전환" @@ -12799,7 +12799,7 @@ linux_Settings() { 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}ROOT 개인 키 로그인 모드" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기 경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템 커널 매개변수 최적화${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}바이러스 검사 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" echo -e "${gl_kjlan}------------------------" @@ -13045,8 +13045,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -13279,7 +13279,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13584,7 +13584,7 @@ EOF 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}" + echo -e "${gl_hui}현재 제한 종료 기능이 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -13830,7 +13830,7 @@ EOF echo "2. 시스템 정크 파일 정리" echo -e "3. 가상 메모리 설정${gl_huang}1G${gl_bai}" echo -e "4. SSH 포트 번호를 다음으로 설정합니다.${gl_huang}5522${gl_bai}" - echo -e "5. 모든 포트를 엽니다." + 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}" @@ -13952,7 +13952,7 @@ EOF 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 "개인정보 보호 및 보안 수집이 사용 중지되었습니다." + send_stats "개인 정보 보호 및 보안 수집이 꺼졌습니다" ;; *) break @@ -14137,7 +14137,7 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -14148,7 +14148,7 @@ linux_file() { continue fi - # 디렉토리를 반복적으로 복사하려면 -r 옵션을 사용하십시오. + # 디렉토리를 재귀적으로 복사하려면 -r 옵션을 사용하십시오. cp -r "$src_path" "$dest_path" && echo "복사된 파일 또는 디렉터리$dest_path" || echo "파일 또는 디렉터리를 복사하지 못했습니다." send_stats "파일 또는 디렉터리 복사" ;; @@ -14248,7 +14248,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}연결 대상$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}연결하다$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14282,7 +14282,7 @@ while true; do 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}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}" @@ -14324,7 +14324,7 @@ while true; do clear send_stats "클러스터 복원" echo "server.py를 업로드하고 아무 키나 눌러 업로드를 시작하세요!" - echo -e "업로드해주세요${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" + echo -e "귀하의${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" break_end ;; @@ -14396,7 +14396,7 @@ echo "------------------------" echo -e "${gl_lan}DMIT 분기당 $28 US CN2GIA 1 코어 2G 메모리 20G 하드 드라이브 월별 800G 트래픽${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" +echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드 드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}더 인기 있는 VPS 혜택${gl_bai}" @@ -14584,12 +14584,12 @@ done k_info() { -send_stats "k 명령 참조 예" +send_stats "k 명령 참조 사용 사례" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." echo "시작 스크립트 k" -echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 nano wget을 설치합니다." +echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 나노 wget을 설치합니다." echo "패키지 제거 k 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" echo "시스템 k 업데이트 업데이트 | k 업데이트" echo "클린 시스템 정크 k 클린 | 케이 깨끗하다" @@ -14623,12 +14623,12 @@ echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "L4 로드 밸런싱 설치 k 스트림 |k L4 로드 밸런싱" echo "방화벽 패널 k fhq |k 방화벽" -echo "포트 k 열기 DKdk 8080 |k 포트 8080 열기" +echo "포트 k 열기 ddk 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 "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" +echo "애플리케이션 시장관리 kapp" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "시스템 정보 표시 k 정보" } From 6e48a45a6f9a8fcf0ced096d8bc48c7ca8efaf9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:52:18 +0800 Subject: [PATCH 304/553] Update kejilion.sh --- cn/kejilion.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 111b30b72..acec28ea7 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2247,9 +2247,11 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((1024 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf + # php调优 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2288,8 +2290,10 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((2048 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf # php调优 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini From b57639f8e82edf99a4f9739283cb83de1917e8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:52:56 +0800 Subject: [PATCH 305/553] Update kejilion.sh --- kejilion.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index f21db5585..bda83096c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2247,9 +2247,11 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((1024 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf + # php调优 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2288,8 +2290,10 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((2048 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf # php调优 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini From 7fbf4971a978571c5799c9456d1fdba7f02dbf59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 28 Oct 2025 15:54:25 +0800 Subject: [PATCH 306/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 61e1e6a00..ef551e354 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1331,5 +1331,6 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 应用市场新增了思源笔记的安装及使用。 应用市场新增了开源Drawnix白板工具的安装及使用。 应用市场新增了PanSou网盘搜索工具的安装及使用。 +优化LDNMP环境中nginx将根据核心数优化并发连接数。 ------------------------ From dc533423d68a1d0664a348f26d8b0c084827c228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:26:27 +0800 Subject: [PATCH 307/553] Update kejilion.sh --- cn/kejilion.sh | 97 +++++++++++++++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 36 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index acec28ea7..cd698506a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.0" +sh_v="4.2.1" gl_hui='\e[37m' @@ -236,6 +236,11 @@ check_disk_space() { install_dependency() { install wget unzip tar jq grep + + check_swap + auto_optimize_dns + prefer_ipv4 + } remove() { @@ -381,23 +386,23 @@ 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://docker.1ms.run", + "https://docker.m.ixdev.cn", "https://hub.rat.dev", - "https://dhub.kubesre.xyz", - "https://cjie.eu.org", - "https://docker.1panelproxy.com", + "https://dockerproxy.net", + "https://docker-registry.nmqu.com", + "https://docker.amingg.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" + "https://hub1.nat.tf", + "https://hub2.nat.tf", + "https://hub3.nat.tf", + "https://docker.m.daocloud.io", + "https://docker.kejilion.pro", + "https://docker.367231.xyz", + "https://hub.1panel.dev", + "https://dockerproxy.cool", + "https://docker.apiba.cn", + "https://proxy.vvvv.ee" ] } EOF @@ -1379,9 +1384,46 @@ update_docker_compose_with_db_creds() { } + + + +auto_optimize_dns() { + # 获取国家代码(如 CN、US 等) + local country=$(curl -s ipinfo.io/country) + + # 根据国家设置 DNS + 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 + + # 调用设置 DNS 的函数(需你定义) + set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + + # 打印结果 + echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" +} + + +prefer_ipv4() { +grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf +echo "已切换为 IPv4 优先" +send_stats "已切换为 IPv4 优先" +} + + + + install_ldnmp() { - check_swap update_docker_compose_with_db_creds cd /home/web && docker compose up -d @@ -13042,10 +13084,7 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ - || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "已切换为 IPv4 优先" - send_stats "已切换为 IPv4 优先" + prefer_ipv4 ;; 2) rm -f /etc/gai.conf @@ -13875,21 +13914,7 @@ EOF 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}" + auto_optimize_dns echo "------------------------------------------------" install_docker From b553a23276c81d0bcad0eca26f45216577458250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:27:40 +0800 Subject: [PATCH 308/553] Update kejilion.sh --- kejilion.sh | 97 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 36 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index bda83096c..a41c72dfb 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.0" +sh_v="4.2.1" gl_hui='\e[37m' @@ -236,6 +236,11 @@ check_disk_space() { install_dependency() { install wget unzip tar jq grep + + check_swap + auto_optimize_dns + prefer_ipv4 + } remove() { @@ -381,23 +386,23 @@ 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://docker.1ms.run", + "https://docker.m.ixdev.cn", "https://hub.rat.dev", - "https://dhub.kubesre.xyz", - "https://cjie.eu.org", - "https://docker.1panelproxy.com", + "https://dockerproxy.net", + "https://docker-registry.nmqu.com", + "https://docker.amingg.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" + "https://hub1.nat.tf", + "https://hub2.nat.tf", + "https://hub3.nat.tf", + "https://docker.m.daocloud.io", + "https://docker.kejilion.pro", + "https://docker.367231.xyz", + "https://hub.1panel.dev", + "https://dockerproxy.cool", + "https://docker.apiba.cn", + "https://proxy.vvvv.ee" ] } EOF @@ -1379,9 +1384,46 @@ update_docker_compose_with_db_creds() { } + + + +auto_optimize_dns() { + # 获取国家代码(如 CN、US 等) + local country=$(curl -s ipinfo.io/country) + + # 根据国家设置 DNS + 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 + + # 调用设置 DNS 的函数(需你定义) + set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + + # 打印结果 + echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" +} + + +prefer_ipv4() { +grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf +echo "已切换为 IPv4 优先" +send_stats "已切换为 IPv4 优先" +} + + + + install_ldnmp() { - check_swap update_docker_compose_with_db_creds cd /home/web && docker compose up -d @@ -13042,10 +13084,7 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ - || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "已切换为 IPv4 优先" - send_stats "已切换为 IPv4 优先" + prefer_ipv4 ;; 2) rm -f /etc/gai.conf @@ -13875,21 +13914,7 @@ EOF 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}" + auto_optimize_dns echo "------------------------------------------------" install_docker From daca6a54edb99172eff88becedb8c769b717efa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:30:16 +0800 Subject: [PATCH 309/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ef551e354..af7d3f079 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1333,4 +1333,8 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 应用市场新增了PanSou网盘搜索工具的安装及使用。 优化LDNMP环境中nginx将根据核心数优化并发连接数。 ------------------------ +2025-10-21 v4.2.0 +安装LDNMP/NGINX建站环境是检测网络进行dns优化IP优先调整,解决因网络问题无法安装环境的问题。 +国内安装docker环境时的加速站列表进行更新。 +------------------------ From af6e97ff4032fd5a226578a64db3f99958a44f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:30:46 +0800 Subject: [PATCH 310/553] Update version number to v4.2.1 in log file Updated version number from v4.2.0 to v4.2.1 and made minor log adjustments. --- kejilion_sh_log.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index af7d3f079..f7f72d38b 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1333,7 +1333,7 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 应用市场新增了PanSou网盘搜索工具的安装及使用。 优化LDNMP环境中nginx将根据核心数优化并发连接数。 ------------------------ -2025-10-21 v4.2.0 +2025-10-30 v4.2.1 安装LDNMP/NGINX建站环境是检测网络进行dns优化IP优先调整,解决因网络问题无法安装环境的问题。 国内安装docker环境时的加速站列表进行更新。 ------------------------ From 36aec52deaa11e34d8098c482004d533fb65d64e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 30 Oct 2025 13:28:23 +0800 Subject: [PATCH 311/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index cd698506a..adc72b8e0 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1407,8 +1407,7 @@ auto_optimize_dns() { # 调用设置 DNS 的函数(需你定义) set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" - # 打印结果 - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + } @@ -13915,6 +13914,7 @@ EOF echo "------------------------------------------------" auto_optimize_dns + echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" echo "------------------------------------------------" install_docker From bdbef892e58db06b21663b6c92c6e3e63aaba95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 30 Oct 2025 13:29:01 +0800 Subject: [PATCH 312/553] Remove duplicate DNS optimization echo statement Removed duplicate echo statement for DNS optimization. --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index a41c72dfb..a511facc4 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1407,8 +1407,7 @@ auto_optimize_dns() { # 调用设置 DNS 的函数(需你定义) set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" - # 打印结果 - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + } @@ -13915,6 +13914,7 @@ EOF echo "------------------------------------------------" auto_optimize_dns + echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" echo "------------------------------------------------" install_docker From efc6c05f185339500d6ba7597fd44eaa6c5e5ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 31 Oct 2025 15:04:25 +0800 Subject: [PATCH 313/553] Update ENABLED_PLUGINS in kejilion.sh --- cn/kejilion.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index adc72b8e0..5f927dc95 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12532,7 +12532,12 @@ while true; do -p ${docker_port}:80 \ -v /home/docker/pansou/data:/app/data \ -v /home/docker/pansou/logs:/app/logs \ - -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + -e ENABLED_PLUGINS="hunhepan,jikepan,panwiki,pansearch,panta,qupansou, +susu,thepiratebay,wanou,xuexizhinan,panyq,zhizhen,labi,muou,ouge,shandian, +duoduo,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang, +libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe, +sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan, +discourse,yunsou,ahhhhfs,nsgame,gying" \ ghcr.io/fish2018/pansou-web } From b2ee2b359143915d9696b23cba602c8c416f1036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 31 Oct 2025 15:05:00 +0800 Subject: [PATCH 314/553] Update ENABLED_PLUGINS environment variable --- kejilion.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index a511facc4..3389d8b33 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12532,7 +12532,12 @@ while true; do -p ${docker_port}:80 \ -v /home/docker/pansou/data:/app/data \ -v /home/docker/pansou/logs:/app/logs \ - -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + -e ENABLED_PLUGINS="hunhepan,jikepan,panwiki,pansearch,panta,qupansou, +susu,thepiratebay,wanou,xuexizhinan,panyq,zhizhen,labi,muou,ouge,shandian, +duoduo,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang, +libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe, +sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan, +discourse,yunsou,ahhhhfs,nsgame,gying" \ ghcr.io/fish2018/pansou-web } From 8f73d224eda5e24cdaefdafe9044d1451874fd95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 31 Oct 2025 15:06:14 +0800 Subject: [PATCH 315/553] Update PanSou cloud disk search sources Added more search sources for PanSou cloud disk in the application market. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index f7f72d38b..8e140e3a5 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1336,5 +1336,6 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 2025-10-30 v4.2.1 安装LDNMP/NGINX建站环境是检测网络进行dns优化IP优先调整,解决因网络问题无法安装环境的问题。 国内安装docker环境时的加速站列表进行更新。 +应用市场中PanSou网盘搜索增加更多搜索源。 ------------------------ From 954984b56d8c02330f42ea80d77bf4f3e4f5bbdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 1 Nov 2025 21:43:51 +0800 Subject: [PATCH 316/553] Add WP_REDIS_MAXTTL to wp-config-sample.php --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 5f927dc95..4d821d9d0 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3275,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-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 + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400);" >> /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 From a4da9d25e9decc3a67e64b8e7c54b920488afc2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 1 Nov 2025 21:44:56 +0800 Subject: [PATCH 317/553] Add WP_REDIS_MAXTTL to wp-config-sample.php --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 3389d8b33..bb6c7122a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3275,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-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 + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400);" >> /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 From c01225afff366fa2b2ef5101890d22b34d20f8d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 1 Nov 2025 21:54:31 +0800 Subject: [PATCH 318/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index bb6c7122a..7bc22f7fe 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3275,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-latest.zip unzip latest.zip rm latest.zip - echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400);" >> /home/web/html/$yuming/wordpress/wp-config-sample.php + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400); define('WP_CACHE_KEY_SALT', '${yuming}_');" >> /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 From 2fe6558a279e4763ea02103d6bdab92cd378ff56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 1 Nov 2025 21:56:56 +0800 Subject: [PATCH 319/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 4d821d9d0..6e133f36b 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3275,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-latest.zip unzip latest.zip rm latest.zip - echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400);" >> /home/web/html/$yuming/wordpress/wp-config-sample.php + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400); define('WP_CACHE_KEY_SALT', '${yuming}_');" >> /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 From 7a4cfd2437cc980239d22acc1c4003ae8c23948a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 2 Nov 2025 04:09:42 +0000 Subject: [PATCH 320/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-11-02=2004:09:42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 210 ++++++++++++++++++++++----------------- jp/kejilion.sh | 262 ++++++++++++++++++++++++++++--------------------- kr/kejilion.sh | 234 ++++++++++++++++++++++++------------------- tw/kejilion.sh | 118 ++++++++++++++-------- 4 files changed, 480 insertions(+), 344 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 333c368f2..672e1795c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.0" +sh_v="4.2.1" gl_hui='\e[37m' @@ -236,6 +236,11 @@ check_disk_space() { install_dependency() { install wget unzip tar jq grep + + check_swap + auto_optimize_dns + prefer_ipv4 + } remove() { @@ -381,23 +386,23 @@ 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://docker.1ms.run", + "https://docker.m.ixdev.cn", "https://hub.rat.dev", - "https://dhub.kubesre.xyz", - "https://cjie.eu.org", - "https://docker.1panelproxy.com", + "https://dockerproxy.net", + "https://docker-registry.nmqu.com", + "https://docker.amingg.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" + "https://hub1.nat.tf", + "https://hub2.nat.tf", + "https://hub3.nat.tf", + "https://docker.m.daocloud.io", + "https://docker.kejilion.pro", + "https://docker.367231.xyz", + "https://hub.1panel.dev", + "https://dockerproxy.cool", + "https://docker.apiba.cn", + "https://proxy.vvvv.ee" ] } EOF @@ -915,7 +920,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add shutdown rule + # Add a shutdown rule 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 @@ -1379,9 +1384,45 @@ update_docker_compose_with_db_creds() { } + + + +auto_optimize_dns() { + # Get the country code (such as CN, US, etc.) + local country=$(curl -s ipinfo.io/country) + + # Set DNS based on 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 + + # Call the function that sets DNS (needs to be defined by you) + set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + + +} + + +prefer_ipv4() { +grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf +echo "Switched to IPv4 priority" +send_stats "Switched to IPv4 priority" +} + + + + install_ldnmp() { - check_swap update_docker_compose_with_db_creds cd /home/web && docker compose up -d @@ -2247,9 +2288,11 @@ web_optimization() { 1) send_stats "site standards mode" - # nginx tuning - sed -i 's/worker_connections.*/worker_connections 10240;/' /home/web/nginx.conf - sed -i 's/worker_processes.*/worker_processes 4;/' /home/web/nginx.conf + local cpu_cores=$(nproc) + local connections=$((1024 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf + # php tuning wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2288,8 +2331,10 @@ web_optimization() { send_stats "Site high performance mode" # nginx tuning - sed -i 's/worker_connections.*/worker_connections 20480;/' /home/web/nginx.conf - sed -i 's/worker_processes.*/worker_processes 8;/' /home/web/nginx.conf + local cpu_cores=$(nproc) + local connections=$((2048 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf # php tuning wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2543,7 +2588,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 @@ -2562,7 +2607,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 @@ -2803,7 +2848,7 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3230,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-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 + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400); define('WP_CACHE_KEY_SALT', '${yuming}_');" >> /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 @@ -3454,7 +3499,7 @@ ldnmp_Proxy_backend_stream() { # Get agent name read -rp "Please enter a proxy forwarding name (e.g. mysql_proxy):" proxy_name if [ -z "$proxy_name" ]; then - echo "name cannot be empty"; return 1 + echo "Name cannot be empty"; return 1 fi # Get listening port @@ -4100,7 +4145,7 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" ;; 5) echo "Reverse intranet penetration service into domain name access" @@ -4197,7 +4242,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" ;; 4) @@ -4972,7 +5017,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall windows 11" + send_stats "Reinstall Windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5585,7 +5630,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5848,9 +5893,9 @@ send_stats "Command Favorites" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# Create a backup +# Create backup create_backup() { - send_stats "Create a backup" + send_stats "Create backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # Prompt user for backup directory @@ -5892,7 +5937,7 @@ create_backup() { echo "- $path" done - # Create a backup + # Create backup echo "Creating backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6035,7 +6080,7 @@ add_connection() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started to enter the key content, continue adding + # If it is the first line or you have already started entering the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi @@ -6383,7 +6428,7 @@ add_task() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started to enter the key content, continue adding + # If it is the first line or you have already started entering the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi @@ -7145,7 +7190,7 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # Mirror + # mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -7306,7 +7351,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in with key + # Log in using key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7673,7 +7718,7 @@ linux_test() { echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" echo -e "${gl_kjlan}15. ${gl_bai}nxtrace specifies IP backhaul test script" echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three network line test" - echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunctional speed test script" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc multi-function speed test script" echo -e "${gl_kjlan}18. ${gl_bai}NetQuality network quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" @@ -9460,7 +9505,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" ;; *) @@ -9514,7 +9559,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -9612,7 +9657,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10497,7 +10542,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10719,7 +10764,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10770,7 +10815,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10811,7 +10856,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10874,7 +10919,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11202,7 +11247,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11423,7 +11468,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11473,7 +11518,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11608,7 +11653,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11835,7 +11880,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11973,7 +12018,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12027,7 +12072,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12260,7 +12305,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12330,7 +12375,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12399,7 +12444,7 @@ while true; do docker_app_uninstall() { cd /home/docker/umami/ && docker compose down --rmi all rm -rf /home/docker/umami - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12487,7 +12532,12 @@ while true; do -p ${docker_port}:80 \ -v /home/docker/pansou/data:/app/data \ -v /home/docker/pansou/logs:/app/logs \ - -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + -e ENABLED_PLUGINS="hunhepan,jikepan,panwiki,pansearch,panta,qupansou, +susu,thepiratebay,wanou,xuexizhinan,panyq,zhizhen,labi,muou,ouge,shandian, +duoduo,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang, +libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe, +sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan, +discourse,yunsou,ahhhhfs,nsgame,gying" \ ghcr.io/fish2018/pansou-web } @@ -12549,7 +12599,7 @@ while true; do r) root_use send_stats "Restore all apps" - echo "Available app backups" + echo "Available application backups" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12607,9 +12657,9 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" + echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" - echo -e "${gl_kjlan}7. ${gl_bai}Workspace No. 7" + echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" echo -e "${gl_kjlan}10. ${gl_bai}Workspace 10" @@ -12782,7 +12832,7 @@ linux_Settings() { while true; do clear - # send_stats "system tools" + # send_stats "System Tools" echo -e "system tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}Set script startup shortcut key${gl_kjlan}2. ${gl_bai}Change login password" @@ -13038,15 +13088,12 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ - || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "Switched to IPv4 priority" - send_stats "Switched to IPv4 priority" + prefer_ipv4 ;; 2) rm -f /etc/gai.conf echo "Switched to IPv6 first" - send_stats "Switched to IPv6 first" + send_stats "Switched to IPv6 priority" ;; 3) @@ -13584,7 +13631,7 @@ EOF echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}Current limiting shutdown function is not currently enabled${gl_bai}" + echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" fi echo @@ -13871,20 +13918,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 7/10. Set time zone to${gl_huang}Shanghai${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 + auto_optimize_dns echo -e "[${gl_lv}OK${gl_bai}] 8/10. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" @@ -14137,7 +14171,7 @@ linux_file() { read -e -p "Please enter the file or directory path to copy:" src_path if [ ! -e "$src_path" ]; then echo "Error: File or directory does not exist." - send_stats "Failed to copy file or directory: File or directory does not exist" + send_stats "Copying file or directory failed: File or directory does not exist" continue fi @@ -14248,7 +14282,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}connect to$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}Connect to$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14282,7 +14316,7 @@ while true; do echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}Install technology lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}custom directive" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom instructions" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14399,7 +14433,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14584,7 +14618,7 @@ done k_info() { -send_stats "k command reference use case" +send_stats "k command reference examples" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "The following is a reference use case for the k command:" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index f75fad562..46d03be9b 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.0" +sh_v="4.2.1" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -236,6 +236,11 @@ check_disk_space() { install_dependency() { install wget unzip tar jq grep + + check_swap + auto_optimize_dns + prefer_ipv4 + } remove() { @@ -245,7 +250,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストール中$package...${gl_bai}" + 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 @@ -381,23 +386,23 @@ 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://docker.1ms.run", + "https://docker.m.ixdev.cn", "https://hub.rat.dev", - "https://dhub.kubesre.xyz", - "https://cjie.eu.org", - "https://docker.1panelproxy.com", + "https://dockerproxy.net", + "https://docker-registry.nmqu.com", + "https://docker.amingg.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" + "https://hub1.nat.tf", + "https://hub2.nat.tf", + "https://hub3.nat.tf", + "https://docker.m.daocloud.io", + "https://docker.kejilion.pro", + "https://docker.367231.xyz", + "https://hub.1panel.dev", + "https://dockerproxy.cool", + "https://docker.apiba.cn", + "https://proxy.vvvv.ee" ] } EOF @@ -897,7 +902,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンしました" + send_stats "ポートがオープンされました" } @@ -1130,7 +1135,7 @@ iptables_panel() { echo "------------------------" echo "13. DDOS 防御を開始します。 14. DDOS 防御をオフにします。" echo "------------------------" - echo "15. 指定した国の IP をブロック 16. 指定した国の IP のみを許可" + echo "15. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" echo "17. 指定国における知的財産制限を解除する" echo "------------------------" echo "0. 前のメニューに戻る" @@ -1379,9 +1384,45 @@ update_docker_compose_with_db_creds() { } + + + +auto_optimize_dns() { + # 国コードを取得します (CN、US など)。 + local country=$(curl -s ipinfo.io/country) + + # 国に基づいてDNSを設定する + 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 + + # DNS を設定する関数を呼び出します (ユーザーが定義する必要があります) + set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + + +} + + +prefer_ipv4() { +grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf +echo "IPv4優先に切り替えました" +send_stats "IPv4優先に切り替えました" +} + + + + install_ldnmp() { - check_swap update_docker_compose_with_db_creds cd /home/web && docker compose up -d @@ -1663,7 +1704,7 @@ cf_purge_cache() { # キャッシュをクリアするかどうかをユーザーに確認する read -e -p "Cloudflareのキャッシュをクリアする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF 情報は次の場所に保存されます。$CONFIG_FILECF 情報は後で変更できます。" + echo "CF情報は以下に保存されます。$CONFIG_FILECF 情報は後で変更できます。" read -e -p "API_TOKEN を入力してください:" API_TOKEN read -e -p "CF ユーザー名を入力してください:" EMAIL read -e -p "zone_id を入力してください (複数の場合はスペースで区切ります):" -a ZONE_IDS @@ -1868,7 +1909,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # ブロトリを閉じる: コメントを追加 + # Brotliを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -1999,7 +2040,7 @@ web_security() { echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされた IP をすべてクリアします。" + echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" echo "------------------------" echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" @@ -2118,7 +2159,7 @@ web_security() { echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" - echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側にある API トークンを選択して、${gl_huang}Global API Key${gl_bai}" + echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -2234,7 +2275,7 @@ web_optimization() { send_stats "LDNMP環境の最適化" echo -e "LDNMP環境の最適化${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" + echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" echo "------------------------" echo "3. gzip 圧縮をオンにする 4. gzip 圧縮をオフにする" echo "5. br 圧縮をオンにする 6. br 圧縮をオフにする" @@ -2247,9 +2288,11 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((1024 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf + # PHPのチューニング wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2288,8 +2331,10 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((2048 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf # PHPのチューニング wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2490,7 +2535,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8をチェックして許可します。 + # ローカルネットワーク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 @@ -2507,7 +2552,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8をチェックして許可します。 + # ローカルネットワーク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 @@ -2762,7 +2807,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -3230,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-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 + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400); define('WP_CACHE_KEY_SALT', '${yuming}_');" >> /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 @@ -3336,7 +3381,7 @@ list_stream_services() { # 上流ブロックでサーバーのバックエンド IP:ポートを取得します。 backend=$(grep -Po '(?<=server )[^;]+' "$conf" | head -n1) - # リッスンポートを取得する + # リッスンポートの取得 listen_port=$(grep -Po '(?<=listen )[^;]+' "$conf" | head -n1) # デフォルトのローカルIP @@ -3417,7 +3462,7 @@ stream_panel() { 4) ldnmp_Proxy_backend_stream add_app_id - send_stats "レイヤ 4 プロキシを追加する" + send_stats "レイヤー 4 プロキシを追加する" ;; 5) send_stats "転送設定の編集" @@ -4018,7 +4063,7 @@ generate_access_urls() { done fi - # HTTPS 構成の処理 + # HTTPS 構成を処理する for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -4586,7 +4631,7 @@ correct_ssh_config() { local sshd_config="/etc/ssh/sshd_config" - # 見つかった場合、PasswordAuthentication は Yes に設定されます + # 見つかった場合は、PasswordAuthentication が Yes に設定されます 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" @@ -5250,7 +5295,7 @@ elrepo() { echo "ビデオ紹介: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat シリーズのディストリビューション CentOS/RedHat/Alma/Rocky/oracle のみをサポートします" - echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" + echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試して、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice @@ -5298,7 +5343,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドのパラメータを構築する + # clamscan コマンドパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5550,7 +5595,7 @@ Kernel_optimize() { root_use while true; do clear - send_stats "Linux カーネルのチューニング管理" + send_stats "Linuxカーネルチューニング管理" echo "Linuxシステムのカーネルパラメータの最適化" echo "ビデオ紹介: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" @@ -5558,7 +5603,7 @@ Kernel_optimize() { echo -e "${gl_huang}ヒント:${gl_bai}本番環境では注意して使用してください。" echo "--------------------" echo "1. ハイパフォーマンス最適化モード: システムのパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU 設定を最適化します。" - echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常的な使用に適しています。" + echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常の使用に適しています。" echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" echo "5. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" @@ -5585,7 +5630,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モデル" + send_stats "ウェブサイト最適化モード" ;; 4) cd ~ @@ -5848,9 +5893,9 @@ send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップを作成する +# バックアップの作成 create_backup() { - send_stats "バックアップを作成する" + send_stats "バックアップの作成" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5892,7 +5937,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6313,7 +6358,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6361,7 +6406,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポートを入力してください (デフォルトは 22):" port + read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port port=${port:-22} echo "認証方法を選択してください:" @@ -6529,7 +6574,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期のスケジュールされたタスクを追加する" + send_stats "同期スケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6731,7 +6776,7 @@ linux_tools() { while true; do clear - # send_stats "基本ツール" + # 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}" @@ -6803,7 +6848,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftop をインストールする" + send_stats "iftopをインストールする" ;; 7) clear @@ -7097,7 +7142,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" + echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7107,7 +7152,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7118,7 +7163,7 @@ docker_ssh_migration() { echo "# docker-compose 復元:$project_name" >> "$RESTORE_SCRIPT" echo "cd \"$project_dir\" && docker compose up -d" >> "$RESTORE_SCRIPT" PACKED_COMPOSE_PATHS["$project_dir"]=1 - echo -e "${GREEN}プロジェクトの作成 [$project_name]パッケージ化:${project_dir}${NC}" + echo -e "${GREEN}プロジェクトの作成 [$project_name] パッケージ内容:${project_dir}${NC}" else echo -e "${RED}docker-compose.yml が見つからないため、このコンテナをスキップします...${NC}" fi @@ -7192,7 +7237,7 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりません。復元ディレクトリのパスを入力してください:" original_path - # 構成プロジェクトのコンテナがすでに実行されているかどうかを確認します + # 作成プロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then echo -e "${YELLOW}プロジェクトの作成 [$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" @@ -7274,7 +7319,7 @@ docker_ssh_migration() { [[ "$has_container" == false ]] && echo -e "${YELLOW}共通コンテナのバックアップ情報が見つかりません${NC}" - # /home/docker 下のファイルを復元する + # /home/docker 下のファイルを復元します if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker @@ -7299,14 +7344,14 @@ docker_ssh_migration() { read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER - read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーでログイン + # キーを使用してログインする scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7424,7 +7469,7 @@ linux_docker() { echo -e "Docker ボリューム:${gl_lv}$volume_count${gl_bai}" docker volume ls echo "" - echo -e "Dockerネットワーク:${gl_lv}$network_count${gl_bai}" + echo -e "Docker ネットワーク:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7523,7 +7568,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -7857,7 +7902,7 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # CPU コアの数と占有率を入力するようユーザーに求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 + # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 read -e -p "CPU コアの数を入力してください [デフォルト:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} @@ -8703,7 +8748,7 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "エラー: リモート サーバーの IP を入力してください。" @@ -8927,7 +8972,7 @@ linux_ldnmp() { read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}长时间不更新环境的用户,请慎重更新LDNMP环境,会有数据库更新失败的风险。确定更新LDNMP环境吗?(Y/N): ")" choice case "$choice" in [Yy]) - send_stats "LDNMP環境の完全なアップデート" + send_stats "LDNMP環境の完全アップデート" cd /home/web/ docker compose down --rmi all @@ -9013,7 +9058,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9051,7 +9096,7 @@ while true; do echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}ITツールツールボックス" echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstrBot チャットボット フレームワーク" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstBot チャットボット フレームワーク" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV プライベートムービー${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" @@ -9061,7 +9106,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos の個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}85. ${color85}イミッチピクチャービデオマネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}Owncast の自己ホスト型ライブ ストリーミング プラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBox ファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" @@ -9276,7 +9321,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "ネザ監視$check_docker $update_status" + echo -e "ネザモニタリング$check_docker $update_status" echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" echo "公式 Web サイト構築ドキュメント: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -12159,7 +12204,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12487,7 +12532,12 @@ while true; do -p ${docker_port}:80 \ -v /home/docker/pansou/data:/app/data \ -v /home/docker/pansou/logs:/app/logs \ - -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + -e ENABLED_PLUGINS="hunhepan,jikepan,panwiki,pansearch,panta,qupansou, +susu,thepiratebay,wanou,xuexizhinan,panyq,zhizhen,labi,muou,ouge,shandian, +duoduo,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang, +libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe, +sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan, +discourse,yunsou,ahhhhfs,nsgame,gying" \ ghcr.io/fish2018/pansou-web } @@ -12519,7 +12569,7 @@ while true; do case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then @@ -12549,7 +12599,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリのバックアップ" + echo "利用可能なアプリケーションのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12597,7 +12647,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12607,9 +12657,9 @@ linux_work() { 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}5. ${gl_bai}ワークスペースNo.5" echo -e "${gl_kjlan}6. ${gl_bai}作業エリア6" - echo -e "${gl_kjlan}7. ${gl_bai}ワークスペースNo.7" + echo -e "${gl_kjlan}7. ${gl_bai}作業エリア 7" echo -e "${gl_kjlan}8. ${gl_bai}作業エリア8" echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo.9" echo -e "${gl_kjlan}10. ${gl_bai}ワークスペース10" @@ -12782,12 +12832,12 @@ linux_Settings() { while true; do clear - # send_stats「システムツール」 + # 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}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" - echo -e "${gl_kjlan}5. ${gl_bai}すべてのポートを開く${gl_kjlan}6. ${gl_bai}SSH接続ポートの変更" + 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}------------------------" @@ -12858,7 +12908,7 @@ linux_Settings() { echo -e "現在のPythonのバージョン番号:${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 "他のバージョンを確認してください: https://www.python.org/downloads/" echo "------------" read -e -p "インストールする Python のバージョン番号を入力します (終了するには 0 を入力します)。" py_new_v @@ -13038,10 +13088,7 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ - || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "IPv4優先に切り替えました" - send_stats "IPv4優先に切り替えました" + prefer_ipv4 ;; 2) rm -f /etc/gai.conf @@ -13259,7 +13306,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得する + # 現在のシステム時刻を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -13584,7 +13631,7 @@ EOF 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません。${gl_bai}" fi echo @@ -13688,7 +13735,7 @@ EOF 25) root_use - send_stats "電報警告" + send_stats "電報警報" echo "TG-bot監視・早期警告機能" echo "動画紹介:https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" @@ -13871,20 +13918,7 @@ EOF 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 + auto_optimize_dns echo -e "[${gl_lv}OK${gl_bai}】8/10。 DNSアドレスを自動的に最適化する${gl_huang}${gl_bai}" echo "------------------------------------------------" @@ -13928,7 +13962,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -14121,7 +14155,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14248,7 +14282,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}に接続する$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}に接続します$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14277,12 +14311,12 @@ while true; do 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}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}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}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}" @@ -14322,7 +14356,7 @@ while true; do 5) clear - send_stats "クラスタを復元する" + send_stats "クラスターを復元する" echo "servers.py をアップロードし、任意のキーを押してアップロードを開始してください。" echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}ファイルに${gl_huang}/root/cluster/${gl_bai}復元完了!" break_end @@ -14399,7 +14433,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS セール${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14456,7 +14490,7 @@ while true; do fi echo "------------------------" - echo "1. 今すぐ更新します 2. 自動更新をオンにします 3. 自動更新をオフにします" + echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" echo "------------------------" echo "0. メインメニューに戻る" echo "------------------------" @@ -14548,7 +14582,7 @@ echo -e "${gl_kjlan}p. ${gl_bai}Eudemons Parlu サーバー開始スクリプ 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}0. ${gl_bai}終了スクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice @@ -14590,8 +14624,8 @@ echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" -echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | k nano wget をアンインストールする | nano wgetをアンインストールします" -echo "システム k 更新を更新します。 kアップデート" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" +echo "システム k アップデートを更新 | kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" @@ -14619,7 +14653,7 @@ echo "docker イメージ管理 k docker img |k docker image" echo "LDNMP サイト管理 k Web" echo "LDNMP キャッシュのクリーニング k Web キャッシュ" echo "WordPress をインストールします。 kワードプレス | k wp xxx.com" -echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" +echo "リバース プロキシをインストールします k fd |k rp |k リバース プロキシ |k fd xxx.com" echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" echo "L4 ロード バランシング k ストリーム |k L4 ロード バランシングをインストールする" echo "ファイアウォール パネル k fhq |k ファイアウォール" @@ -14719,7 +14753,7 @@ else swap) shift - send_stats "仮想メモリを素早く設定する" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; @@ -14818,7 +14852,7 @@ else shift case $1 in install|安装) - send_stats "Dockerを素早くインストールする" + send_stats "Docker をすばやくインストールする" install_docker ;; ps|容器) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 110dc751e..ae41b45fb 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.0" +sh_v="4.2.1" gl_hui='\e[37m' @@ -236,6 +236,11 @@ check_disk_space() { install_dependency() { install wget unzip tar jq grep + + check_swap + auto_optimize_dns + prefer_ipv4 + } remove() { @@ -381,23 +386,23 @@ 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://docker.1ms.run", + "https://docker.m.ixdev.cn", "https://hub.rat.dev", - "https://dhub.kubesre.xyz", - "https://cjie.eu.org", - "https://docker.1panelproxy.com", + "https://dockerproxy.net", + "https://docker-registry.nmqu.com", + "https://docker.amingg.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" + "https://hub1.nat.tf", + "https://hub2.nat.tf", + "https://hub3.nat.tf", + "https://docker.m.daocloud.io", + "https://docker.kejilion.pro", + "https://docker.367231.xyz", + "https://hub.1panel.dev", + "https://dockerproxy.cool", + "https://docker.apiba.cn", + "https://proxy.vvvv.ee" ] } EOF @@ -1124,7 +1129,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 삭제합니다." + echo "7. 지정된 IP 지우기" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1347,7 +1352,7 @@ install_ldnmp_conf() { 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 파일에서 바꾸기 + # 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 @@ -1379,9 +1384,45 @@ update_docker_compose_with_db_creds() { } + + + +auto_optimize_dns() { + # 국가 코드(예: CN, US 등)를 가져옵니다. + local country=$(curl -s ipinfo.io/country) + + # 국가에 따라 DNS 설정 + 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 + + # DNS를 설정하는 함수 호출(사용자가 정의해야 함) + set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + + +} + + +prefer_ipv4() { +grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf +echo "IPv4 우선순위로 전환됨" +send_stats "IPv4 우선순위로 전환됨" +} + + + + install_ldnmp() { - check_swap update_docker_compose_with_db_creds cd /home/web && docker compose up -d @@ -1531,7 +1572,7 @@ certs_status() { echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." - echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하세요." + echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." break_end clear echo "다시 배포해 보세요.$webname" @@ -2247,9 +2288,11 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((1024 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf + # PHP 튜닝 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2288,8 +2331,10 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((2048 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf # PHP 튜닝 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2381,7 +2426,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker="${gl_hui}가 ${gl_bai}" 설치되지 않았습니다. +# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -2446,7 +2491,7 @@ check_docker_image_update() { 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) @@ -2543,7 +2588,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 @@ -2562,7 +2607,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 @@ -2659,7 +2704,7 @@ clear_host_port_rules() { install iptables - # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi @@ -2762,7 +2807,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2875,7 +2920,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3188,16 +3233,16 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치 정보는 다음과 같습니다." + echo "$webname설치정보는 다음과 같습니다." } nginx_web_on() { clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "https://$yuming" } @@ -3230,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-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 + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400); define('WP_CACHE_KEY_SALT', '${yuming}_');" >> /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 @@ -3350,7 +3395,7 @@ list_stream_services() { proto="tcp" fi - # 접속 수신 IP:포트 + # 스플라이스 청취 IP:포트 local_addr="$local_ip:$listen_port" printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" @@ -3494,7 +3539,7 @@ ldnmp_Proxy_backend_stream() { docker exec nginx nginx -s reload clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "------------------------" echo "방문 주소:" ip_address @@ -3814,7 +3859,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3876,7 +3921,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -4123,7 +4168,7 @@ frps_panel() { 8) send_stats "IP 접근 차단" - echo "역방향 도메인 이름 접근을 가지고 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." + echo "역방향 도메인 이름 접근이 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." read -e -p "차단할 포트를 입력하세요:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -5079,7 +5124,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod 커널이 업데이트되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -5089,7 +5134,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod 커널이 제거되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" server_reboot ;; @@ -5143,7 +5188,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -5232,7 +5277,7 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo 커널이 제거되었습니다. 다시 시작한 후 적용" + echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" send_stats "Red Hat 커널 제거" server_reboot @@ -5250,7 +5295,7 @@ elrepo() { echo "영상 소개: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat 시리즈 배포판 CentOS/RedHat/Alma/Rocky/oracle만 지원" - echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경도 주의해서 업그레이드하시는 것을 추천드립니다!" + echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경을 주의해서 업그레이드하시는 것을 추천드립니다!" echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5585,7 +5630,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -6031,11 +6076,11 @@ add_connection() { echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -6313,7 +6358,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6379,11 +6424,11 @@ add_task() { echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -7065,7 +7110,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 중...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업할 컨테이너의 이름을 입력하십시오(여러 개의 공백을 구분하고 Enter를 눌러 실행 중인 모든 컨테이너를 백업하십시오)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers install tar jq gzip install_docker @@ -7204,7 +7249,7 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name]가 다음 위치로 추출되었습니다.$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7306,7 +7351,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키로 로그인 + # 키를 사용하여 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7493,7 +7538,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7539,7 +7584,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -9013,7 +9058,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9276,7 +9321,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "나타 모니터링$check_docker $update_status" + echo -e "네자 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9388,7 +9433,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -9766,7 +9811,7 @@ while true; do check_docker_app clear echo -e "썬더 풀 서비스$check_docker" - echo "레이치(Leichi)는 창팅테크놀로지가 개발한 WAF 사이트 방화벽 프로그램 패널로, 자동화된 방어를 위해 사이트를 반전시킬 수 있다." + echo "레이치(Leichi)는 창팅테크놀로지(Changting Technology)가 개발한 WAF 사이트 방화벽 프로그램 패널로, 자동화된 방어를 위해 사이트를 반전시킬 수 있다." echo "영상 소개: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then check_docker_app_ip @@ -12487,7 +12532,12 @@ while true; do -p ${docker_port}:80 \ -v /home/docker/pansou/data:/app/data \ -v /home/docker/pansou/logs:/app/logs \ - -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + -e ENABLED_PLUGINS="hunhepan,jikepan,panwiki,pansearch,panta,qupansou, +susu,thepiratebay,wanou,xuexizhinan,panyq,zhizhen,labi,muou,ouge,shandian, +duoduo,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang, +libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe, +sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan, +discourse,yunsou,ahhhhfs,nsgame,gying" \ ghcr.io/fish2018/pansou-web } @@ -12549,7 +12599,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 앱 백업" + echo "사용 가능한 애플리케이션 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12607,9 +12657,9 @@ linux_work() { 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}5. ${gl_bai}작업 공간 5번" echo -e "${gl_kjlan}6. ${gl_bai}작업 영역 6" - echo -e "${gl_kjlan}7. ${gl_bai}작업 공간 7호" + 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" @@ -12709,7 +12759,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12786,10 +12836,10 @@ linux_Settings() { 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}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 Python 버전을 설치합니다." + echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -13038,10 +13088,7 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ - || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "IPv4 우선순위로 전환됨" - send_stats "IPv4 우선순위로 전환됨" + prefer_ipv4 ;; 2) rm -f /etc/gai.conf @@ -13279,7 +13326,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13584,7 +13631,7 @@ EOF 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}" + echo -e "${gl_hui}현재 제한 종료 기능이 현재 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -13830,7 +13877,7 @@ EOF echo "2. 시스템 정크 파일 정리" echo -e "3. 가상 메모리 설정${gl_huang}1G${gl_bai}" echo -e "4. SSH 포트 번호를 다음으로 설정합니다.${gl_huang}5522${gl_bai}" - echo -e "5. 모든 포트를 엽니다" + 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}" @@ -13871,20 +13918,7 @@ EOF 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 + auto_optimize_dns echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소 자동 최적화${gl_huang}${gl_bai}" echo "------------------------------------------------" @@ -13952,7 +13986,7 @@ EOF 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 "개인 정보 보호 및 보안 수집이 꺼졌습니다" + send_stats "개인정보 보호 및 보안 수집이 사용 중지되었습니다." ;; *) break @@ -14137,7 +14171,7 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -14148,7 +14182,7 @@ linux_file() { continue fi - # 디렉토리를 재귀적으로 복사하려면 -r 옵션을 사용하십시오. + # 디렉토리를 반복적으로 복사하려면 -r 옵션을 사용하십시오. cp -r "$src_path" "$dest_path" && echo "복사된 파일 또는 디렉터리$dest_path" || echo "파일 또는 디렉터리를 복사하지 못했습니다." send_stats "파일 또는 디렉터리 복사" ;; @@ -14248,7 +14282,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}연결하다$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}연결 대상$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14282,7 +14316,7 @@ while true; do 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}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}" @@ -14324,7 +14358,7 @@ while true; do clear send_stats "클러스터 복원" echo "server.py를 업로드하고 아무 키나 눌러 업로드를 시작하세요!" - echo -e "귀하의${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" + echo -e "업로드해주세요${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" break_end ;; @@ -14396,10 +14430,10 @@ echo "------------------------" echo -e "${gl_lan}DMIT 분기당 $28 US CN2GIA 1 코어 2G 메모리 20G 하드 드라이브 월별 800G 트래픽${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드 드라이브 월 1T 트래픽${gl_bai}" +echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 거래${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14589,7 +14623,7 @@ echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." echo "시작 스크립트 k" -echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 나노 wget을 설치합니다." +echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 nano wget을 설치합니다." echo "패키지 제거 k 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" echo "시스템 k 업데이트 업데이트 | k 업데이트" echo "클린 시스템 정크 k 클린 | 케이 깨끗하다" @@ -14618,12 +14652,12 @@ echo "도커 컨테이너 관리 k 도커 ps |k 도커 컨테이너" echo "도커 이미지 관리 k docker img |k 도커 이미지" echo "LDNMP 사이트 관리 k web" echo "LDNMP 캐시 정리 k 웹 캐시" -echo "WordPress k wp 설치 | k 워드프레스 | kwp xxx.com" +echo "WordPress k wp 설치 | k 워드프레스 | k wp xxx.com" echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "L4 로드 밸런싱 설치 k 스트림 |k L4 로드 밸런싱" echo "방화벽 패널 k fhq |k 방화벽" -echo "포트 k 열기 ddk 8080 |k 포트 8080 열기" +echo "포트 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 "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index ded2d8c10..1e86fa2ba 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.0" +sh_v="4.2.1" gl_hui='\e[37m' @@ -236,6 +236,11 @@ check_disk_space() { install_dependency() { install wget unzip tar jq grep + + check_swap + auto_optimize_dns + prefer_ipv4 + } remove() { @@ -381,23 +386,23 @@ 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://docker.1ms.run", + "https://docker.m.ixdev.cn", "https://hub.rat.dev", - "https://dhub.kubesre.xyz", - "https://cjie.eu.org", - "https://docker.1panelproxy.com", + "https://dockerproxy.net", + "https://docker-registry.nmqu.com", + "https://docker.amingg.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" + "https://hub1.nat.tf", + "https://hub2.nat.tf", + "https://hub3.nat.tf", + "https://docker.m.daocloud.io", + "https://docker.kejilion.pro", + "https://docker.367231.xyz", + "https://hub.1panel.dev", + "https://dockerproxy.cool", + "https://docker.apiba.cn", + "https://proxy.vvvv.ee" ] } EOF @@ -1379,9 +1384,45 @@ update_docker_compose_with_db_creds() { } + + + +auto_optimize_dns() { + # 獲取國家代碼(如 CN、US 等) + local country=$(curl -s ipinfo.io/country) + + # 根據國家設置 DNS + 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 + + # 調用設置 DNS 的函數(需你定義) + set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + + +} + + +prefer_ipv4() { +grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ + || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf +echo "已切換為 IPv4 優先" +send_stats "已切換為 IPv4 優先" +} + + + + install_ldnmp() { - check_swap update_docker_compose_with_db_creds cd /home/web && docker compose up -d @@ -2247,9 +2288,11 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((1024 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf + # php調優 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -2288,8 +2331,10 @@ web_optimization() { 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 + local cpu_cores=$(nproc) + local connections=$((2048 * ${cpu_cores})) + sed -i "s/worker_processes.*/worker_processes ${cpu_cores};/" /home/web/nginx.conf + sed -i "s/worker_connections.*/worker_connections ${connections};/" /home/web/nginx.conf # php調優 wget -O /home/optimized_php.ini ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/optimized_php.ini @@ -3230,7 +3275,7 @@ ldnmp_wp() { wget -O latest.zip ${gh_proxy}github.com/kejilion/Website_source_code/raw/refs/heads/main/wp-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 + echo "define('FS_METHOD', 'direct'); define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', '6379'); define('WP_REDIS_MAXTTL', 86400); define('WP_CACHE_KEY_SALT', '${yuming}_');" >> /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 @@ -12487,7 +12532,12 @@ while true; do -p ${docker_port}:80 \ -v /home/docker/pansou/data:/app/data \ -v /home/docker/pansou/logs:/app/logs \ - -e ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou,wanou" \ + -e ENABLED_PLUGINS="hunhepan,jikepan,panwiki,pansearch,panta,qupansou, +susu,thepiratebay,wanou,xuexizhinan,panyq,zhizhen,labi,muou,ouge,shandian, +duoduo,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang, +libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe, +sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan, +discourse,yunsou,ahhhhfs,nsgame,gying" \ ghcr.io/fish2018/pansou-web } @@ -13038,10 +13088,7 @@ EOF case $choice in 1) - grep -q '^precedence ::ffff:0:0/96 100' /etc/gai.conf 2>/dev/null \ - || echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf - echo "已切換為 IPv4 優先" - send_stats "已切換為 IPv4 優先" + prefer_ipv4 ;; 2) rm -f /etc/gai.conf @@ -13871,20 +13918,7 @@ EOF 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 + auto_optimize_dns echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自動優化DNS地址${gl_huang}${gl_bai}" echo "------------------------------------------------" From 15b3b95be2e62bc504393b179ed0776782e11296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:34:57 +0800 Subject: [PATCH 321/553] Update optimized_php.ini --- optimized_php.ini | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/optimized_php.ini b/optimized_php.ini index e1a3531da..2fe0d64bb 100644 --- a/optimized_php.ini +++ b/optimized_php.ini @@ -13,6 +13,7 @@ session.cookie_secure = 1 session.use_strict_mode = 1 session.use_only_cookies = 1 + ; Opcache配置 opcache.enable=1 opcache.enable_cli=1 @@ -25,9 +26,11 @@ opcache.fast_shutdown=1 opcache.save_comments=1 opcache.file_update_protection=0 opcache.max_wasted_percentage=5 -opcache.jit=tracing +# opcache.jit=tracing +opcache.jit = 0 opcache.jit_buffer_size=64M + ; Realpath Cache配置 realpath_cache_size=4096k realpath_cache_ttl=3600 From 945967b6ac2aa7b82b13e45f16d3e71d65fbcc0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:35:26 +0800 Subject: [PATCH 322/553] Comment out opcache.jit setting in optimized_php.ini --- optimized_php.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optimized_php.ini b/optimized_php.ini index 2fe0d64bb..547435a45 100644 --- a/optimized_php.ini +++ b/optimized_php.ini @@ -26,7 +26,7 @@ opcache.fast_shutdown=1 opcache.save_comments=1 opcache.file_update_protection=0 opcache.max_wasted_percentage=5 -# opcache.jit=tracing +; opcache.jit=tracing opcache.jit = 0 opcache.jit_buffer_size=64M From f7ad2ac89af987ec6c28075d7c188ff0b42f4072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:36:01 +0800 Subject: [PATCH 323/553] Update optimized_php.ini --- optimized_php.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/optimized_php.ini b/optimized_php.ini index 547435a45..5b0f525fd 100644 --- a/optimized_php.ini +++ b/optimized_php.ini @@ -27,8 +27,9 @@ opcache.save_comments=1 opcache.file_update_protection=0 opcache.max_wasted_percentage=5 ; opcache.jit=tracing +; opcache.jit_buffer_size=64M opcache.jit = 0 -opcache.jit_buffer_size=64M + ; Realpath Cache配置 From 11c90d804ac56889297535947813be430611dedf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:42:23 +0800 Subject: [PATCH 324/553] Update optimized_php.ini --- optimized_php.ini | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/optimized_php.ini b/optimized_php.ini index 5b0f525fd..0f25b5b89 100644 --- a/optimized_php.ini +++ b/optimized_php.ini @@ -26,10 +26,8 @@ opcache.fast_shutdown=1 opcache.save_comments=1 opcache.file_update_protection=0 opcache.max_wasted_percentage=5 -; opcache.jit=tracing -; opcache.jit_buffer_size=64M -opcache.jit = 0 - +opcache.jit=tracing +opcache.jit_buffer_size=64M ; Realpath Cache配置 From ac439a9a343a3b53310bb32c3f0af9d590667aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:51:53 +0800 Subject: [PATCH 325/553] Update www.conf --- www.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www.conf b/www.conf index bd04bc093..06cea267f 100644 --- a/www.conf +++ b/www.conf @@ -484,7 +484,7 @@ request_terminate_timeout = 1600 ; Default Value: nothing is defined by default except the values in php.ini and ; specified at startup with the -d argument ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com -php_flag[display_errors] = off +php_flag[display_errors] = on php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 32M From 8c87e97bd451d2c0fe0a6947a962eb5c7d41ae02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 4 Nov 2025 11:58:13 +0800 Subject: [PATCH 326/553] Update www.conf --- www.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www.conf b/www.conf index 06cea267f..bd04bc093 100644 --- a/www.conf +++ b/www.conf @@ -484,7 +484,7 @@ request_terminate_timeout = 1600 ; Default Value: nothing is defined by default except the values in php.ini and ; specified at startup with the -d argument ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com -php_flag[display_errors] = on +php_flag[display_errors] = off php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 32M From 6556f180781415c673933e720ec0226ffd88e6c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:09:27 +0800 Subject: [PATCH 327/553] Update version and reorder maintenance steps --- cn/kejilion.sh | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6e133f36b..f1a310854 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.1" +sh_v="4.2.2" gl_hui='\e[37m' @@ -13581,7 +13581,6 @@ EOF case $sub_choice in 1) f2b_install_sshd - cd ~ f2b_status break_end @@ -13877,12 +13876,14 @@ EOF 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + echo -e "5. 启动fail2ban防御SSH暴力破解" + echo -e "6. 开放所有端口" + echo -e "7. 开启${gl_huang}BBR${gl_bai}加速" + echo -e "8. 设置时区到${gl_huang}上海${gl_bai}" + echo -e "9. 自动优化DNS地址${gl_huang}海外: 1.1.1.1 8.8.8.8 国内: 223.5.5.5 ${gl_bai}" + echo -e "10. 设置网络为${gl_huang}ipv4优先${gl_bai}" + echo -e "11. 安装基础工具${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "12. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" read -e -p "确定一键保养吗?(Y/N): " choice @@ -13892,44 +13893,52 @@ EOF send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + echo -e "[${gl_lv}OK${gl_bai}] 2/12. 清理系统垃圾文件" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. 设置虚拟内存${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 3/12. 设置虚拟内存${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 -e "[${gl_lv}OK${gl_bai}] 4/12. 设置SSH端口号为${gl_huang}5522${gl_bai}" + echo "------------------------------------------------" + f2b_install_sshd + cd ~ + f2b_status + echo -e "[${gl_lv}OK${gl_bai}] 5/12. 启动fail2ban防御SSH暴力破解" + echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}] 5/10. 开放所有端口" + echo -e "[${gl_lv}OK${gl_bai}] 6/12. 开放所有端口" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. 开启${gl_huang}BBR${gl_bai}加速" + echo -e "[${gl_lv}OK${gl_bai}] 7/12. 开启${gl_huang}BBR${gl_bai}加速" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/12. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" auto_optimize_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 9/12. 自动优化DNS地址${gl_huang}${gl_bai}" + echo "------------------------------------------------" + prefer_ipv4 + echo -e "[${gl_lv}OK${gl_bai}] 10/12. 设置网络为${gl_huang}ipv4优先${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 -e "[${gl_lv}OK${gl_bai}] 11/12. 安装基础工具${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. Linux系统内核参数优化" + echo -e "[${gl_lv}OK${gl_bai}] 12/12. Linux系统内核参数优化" echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; From 7aa96dfb7933350cfc4838539edc700215bbafe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:10:01 +0800 Subject: [PATCH 328/553] Update version and modify maintenance steps --- kejilion.sh | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 7bc22f7fe..6fd626fa0 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.1" +sh_v="4.2.2" gl_hui='\e[37m' @@ -13581,7 +13581,6 @@ EOF case $sub_choice in 1) f2b_install_sshd - cd ~ f2b_status break_end @@ -13877,12 +13876,14 @@ EOF 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. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" + echo -e "5. 启动fail2ban防御SSH暴力破解" + echo -e "6. 开放所有端口" + echo -e "7. 开启${gl_huang}BBR${gl_bai}加速" + echo -e "8. 设置时区到${gl_huang}上海${gl_bai}" + echo -e "9. 自动优化DNS地址${gl_huang}海外: 1.1.1.1 8.8.8.8 国内: 223.5.5.5 ${gl_bai}" + echo -e "10. 设置网络为${gl_huang}ipv4优先${gl_bai}" + echo -e "11. 安装基础工具${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "12. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" read -e -p "确定一键保养吗?(Y/N): " choice @@ -13892,44 +13893,52 @@ EOF send_stats "一条龙调优启动" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系统到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系统到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系统垃圾文件" + echo -e "[${gl_lv}OK${gl_bai}] 2/12. 清理系统垃圾文件" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. 设置虚拟内存${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 3/12. 设置虚拟内存${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 -e "[${gl_lv}OK${gl_bai}] 4/12. 设置SSH端口号为${gl_huang}5522${gl_bai}" + echo "------------------------------------------------" + f2b_install_sshd + cd ~ + f2b_status + echo -e "[${gl_lv}OK${gl_bai}] 5/12. 启动fail2ban防御SSH暴力破解" + echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}] 5/10. 开放所有端口" + echo -e "[${gl_lv}OK${gl_bai}] 6/12. 开放所有端口" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. 开启${gl_huang}BBR${gl_bai}加速" + echo -e "[${gl_lv}OK${gl_bai}] 7/12. 开启${gl_huang}BBR${gl_bai}加速" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. 设置时区到${gl_huang}上海${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/12. 设置时区到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" auto_optimize_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自动优化DNS地址${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 9/12. 自动优化DNS地址${gl_huang}${gl_bai}" + echo "------------------------------------------------" + prefer_ipv4 + echo -e "[${gl_lv}OK${gl_bai}] 10/12. 设置网络为${gl_huang}ipv4优先${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 -e "[${gl_lv}OK${gl_bai}] 11/12. 安装基础工具${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. Linux系统内核参数优化" + echo -e "[${gl_lv}OK${gl_bai}] 12/12. Linux系统内核参数优化" echo -e "${gl_lv}一条龙系统调优已完成${gl_bai}" ;; From 2c312d1fec6e71da3e496b2a955ad393f3fedb92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:12:58 +0800 Subject: [PATCH 329/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 8e140e3a5..4d65ae7d2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1338,4 +1338,8 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 国内安装docker环境时的加速站列表进行更新。 应用市场中PanSou网盘搜索增加更多搜索源。 ------------------------ +2025-11-06 v4.2.2 +系统工具中一条龙优化功能新增自动ipv4优先, +系统工具中一条龙优化功能新增自动开启fail2ban防御SSH暴力破解。 +------------------------ From 6d5bd98242115895bd4699188d3dc8cd23e38938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 7 Nov 2025 16:17:52 +0800 Subject: [PATCH 330/553] Add LangBot chatbot installation and management scripts --- cn/kejilion.sh | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f1a310854..45bcf2353 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9119,7 +9119,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" - echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索" + echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12554,6 +12554,47 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 108|langbot) + local app_id="108" + local app_name="LangBot聊天机器人" + local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" + local app_url="官方网站: https://github.com/langbot-app/LangBot" + local docker_name="langbot_plugin_runtime" + local docker_port="8108" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/LangBot/docker && docker compose down --rmi all + cd /home/docker/LangBot/ + git pull origin main + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + cd /home/docker/LangBot/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/LangBot/docker/ && docker compose down --rmi all + rm -rf /home/docker/LangBot + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + b) clear send_stats "全部应用备份" From b58dae38b089f34ce4f2d30db5256d0855554110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 7 Nov 2025 16:18:30 +0800 Subject: [PATCH 331/553] Update kejilion.sh --- kejilion.sh | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 6fd626fa0..c91913f45 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9119,7 +9119,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" - echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索" + echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12554,6 +12554,47 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 108|langbot) + local app_id="108" + local app_name="LangBot聊天机器人" + local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" + local app_url="官方网站: https://github.com/langbot-app/LangBot" + local docker_name="langbot_plugin_runtime" + local docker_port="8108" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/LangBot/docker && docker compose down --rmi all + cd /home/docker/LangBot/ + git pull origin main + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + cd /home/docker/LangBot/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/LangBot/docker/ && docker compose down --rmi all + rm -rf /home/docker/LangBot + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + b) clear send_stats "全部应用备份" From 38aecab3fa82d4f10dd2f91859ebf53512609732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 7 Nov 2025 16:19:56 +0800 Subject: [PATCH 332/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 4d65ae7d2..f3821b5fb 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1341,5 +1341,7 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 2025-11-06 v4.2.2 系统工具中一条龙优化功能新增自动ipv4优先, 系统工具中一条龙优化功能新增自动开启fail2ban防御SSH暴力破解。 +应用市场新增了LangBot开源聊天机器人的安装及使用。 ------------------------ + From 51b0a33966da698519d5639cc5856f8ef3103a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 8 Nov 2025 20:40:05 +0800 Subject: [PATCH 333/553] Update custom_mysql_config-1.cnf --- custom_mysql_config-1.cnf | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/custom_mysql_config-1.cnf b/custom_mysql_config-1.cnf index d3f5a12fa..5261b859f 100644 --- a/custom_mysql_config-1.cnf +++ b/custom_mysql_config-1.cnf @@ -1 +1,44 @@ +[mysqld] + +# 连接和线程管理 +max_connections = 200 # 小机型避免连接风暴 +thread_cache_size = 64 +interactive_timeout = 20 +wait_timeout = 20 + +# InnoDB设置 +innodb_buffer_pool_size = 512M # 2G RAM 中最重要的分配,留足系统空间 +innodb_buffer_pool_instances = 1 # 小内存不需要分片 +innodb_log_buffer_size = 8M +innodb_redo_log_capacity = 64M +innodb_lock_wait_timeout = 30 +innodb_file_per_table = 1 +innodb_flush_log_at_trx_commit = 1 +innodb_io_capacity = 400 # 普通SSD预期值 +innodb_io_capacity_max = 800 + +# 缓存和表限制 +table_open_cache = 512 +open_files_limit = 20000 +tmp_table_size = 32M +max_heap_table_size = 32M +max_allowed_packet = 32M + +# 缓冲区大小 +sort_buffer_size = 2M +read_buffer_size = 512K +join_buffer_size = 1M + +# 日志管理 +log_error_verbosity = 3 +slow_query_log = 1 +slow_query_log_file = /var/log/mysql/slow.log +long_query_time = 1 +log_queries_not_using_indexes = 1 + +# 其他 +sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION +performance_schema=ON +disable-log-bin + From 1d6514e638dffb8cfe44142380f78c645c1448a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 8 Nov 2025 20:47:42 +0800 Subject: [PATCH 334/553] Update kejilion.sh --- cn/kejilion.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 45bcf2353..88fbf68af 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1432,7 +1432,16 @@ install_ldnmp() { 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 + + + restart_ldnmp + clear From c6007c4341695b4372f2423c76905ee0016ff628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 8 Nov 2025 20:48:43 +0800 Subject: [PATCH 335/553] Update kejilion.sh --- kejilion.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index c91913f45..4bb3e9ea6 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1432,7 +1432,16 @@ install_ldnmp() { 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 + + + restart_ldnmp + clear From 8dc5bebb0f9f738bdb221ce54966e875651856af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 8 Nov 2025 20:49:39 +0800 Subject: [PATCH 336/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index f3821b5fb..e734c9510 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1342,6 +1342,7 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 系统工具中一条龙优化功能新增自动ipv4优先, 系统工具中一条龙优化功能新增自动开启fail2ban防御SSH暴力破解。 应用市场新增了LangBot开源聊天机器人的安装及使用。 +LDNMP安装环境时对mysql进行优化。 ------------------------ From 86d98697662ac0813f4181de86311edf98502113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 8 Nov 2025 21:09:06 +0800 Subject: [PATCH 337/553] Update optimized_php.ini --- optimized_php.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/optimized_php.ini b/optimized_php.ini index 0f25b5b89..dfb2e0a75 100644 --- a/optimized_php.ini +++ b/optimized_php.ini @@ -5,7 +5,7 @@ error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED expose_php = Off allow_url_fopen = Off allow_url_include = Off -disable_functions = exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source +disable_functions = passthru,system,proc_open,popen,parse_ini_file,show_source default_charset = "UTF-8" session.cookie_httponly = 1 From 487e16b948cb2da53840dd448e04890961e8f180 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 9 Nov 2025 03:52:30 +0000 Subject: [PATCH 338/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-11-09=2003:52:30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 111 +++++++++++++++++++++++++++++++---------- jp/kejilion.sh | 133 +++++++++++++++++++++++++++++++++++-------------- kr/kejilion.sh | 125 ++++++++++++++++++++++++++++++++++------------ tw/kejilion.sh | 99 ++++++++++++++++++++++++++++-------- 4 files changed, 352 insertions(+), 116 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 672e1795c..d38c47639 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.1" +sh_v="4.2.2" gl_hui='\e[37m' @@ -1432,7 +1432,16 @@ install_ldnmp() { fix_phpfpm_conf php fix_phpfpm_conf php74 + + # mysql tuning + 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 + + + restart_ldnmp + clear @@ -4742,7 +4751,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -5551,7 +5560,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -9058,7 +9067,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -9119,7 +9128,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multi-person online chat system" echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool${gl_kjlan}104. ${color104}Stream four-layer proxy forwarding tool" echo -e "${gl_kjlan}105. ${color105}Siyuan Notes${gl_kjlan}106. ${color106}Drawnix open source whiteboard tool" - echo -e "${gl_kjlan}107. ${color107}PanSou network disk search" + echo -e "${gl_kjlan}107. ${color107}PanSou network disk search${gl_kjlan}108. ${color108}LangBot chatbot" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" @@ -12554,6 +12563,47 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 108|langbot) + local app_id="108" + local app_name="LangBot聊天机器人" + local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" + local app_url="官方网站: https://github.com/langbot-app/LangBot" + local docker_name="langbot_plugin_runtime" + local docker_port="8108" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + + docker compose up -d + clear + echo "Installation completed" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/LangBot/docker && docker compose down --rmi all + cd /home/docker/LangBot/ + git pull origin main + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + cd /home/docker/LangBot/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/LangBot/docker/ && docker compose down --rmi all + rm -rf /home/docker/LangBot + echo "App has been uninstalled" + } + + docker_app_plus + + ;; + + + + b) clear send_stats "All application backup" @@ -12903,7 +12953,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by Python!" + echo "This function can seamlessly install any version officially supported by python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13092,7 +13142,7 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 first" + echo "Switched to IPv6 priority" send_stats "Switched to IPv6 priority" ;; @@ -13581,7 +13631,6 @@ EOF case $sub_choice in 1) f2b_install_sshd - cd ~ f2b_status break_end @@ -13877,12 +13926,14 @@ EOF echo "2. Clean up system junk files" echo -e "3. Set up virtual memory${gl_huang}1G${gl_bai}" echo -e "4. Set the SSH port number to${gl_huang}5522${gl_bai}" - echo -e "5. Open all ports" - echo -e "6. Turn on${gl_huang}BBR${gl_bai}accelerate" - echo -e "7. Set time zone to${gl_huang}Shanghai${gl_bai}" - echo -e "8. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "9. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" - echo -e "10. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" + echo -e "5. Start fail2ban to defend against SSH brute force cracking" + echo -e "6. Open all ports" + echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" + echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" + echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" + echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" + echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" read -e -p "Are you sure you want one-click maintenance? (Y/N):" choice @@ -13892,44 +13943,52 @@ EOF send_stats "One-stop tuning starts" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" + echo -e "[${gl_lv}OK${gl_bai}] 1/12. Update the system to the latest" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. Clean up system junk files" + echo -e "[${gl_lv}OK${gl_bai}] 2/12. Clean up system junk files" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. Set up virtual memory${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 3/12. Set up virtual memory${gl_huang}1G${gl_bai}" echo "------------------------------------------------" local new_port=5522 new_ssh_port - echo -e "[${gl_lv}OK${gl_bai}] 4/10. Set the SSH port number to${gl_huang}5522${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 4/12. Set the SSH port number to${gl_huang}5522${gl_bai}" + echo "------------------------------------------------" + f2b_install_sshd + cd ~ + f2b_status + echo -e "[${gl_lv}OK${gl_bai}] 5/12. Start fail2ban to defend against SSH brute force cracking" + echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}] 5/10. Open all ports" + echo -e "[${gl_lv}OK${gl_bai}] 6/12. Open all ports" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. Open${gl_huang}BBR${gl_bai}accelerate" + echo -e "[${gl_lv}OK${gl_bai}] 7/12. Open${gl_huang}BBR${gl_bai}accelerate" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. Set time zone to${gl_huang}Shanghai${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/12. Set time zone to${gl_huang}Shanghai${gl_bai}" echo "------------------------------------------------" auto_optimize_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. Automatically optimize DNS address${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" + echo "------------------------------------------------" + prefer_ipv4 + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker install wget sudo tar unzip socat btop nano vim - echo -e "[${gl_lv}OK${gl_bai}] 9/10. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 11/12. Install basic tools${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. Linux system kernel parameter optimization" + echo -e "[${gl_lv}OK${gl_bai}] 12/12. Linux system kernel parameter optimization" echo -e "${gl_lv}One-stop system tuning has been completed${gl_bai}" ;; @@ -14433,7 +14492,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" +echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 46d03be9b..4de4a5ef3 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.1" +sh_v="4.2.2" gl_hui='\e[37m' @@ -897,7 +897,7 @@ open_port() { 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" + echo "ポートがオープンされました$port" fi done @@ -1225,7 +1225,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -1432,7 +1432,16 @@ install_ldnmp() { 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 + + + restart_ldnmp + clear @@ -4742,7 +4751,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } @@ -5343,7 +5352,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドパラメータを構築する + # clamscan コマンドのパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5408,7 +5417,7 @@ clamav() { ;; 3) send_stats "カスタムディレクトリスキャン" - read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root)。" directories install_docker clamav_freshclam clamav_scan $directories @@ -5720,7 +5729,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えてください" + send_stats "英語に切り替えて" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -6358,7 +6367,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6776,7 +6785,7 @@ linux_tools() { while true; do clear - # send_stats 「基本ツール」 + # 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}" @@ -7142,7 +7151,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" + echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7425,7 +7434,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -9119,7 +9128,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI動画生成ツール${gl_kjlan}102. ${color102}VoceChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール${gl_kjlan}104. ${color104}ストリーム 4 層プロキシ転送ツール" echo -e "${gl_kjlan}105. ${color105}思源ノート${gl_kjlan}106. ${color106}Drawnix オープンソース ホワイトボード ツール" - echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索" + echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索${gl_kjlan}108. ${color108}LangBot チャットボット" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" @@ -9330,7 +9339,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12554,6 +12563,47 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 108|langbot) + local app_id="108" + local app_name="LangBot聊天机器人" + local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" + local app_url="官方网站: https://github.com/langbot-app/LangBot" + local docker_name="langbot_plugin_runtime" + local docker_port="8108" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + + docker compose up -d + clear + echo "インストール完了" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/LangBot/docker && docker compose down --rmi all + cd /home/docker/LangBot/ + git pull origin main + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + cd /home/docker/LangBot/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/LangBot/docker/ && docker compose down --rmi all + rm -rf /home/docker/LangBot + echo "アプリがアンインストールされました" + } + + docker_app_plus + + ;; + + + + b) clear send_stats "すべてのアプリケーションのバックアップ" @@ -13092,8 +13142,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -13581,7 +13631,6 @@ EOF case $sub_choice in 1) f2b_install_sshd - cd ~ f2b_status break_end @@ -13877,12 +13926,14 @@ EOF 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. Linux システムのカーネル パラメータの最適化が次のように切り替わります。${gl_huang}バランスのとれた最適化モード${gl_bai}" + echo -e "5. SSH ブルート フォース クラッキングを防ぐために、fail2ban を開始します。" + echo -e "6.すべてのポートを開きます" + echo -e "7.電源を入れます${gl_huang}BBR${gl_bai}加速する" + echo -e "8. タイムゾーンを次のように設定します。${gl_huang}上海${gl_bai}" + echo -e "9. DNS アドレスを自動的に最適化する${gl_huang}海外:1.1.1.1 8.8.8.8 国内:223.5.5.5${gl_bai}" + echo -e "10. ネットワークを次のように設定します。${gl_huang}IPv4優先度${gl_bai}" + echo -e "11. 基本ツールのインストール${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "12. Linux システムのカーネル パラメータの最適化は、${gl_huang}バランスのとれた最適化モード${gl_bai}" echo "------------------------------------------------" read -e -p "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" choice @@ -13892,44 +13943,52 @@ EOF send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}】1/10。システムを最新のものにアップデートする" + echo -e "[${gl_lv}OK${gl_bai}】1/12。システムを最新のものにアップデートする" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}】2/10。システムのジャンクファイルをクリーンアップする" + echo -e "[${gl_lv}OK${gl_bai}】2/12。システムのジャンクファイルをクリーンアップする" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}】3/10。仮想メモリを設定する${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}】3/12。仮想メモリを設定する${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 -e "[${gl_lv}OK${gl_bai}】4/12。 SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}】5/10。すべてのポートを開く" + f2b_install_sshd + cd ~ + f2b_status + echo -e "[${gl_lv}OK${gl_bai}】5/12。 SSH ブルート フォース クラッキングを防ぐために、fail2ban を開始します。" + + echo "------------------------------------------------" + echo -e "[${gl_lv}OK${gl_bai}】6/12。すべてのポートを開く" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}】6/10。開ける${gl_huang}BBR${gl_bai}加速する" + echo -e "[${gl_lv}OK${gl_bai}】7/12。開ける${gl_huang}BBR${gl_bai}加速する" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}】7/10。タイムゾーンを次のように設定します${gl_huang}上海${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}】8/12。タイムゾーンを次のように設定します${gl_huang}上海${gl_bai}" echo "------------------------------------------------" auto_optimize_dns - echo -e "[${gl_lv}OK${gl_bai}】8/10。 DNSアドレスを自動的に最適化する${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}】9/12。 DNSアドレスを自動的に最適化する${gl_huang}${gl_bai}" + echo "------------------------------------------------" + prefer_ipv4 + echo -e "[${gl_lv}OK${gl_bai}】10/12。ネットワークを次のように設定します${gl_huang}IPv4優先度${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 -e "[${gl_lv}OK${gl_bai}】11/12。基本的なツールをインストールする${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。 Linuxシステムのカーネルパラメータの最適化" + echo -e "[${gl_lv}OK${gl_bai}】12/12。 Linuxシステムのカーネルパラメータの最適化" echo -e "${gl_lv}ワンストップでのシステムチューニングが完了${gl_bai}" ;; @@ -13962,7 +14021,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -14175,7 +14234,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14349,7 +14408,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14618,7 +14677,7 @@ done k_info() { -send_stats "k コマンドリファレンスの使用例" +send_stats "k コマンドのリファレンス例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index ae41b45fb..c2533424d 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.1" +sh_v="4.2.2" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -1432,7 +1432,16 @@ install_ldnmp() { 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 + + + restart_ldnmp + clear @@ -2920,7 +2929,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -5331,7 +5340,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5837,7 +5846,7 @@ linux_trash() { clear echo -e "현재 휴지통${trash_status}" - echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 들어갑니다!" + echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 저장됩니다!" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "휴지통이 비어 있습니다." echo "------------------------" @@ -6358,7 +6367,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -9098,7 +9107,7 @@ while true; do echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}AstrBot 챗봇 프레임워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워드 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워든 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 마법사${gl_kjlan}76. ${color76}온라인 DOS 오래된 게임" echo -e "${gl_kjlan}77. ${color77}Thunder 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" @@ -9119,7 +9128,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" - echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색" + echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" @@ -9321,7 +9330,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "네자 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9433,7 +9442,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -12554,6 +12563,47 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 108|langbot) + local app_id="108" + local app_name="LangBot聊天机器人" + local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" + local app_url="官方网站: https://github.com/langbot-app/LangBot" + local docker_name="langbot_plugin_runtime" + local docker_port="8108" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + + docker compose up -d + clear + echo "설치 완료" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/LangBot/docker && docker compose down --rmi all + cd /home/docker/LangBot/ + git pull origin main + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + cd /home/docker/LangBot/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/LangBot/docker/ && docker compose down --rmi all + rm -rf /home/docker/LangBot + echo "앱이 제거되었습니다." + } + + docker_app_plus + + ;; + + + + b) clear send_stats "모든 애플리케이션 백업" @@ -12759,7 +12809,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13092,8 +13142,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -13581,7 +13631,6 @@ EOF case $sub_choice in 1) f2b_install_sshd - cd ~ f2b_status break_end @@ -13877,12 +13926,14 @@ EOF 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. Linux 시스템 커널 매개변수 최적화가 다음으로 전환됩니다.${gl_huang}균형 잡힌 최적화 모드${gl_bai}" + echo -e "5. SSH 무차별 대입 크래킹을 방어하기 위해 fall2ban을 시작하세요." + echo -e "6. 모든 포트를 엽니다" + echo -e "7. 켜다${gl_huang}BBR${gl_bai}가속하다" + echo -e "8. 시간대를 다음으로 설정합니다.${gl_huang}상하이${gl_bai}" + echo -e "9. DNS 주소 자동 최적화${gl_huang}해외: 1.1.1.1 8.8.8.8 국내: 223.5.5.5${gl_bai}" + echo -e "10. 네트워크를 다음으로 설정합니다.${gl_huang}IPv4 우선순위${gl_bai}" + echo -e "11. 기본 도구 설치${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "12. Linux 시스템 커널 매개변수 최적화가 다음으로 전환됩니다.${gl_huang}균형 잡힌 최적화 모드${gl_bai}" echo "------------------------------------------------" read -e -p "원클릭 유지 관리를 원하시나요? (예/아니요):" choice @@ -13892,44 +13943,52 @@ EOF send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하세요" + echo -e "[${gl_lv}OK${gl_bai}] 1/12. 시스템을 최신으로 업데이트하세요" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 시스템 정크 파일 정리" + echo -e "[${gl_lv}OK${gl_bai}] 2/12. 시스템 정크 파일 정리" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. 가상 메모리 설정${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 3/12. 가상 메모리 설정${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 -e "[${gl_lv}OK${gl_bai}] 4/12. SSH 포트 번호를 다음으로 설정합니다.${gl_huang}5522${gl_bai}" + echo "------------------------------------------------" + f2b_install_sshd + cd ~ + f2b_status + echo -e "[${gl_lv}OK${gl_bai}] 5/12. SSH 무차별 대입 크래킹을 방어하려면 Fail2ban을 시작하세요." + echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}] 5/10. 모든 포트 열기" + echo -e "[${gl_lv}OK${gl_bai}] 6/12. 모든 포트 열기" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. 열려 있는${gl_huang}BBR${gl_bai}가속하다" + echo -e "[${gl_lv}OK${gl_bai}] 7/12. 열려 있는${gl_huang}BBR${gl_bai}가속하다" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. 시간대를 다음으로 설정하세요.${gl_huang}상하이${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/12. 시간대를 다음으로 설정하세요.${gl_huang}상하이${gl_bai}" echo "------------------------------------------------" auto_optimize_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. DNS 주소 자동 최적화${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 9/12. DNS 주소 자동 최적화${gl_huang}${gl_bai}" + echo "------------------------------------------------" + prefer_ipv4 + echo -e "[${gl_lv}OK${gl_bai}] 10/12. 네트워크를 다음으로 설정하세요.${gl_huang}IPv4 우선순위${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 -e "[${gl_lv}OK${gl_bai}] 11/12. 기본 도구 설치${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. Linux 시스템 커널 매개변수 최적화" + echo -e "[${gl_lv}OK${gl_bai}] 12/12. Linux 시스템 커널 매개변수 최적화" echo -e "${gl_lv}원스톱 시스템 튜닝이 완료되었습니다${gl_bai}" ;; @@ -14618,7 +14677,7 @@ done k_info() { -send_stats "k 명령 참조 사용 사례" +send_stats "k 명령 참조 예" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." @@ -14662,7 +14721,7 @@ echo "k 포트 닫기 gbdk 7800 |k 포트 7800 닫기" echo "릴리스 IP k fxip 127.0.0.0/8 |k 릴리스 IP 127.0.0.0/8" echo "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장관리 kapp" +echo "애플리케이션 시장 관리 k app" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "시스템 정보 표시 k 정보" } diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 1e86fa2ba..0f95ecbed 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.1" +sh_v="4.2.2" gl_hui='\e[37m' @@ -1432,7 +1432,16 @@ install_ldnmp() { 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 + + + restart_ldnmp + clear @@ -9119,7 +9128,7 @@ while true; do echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具${gl_kjlan}102. ${color102}VoceChat多人在線聊天系統" echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具${gl_kjlan}104. ${color104}Stream四層代理轉發工具" echo -e "${gl_kjlan}105. ${color105}思源筆記${gl_kjlan}106. ${color106}Drawnix開源白板工具" - echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索" + echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索${gl_kjlan}108. ${color108}LangBot聊天機器人" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -12554,6 +12563,47 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 108|langbot) + local app_id="108" + local app_name="LangBot聊天机器人" + local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" + local app_url="官方网站: https://github.com/langbot-app/LangBot" + local docker_name="langbot_plugin_runtime" + local docker_port="8108" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/LangBot/docker && docker compose down --rmi all + cd /home/docker/LangBot/ + git pull origin main + sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml + cd /home/docker/LangBot/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/LangBot/docker/ && docker compose down --rmi all + rm -rf /home/docker/LangBot + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + b) clear send_stats "全部應用備份" @@ -13581,7 +13631,6 @@ EOF case $sub_choice in 1) f2b_install_sshd - cd ~ f2b_status break_end @@ -13877,12 +13926,14 @@ EOF 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. Linux系統內核參數優化切換到${gl_huang}均衡優化模式${gl_bai}" + echo -e "5. 啟動fail2ban防禦SSH暴力破解" + echo -e "6. 開放所有端口" + echo -e "7. 開啟${gl_huang}BBR${gl_bai}加速" + echo -e "8. 設置時區到${gl_huang}上海${gl_bai}" + echo -e "9. 自動優化DNS地址${gl_huang}海外: 1.1.1.1 8.8.8.8 國內: 223.5.5.5${gl_bai}" + echo -e "10. 設置網絡為${gl_huang}ipv4優先${gl_bai}" + echo -e "11. 安裝基礎工具${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" + echo -e "12. Linux系統內核參數優化切換到${gl_huang}均衡優化模式${gl_bai}" echo "------------------------------------------------" read -e -p "確定一鍵保養嗎? (Y/N):" choice @@ -13892,44 +13943,52 @@ EOF send_stats "一條龍調優啟動" echo "------------------------------------------------" linux_update - echo -e "[${gl_lv}OK${gl_bai}] 1/10. 更新系統到最新" + echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系統到最新" echo "------------------------------------------------" linux_clean - echo -e "[${gl_lv}OK${gl_bai}] 2/10. 清理系統垃圾文件" + echo -e "[${gl_lv}OK${gl_bai}] 2/12. 清理系統垃圾文件" echo "------------------------------------------------" add_swap 1024 - echo -e "[${gl_lv}OK${gl_bai}] 3/10. 設置虛擬內存${gl_huang}1G${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 3/12. 設置虛擬內存${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 -e "[${gl_lv}OK${gl_bai}] 4/12. 設置SSH端口號為${gl_huang}5522${gl_bai}" + echo "------------------------------------------------" + f2b_install_sshd + cd ~ + f2b_status + echo -e "[${gl_lv}OK${gl_bai}] 5/12. 啟動fail2ban防禦SSH暴力破解" + echo "------------------------------------------------" - echo -e "[${gl_lv}OK${gl_bai}] 5/10. 開放所有端口" + echo -e "[${gl_lv}OK${gl_bai}] 6/12. 開放所有端口" echo "------------------------------------------------" bbr_on - echo -e "[${gl_lv}OK${gl_bai}] 6/10. 開啟${gl_huang}BBR${gl_bai}加速" + echo -e "[${gl_lv}OK${gl_bai}] 7/12. 開啟${gl_huang}BBR${gl_bai}加速" echo "------------------------------------------------" set_timedate Asia/Shanghai - echo -e "[${gl_lv}OK${gl_bai}] 7/10. 設置時區到${gl_huang}上海${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 8/12. 設置時區到${gl_huang}上海${gl_bai}" echo "------------------------------------------------" auto_optimize_dns - echo -e "[${gl_lv}OK${gl_bai}] 8/10. 自動優化DNS地址${gl_huang}${gl_bai}" + echo -e "[${gl_lv}OK${gl_bai}] 9/12. 自動優化DNS地址${gl_huang}${gl_bai}" + echo "------------------------------------------------" + prefer_ipv4 + echo -e "[${gl_lv}OK${gl_bai}] 10/12. 設置網絡為${gl_huang}ipv4優先${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 -e "[${gl_lv}OK${gl_bai}] 11/12. 安裝基礎工具${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. Linux系統內核參數優化" + echo -e "[${gl_lv}OK${gl_bai}] 12/12. Linux系統內核參數優化" echo -e "${gl_lv}一條龍系統調優已完成${gl_bai}" ;; From 7a134bf7459af1f2d16606d5a622cbe5c45a7791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:47:47 +0800 Subject: [PATCH 339/553] Update version and add new test options --- cn/kejilion.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 88fbf68af..5402d1126 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.3" gl_hui='\e[37m' @@ -1439,9 +1439,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -7739,6 +7739,7 @@ linux_test() { echo -e "${gl_kjlan}综合性测试" echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}nodequality 融合怪测评 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7857,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh + ;; + + 33) + send_stats "nodequality融合怪测评" + clear + bash <(curl -sL https://run.NodeQuality.com) ;; + + 0) kejilion From b1641397818ac71b503b56b85859cb1700f3a7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:48:19 +0800 Subject: [PATCH 340/553] Update kejilion.sh --- kejilion.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 4bb3e9ea6..bc87cdbb1 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.3" gl_hui='\e[37m' @@ -1439,9 +1439,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -7739,6 +7739,7 @@ linux_test() { echo -e "${gl_kjlan}综合性测试" echo -e "${gl_kjlan}31. ${gl_bai}bench 性能测试" echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪测评 ${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}nodequality 融合怪测评 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7857,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh + ;; + + 33) + send_stats "nodequality融合怪测评" + clear + bash <(curl -sL https://run.NodeQuality.com) ;; + + 0) kejilion From 7d8209629501cb604cd1b5f80eb2237eb28ed1b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:50:10 +0800 Subject: [PATCH 341/553] Update changelog for version 4.2.3 --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e734c9510..ac7bd55f2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1344,5 +1344,9 @@ LDNMP建站和应用市场新增nginx的stream四层代理转发工具。 应用市场新增了LangBot开源聊天机器人的安装及使用。 LDNMP安装环境时对mysql进行优化。 ------------------------ +2025-11-10 v4.2.3 +测试脚本合集中添加nodequality融合测试脚本。 +------------------------ + From bf06fc836dabb55c9f52c69a59bd255c1f26b7f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 11 Nov 2025 16:30:22 +0800 Subject: [PATCH 342/553] Clean up blank lines in kejilion_sh_log.txt Removed unnecessary blank lines in log file. --- kejilion_sh_log.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ac7bd55f2..e73f04939 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1348,5 +1348,3 @@ LDNMP安装环境时对mysql进行优化。 测试脚本合集中添加nodequality融合测试脚本。 ------------------------ - - From 0ee70692f72f9bd678c479ed9a4dcbec3dcb7074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 12 Nov 2025 17:50:30 +0800 Subject: [PATCH 343/553] Add ZFile online storage option to script --- cn/kejilion.sh | 76 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 5402d1126..6954ea537 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9138,6 +9138,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" + echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12611,6 +12612,37 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) @@ -12885,6 +12917,43 @@ linux_work() { +# 智能切换镜像源函数 +switch_mirror() { + # 可选参数,默认为 false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # 获取用户国家 + local country + country=$(curl -s ipinfo.io/country) + + echo "检测到国家:$country" + + if [ "$country" = "CN" ]; then + echo "使用国内镜像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "使用官方镜像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13488,7 +13557,7 @@ EOF echo "选择更新源区域" echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区 4. 智能切换更新源" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" @@ -13507,6 +13576,11 @@ EOF send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "智能切换更新源" + switch_mirror true true + ;; + *) echo "已取消" ;; From 3a3e6a9a9ca67ddd608ed9edd175657d43afad0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 12 Nov 2025 17:51:16 +0800 Subject: [PATCH 344/553] Add ZFile online storage option to kejilion.sh --- kejilion.sh | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index bc87cdbb1..6f543414c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9138,6 +9138,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" + echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12611,6 +12612,37 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) @@ -12885,6 +12917,43 @@ linux_work() { +# 智能切换镜像源函数 +switch_mirror() { + # 可选参数,默认为 false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # 获取用户国家 + local country + country=$(curl -s ipinfo.io/country) + + echo "检测到国家:$country" + + if [ "$country" = "CN" ]; then + echo "使用国内镜像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "使用官方镜像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13488,7 +13557,7 @@ EOF echo "选择更新源区域" echo "接入LinuxMirrors切换系统更新源" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区 4. 智能切换更新源" echo "------------------------" echo "0. 返回上一级选单" echo "------------------------" @@ -13507,6 +13576,11 @@ EOF send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "智能切换更新源" + switch_mirror true true + ;; + *) echo "已取消" ;; From 3d17fa4a8a34c686f0d873a08f4e7b9afd208048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 12 Nov 2025 17:53:00 +0800 Subject: [PATCH 345/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e73f04939..dbbfd81fd 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1346,5 +1346,6 @@ LDNMP安装环境时对mysql进行优化。 ------------------------ 2025-11-10 v4.2.3 测试脚本合集中添加nodequality融合测试脚本。 +系统工具更换系统更新源新增智能切换更新源功能,识别国内自动切换华为源。 ------------------------ From 63c8b277b34dd8c2cb9a2774a7cdc92473a527af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 13 Nov 2025 15:54:27 +0800 Subject: [PATCH 346/553] Update version and add Karakeep app installation --- cn/kejilion.sh | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6954ea537..521fba625 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.3" +sh_v="4.2.4" gl_hui='\e[37m' @@ -9138,7 +9138,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" - echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘" + echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -10763,7 +10763,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12643,6 +12642,51 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + + + + b) From a7bfbacc6a9bb3365241de08f4c73675fb5378ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 13 Nov 2025 15:55:04 +0800 Subject: [PATCH 347/553] Update kejilion.sh --- kejilion.sh | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 6f543414c..95bca0ede 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.3" +sh_v="4.2.4" gl_hui='\e[37m' @@ -9138,7 +9138,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" - echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘" + echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -10763,7 +10763,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12643,6 +12642,51 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "已经安装完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "应用已卸载" + } + + docker_app_plus + + ;; + + + + + + + + b) From d5fd4868fa1ed7609e61fc806fdfb25962ab86a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 13 Nov 2025 15:57:00 +0800 Subject: [PATCH 348/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index dbbfd81fd..2c45dcb87 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1348,4 +1348,8 @@ LDNMP安装环境时对mysql进行优化。 测试脚本合集中添加nodequality融合测试脚本。 系统工具更换系统更新源新增智能切换更新源功能,识别国内自动切换华为源。 ------------------------ +2025-11-13 v4.2.4 +应用市场新增了karakeep书签管理的安装及使用。 +应用市场新增了zfile网盘的安装及使用。 +------------------------ From a8f89d1c1e4b156a13463124927c24239d844059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:21:00 +0800 Subject: [PATCH 349/553] Update kejilion.sh --- cn/kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 521fba625..ab3ca4cf9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # 调用设置 DNS 的函数(需你定义) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } From 50ab6f0af392485c51a318aaf2260413b0908dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:21:31 +0800 Subject: [PATCH 350/553] Update kejilion.sh --- kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 95bca0ede..39d096ebb 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # 调用设置 DNS 的函数(需你定义) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } From ea84e87ae761c1d21892a89188f646ccf3a12de0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:22:41 +0800 Subject: [PATCH 351/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 2c45dcb87..9bc9932c8 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1351,5 +1351,6 @@ LDNMP安装环境时对mysql进行优化。 2025-11-13 v4.2.4 应用市场新增了karakeep书签管理的安装及使用。 应用市场新增了zfile网盘的安装及使用。 +自动优化dns地址修复部分机型写入为空的问题。 ------------------------ From cd8c5b93942ffa6a10b06a8a44efb484b2c64882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:13:41 +0800 Subject: [PATCH 352/553] Update kejilion.sh --- cn/kejilion.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index ab3ca4cf9..bb1bcac75 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3099,6 +3099,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { From 7a6df4ebf786055008124904038662689d3b5823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:14:21 +0800 Subject: [PATCH 353/553] Install and enable rsyslog for apt systems Add installation and enablement of rsyslog for apt-based systems. --- kejilion.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index 39d096ebb..eafe76103 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3099,6 +3099,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { From 0f95f80791ad5c4c3ddab45acffb287820a00d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:15:29 +0800 Subject: [PATCH 354/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 9bc9932c8..33e6dc2dd 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1352,5 +1352,6 @@ LDNMP安装环境时对mysql进行优化。 应用市场新增了karakeep书签管理的安装及使用。 应用市场新增了zfile网盘的安装及使用。 自动优化dns地址修复部分机型写入为空的问题。 +系统工具ssh防御修复个别系统安装后启动失败的问题。 ------------------------ From 4d6f802bb33c3ecd6732a1d70acdc46fa4261567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:20:49 +0800 Subject: [PATCH 355/553] Update kejilion.sh --- kejilion.sh | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index eafe76103..879678899 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1629,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1741,7 +1732,6 @@ web_cache() { send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2328,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2369,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP环境已设置成 高性能模式" @@ -8986,7 +8974,6 @@ linux_ldnmp() { 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}完成" From caa41ed516d0cbd99f2cd777a0266e9da3c700c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:21:24 +0800 Subject: [PATCH 356/553] Remove restart_redis function and its invocations Removed the restart_redis function and its calls from various parts of the script. --- cn/kejilion.sh | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index bb1bcac75..40adf8ef3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1629,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1741,7 +1732,6 @@ web_cache() { send_stats "清理站点缓存" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2328,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2369,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP环境已设置成 高性能模式" @@ -8986,7 +8974,6 @@ linux_ldnmp() { 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}完成" From 0bc6b170f86254651d8bcd00bb76004b7d218119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:41:17 +0800 Subject: [PATCH 357/553] Update kejilion.sh --- cn/kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 40adf8ef3..075f574f1 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -4547,9 +4547,8 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +# rm /etc/resolv.conf +# touch /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf From 189bbd4889ce288c9391f95c9a1e2c6cd13fc7a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:42:01 +0800 Subject: [PATCH 358/553] Update kejilion.sh --- kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 879678899..9325b87d8 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -4547,9 +4547,8 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +# rm /etc/resolv.conf +# touch /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf From 790fa22f215ec9c99a4a567bb8d9eefccac009ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:53:59 +0800 Subject: [PATCH 359/553] Update resolv.conf management in kejilion.sh Modify resolv.conf handling to ensure nameservers are added if the file is empty. --- cn/kejilion.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 075f574f1..6d8be57d3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -4547,8 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -# rm /etc/resolv.conf -# touch /etc/resolv.conf +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4560,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } From d4e92528578f424eb64b91cdbf0408ffd3cf7dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:55:15 +0800 Subject: [PATCH 360/553] Update resolv.conf management in kejilion.sh Modify resolv.conf handling to ensure nameservers are added if the file is empty. --- kejilion.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 9325b87d8..5bcbf0676 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -4547,8 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -# rm /etc/resolv.conf -# touch /etc/resolv.conf +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4560,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } From 96911679fca12d284a0bee3cbe1cab75061429e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 11:07:51 +0800 Subject: [PATCH 361/553] Remove unnecessary optimization from redis in LDNMP --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 33e6dc2dd..92809390a 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1353,5 +1353,6 @@ LDNMP安装环境时对mysql进行优化。 应用市场新增了zfile网盘的安装及使用。 自动优化dns地址修复部分机型写入为空的问题。 系统工具ssh防御修复个别系统安装后启动失败的问题。 +LDNMP环境中redis去除了不必要的优化机制。 ------------------------ From 2861201340d1e038d65e958e4236396bcfd1ecc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 14 Nov 2025 11:08:39 +0800 Subject: [PATCH 362/553] Update redis optimization description in log --- kejilion_sh_log.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 92809390a..153ab569f 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1353,6 +1353,6 @@ LDNMP安装环境时对mysql进行优化。 应用市场新增了zfile网盘的安装及使用。 自动优化dns地址修复部分机型写入为空的问题。 系统工具ssh防御修复个别系统安装后启动失败的问题。 -LDNMP环境中redis去除了不必要的优化机制。 +LDNMP环境中redis去除了不必要的清理机制。 ------------------------ From ec19062dbe51f166dc99c3841c61aa590eecc963 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 16 Nov 2025 04:06:41 +0000 Subject: [PATCH 363/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-11-16=2004:06:41?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 188 +++++++++++++++++++++++++++++++++++++-------- jp/kejilion.sh | 202 +++++++++++++++++++++++++++++++++++++++---------- kr/kejilion.sh | 190 +++++++++++++++++++++++++++++++++++++--------- tw/kejilion.sh | 170 +++++++++++++++++++++++++++++++++++------ 4 files changed, 619 insertions(+), 131 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index d38c47639..9221ad3b3 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # Call the function that sets DNS (needs to be defined by you) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "Clear site cache" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "The LDNMP environment has been set to high performance mode" @@ -2597,7 +2584,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -2616,7 +2603,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -4751,7 +4747,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -6367,7 +6363,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard disk partition management" + echo "Hard drive partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -7360,7 +7356,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in using key + # Log in with key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7739,6 +7735,7 @@ linux_test() { echo -e "${gl_kjlan}Comprehensive testing" echo -e "${gl_kjlan}31. ${gl_bai}bench performance test" echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx fusion monster evaluation${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}nodequality fusion monster evaluation${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 32) send_stats "spiritysdx fusion monster review" clear - curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; + 33) + send_stats "nodequality fusion monster evaluation" + clear + bash <(curl -sL https://run.NodeQuality.com) + ;; + + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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 "renew$ldnmp_pods" echo "renew${ldnmp_pods}Finish" @@ -9067,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool${gl_kjlan}104. ${color104}Stream four-layer proxy forwarding tool" echo -e "${gl_kjlan}105. ${color105}Siyuan Notes${gl_kjlan}106. ${color106}Drawnix open source whiteboard tool" echo -e "${gl_kjlan}107. ${color107}PanSou network disk search${gl_kjlan}108. ${color108}LangBot chatbot" + echo -e "${gl_kjlan}109. ${color109}ZFile online network disk${gl_kjlan}110. ${color110}Karakeep bookmark management" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" @@ -9410,7 +9415,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal service$check_docker $update_status" + echo -e "postal services$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "Installation completed" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "App has been uninstalled" + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# Intelligent switching mirror source function +switch_mirror() { + # Optional parameter, default is false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # Get user country + local country + country=$(curl -s ipinfo.io/country) + + echo "Countries detected:$country" + + if [ "$country" = "CN" ]; then + echo "Use domestic mirror sources..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "Use official mirror source..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13142,7 +13259,7 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 priority" + echo "Switched to IPv6 first" send_stats "Switched to IPv6 priority" ;; @@ -13479,7 +13596,7 @@ EOF echo "Select update source region" echo "Access LinuxMirrors to switch system update sources" echo "------------------------" - echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas regions" + echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas regions 4. Intelligent switching of update sources" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "Overseas sources" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "Intelligent switching of update sources" + switch_mirror true true + ;; + *) echo "Canceled" ;; @@ -14492,7 +14614,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 4de4a5ef3..527ff1dc4 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -897,12 +897,12 @@ open_port() { 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" + echo "ポートがオープンしました$port" fi done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -1225,7 +1225,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # DNS を設定する関数を呼び出します (ユーザーが定義する必要があります) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "サイトキャッシュをクリアする" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP 環境が高パフォーマンス モードに設定されている" @@ -2929,7 +2916,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -3527,7 +3520,7 @@ ldnmp_Proxy_backend_stream() { *) echo "無効な選択"; return 1 ;; esac - read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306)。" reverseproxy_port + read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306):" reverseproxy_port nginx_install_status cd /home && mkdir -p web/stream.d @@ -4177,7 +4170,7 @@ frps_panel() { 8) send_stats "IPアクセスをブロックする" - echo "ドメイン名アクセスを反転している場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全です。" + echo "ドメイン名アクセスを逆にしている場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全になります。" read -e -p "ブロックするポートを入力してください:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -4751,7 +4747,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5352,7 +5348,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドのパラメータを構築する + # clamscan コマンドパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5417,7 +5413,7 @@ clamav() { ;; 3) send_stats "カスタムディレクトリスキャン" - read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root)。" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -7151,7 +7147,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" + echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7360,7 +7356,7 @@ docker_ssh_migration() { echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーを使用してログインする + # キーでログイン scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7739,6 +7735,7 @@ linux_test() { 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}33. ${gl_bai}ノードクオリティ融合モンスターの評価${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; + 33) + send_stats "ノードクオリティ融合モンスターの評価" + clear + bash <(curl -sL https://run.NodeQuality.com) + ;; + + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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}仕上げる" @@ -9067,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール${gl_kjlan}104. ${color104}ストリーム 4 層プロキシ転送ツール" echo -e "${gl_kjlan}105. ${color105}思源ノート${gl_kjlan}106. ${color106}Drawnix オープンソース ホワイトボード ツール" echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索${gl_kjlan}108. ${color108}LangBot チャットボット" + echo -e "${gl_kjlan}109. ${color109}ZFileオンラインネットワークディスク${gl_kjlan}110. ${color110}カラオケのブックマーク管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" @@ -9339,7 +9344,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "インストール完了" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "アプリがアンインストールされました" + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# インテリジェントスイッチングミラーソース機能 +switch_mirror() { + # オプションのパラメータ、デフォルトは false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # ユーザーの国を取得する + local country + country=$(curl -s ipinfo.io/country) + + echo "検出された国:$country" + + if [ "$country" = "CN" ]; then + echo "国内のミラーソースを使用..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "公式ミラーソースを使用してください..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13371,7 +13488,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13479,7 +13596,7 @@ EOF echo "更新元リージョンの選択" echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" echo "------------------------" - echo "1. 中国本土 [デフォルト] 2. 中国本土 [教育ネットワーク] 3. 海外地域" + echo "1. 中国本土 [デフォルト] 2. 中国本土 [教育ネットワーク] 3. 海外地域 4. 更新ソースのインテリジェントな切り替え" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "海外情報源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "アップデートソースのインテリジェントな切り替え" + switch_mirror true true + ;; + *) echo "キャンセル" ;; @@ -14408,7 +14530,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14492,7 +14614,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS オファー${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index c2533424d..056abd24f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # DNS를 설정하는 함수 호출(사용자가 정의해야 함) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "사이트 캐시 지우기" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP 환경이 고성능 모드로 설정되었습니다." @@ -2597,7 +2584,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2616,7 +2603,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2729,7 +2716,7 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -5340,7 +5336,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -7360,7 +7356,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키를 사용하여 로그인 + # 키로 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7739,6 +7735,7 @@ linux_test() { 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}33. ${gl_bai}Nodequality 융합 몬스터 평가${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh + ;; + + 33) + send_stats "Nodequality 융합 몬스터 평가" + clear + bash <(curl -sL https://run.NodeQuality.com) ;; + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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}마치다" @@ -9067,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" + echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" @@ -9410,7 +9415,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우정$check_docker $update_status" + echo -e "우편 서비스$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "설치 완료" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "앱이 제거되었습니다." + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# 지능형 스위칭 미러 소스 기능 +switch_mirror() { + # 선택적 매개변수, 기본값은 false입니다. + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # 사용자 국가 가져오기 + local country + country=$(curl -s ipinfo.io/country) + + echo "감지된 국가:$country" + + if [ "$country" = "CN" ]; then + echo "국내 미러 소스를 사용하세요..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "공식 미러 소스를 사용하세요..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13444,7 +13561,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 + # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13479,7 +13596,7 @@ EOF echo "업데이트 소스 지역 선택" echo "LinuxMirrors에 액세스하여 시스템 업데이트 소스 전환" echo "------------------------" - echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" + echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역 4. 업데이트 소스의 지능형 전환" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "해외 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "업데이트 소스의 지능적인 전환" + switch_mirror true true + ;; + *) echo "취소" ;; @@ -14492,7 +14614,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 혜택${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 0f95ecbed..5687c0c6e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # 調用設置 DNS 的函數(需你定義) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "清理站點緩存" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP環境已設置成 高性能模式" @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -7739,6 +7735,7 @@ linux_test() { echo -e "${gl_kjlan}綜合性測試" echo -e "${gl_kjlan}31. ${gl_bai}bench 性能測試" echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪測評${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}nodequality 融合怪測評${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; + 33) + send_stats "nodequality融合怪測評" + clear + bash <(curl -sL https://run.NodeQuality.com) + ;; + + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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}完成" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具${gl_kjlan}104. ${color104}Stream四層代理轉發工具" echo -e "${gl_kjlan}105. ${color105}思源筆記${gl_kjlan}106. ${color106}Drawnix開源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索${gl_kjlan}108. ${color108}LangBot聊天機器人" + echo -e "${gl_kjlan}109. ${color109}ZFile在線網盤${gl_kjlan}110. ${color110}Karakeep書籤管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# 智能切換鏡像源函數 +switch_mirror() { + # 可選參數,默認為 false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # 獲取用戶國家 + local country + country=$(curl -s ipinfo.io/country) + + echo "檢測到國家:$country" + + if [ "$country" = "CN" ]; then + echo "使用國內鏡像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "使用官方鏡像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13479,7 +13596,7 @@ EOF echo "選擇更新源區域" echo "接入LinuxMirrors切換系統更新源" echo "------------------------" - echo "1. 中國大陸【默認】 2. 中國大陸【教育網】 3. 海外地區" + echo "1. 中國大陸【默認】 2. 中國大陸【教育網】 3. 海外地區 4. 智能切換更新源" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "智能切換更新源" + switch_mirror true true + ;; + *) echo "已取消" ;; From abe9dab50efe678869248b04ccfdf4659f67b9c6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 16 Nov 2025 04:06:41 +0000 Subject: [PATCH 364/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-11-16=2004:06:41?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 184 +++++++++++++++++++++++++++++++++++++-------- jp/kejilion.sh | 200 +++++++++++++++++++++++++++++++++++++++---------- kr/kejilion.sh | 190 +++++++++++++++++++++++++++++++++++++--------- tw/kejilion.sh | 170 +++++++++++++++++++++++++++++++++++------ 4 files changed, 616 insertions(+), 128 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index d38c47639..8e4ece6ab 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # Call the function that sets DNS (needs to be defined by you) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "Clear site cache" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "The LDNMP environment has been set to high performance mode" @@ -2597,7 +2584,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -2616,7 +2603,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -4751,7 +4747,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -7360,7 +7356,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in using key + # Log in with key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7739,6 +7735,7 @@ linux_test() { echo -e "${gl_kjlan}Comprehensive testing" echo -e "${gl_kjlan}31. ${gl_bai}bench performance test" echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx fusion monster evaluation${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}nodequality fusion monster evaluation${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 32) send_stats "spiritysdx fusion monster review" clear - curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; + 33) + send_stats "nodequality fusion monster evaluation" + clear + bash <(curl -sL https://run.NodeQuality.com) + ;; + + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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 "renew$ldnmp_pods" echo "renew${ldnmp_pods}Finish" @@ -9067,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool${gl_kjlan}104. ${color104}Stream four-layer proxy forwarding tool" echo -e "${gl_kjlan}105. ${color105}Siyuan Notes${gl_kjlan}106. ${color106}Drawnix open source whiteboard tool" echo -e "${gl_kjlan}107. ${color107}PanSou network disk search${gl_kjlan}108. ${color108}LangBot chatbot" + echo -e "${gl_kjlan}109. ${color109}ZFile online network disk${gl_kjlan}110. ${color110}Karakeep bookmark management" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" @@ -9410,7 +9415,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal service$check_docker $update_status" + echo -e "postal services$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "Installation completed" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "App has been uninstalled" + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# Intelligent switching mirror source function +switch_mirror() { + # Optional parameter, default is false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # Get user country + local country + country=$(curl -s ipinfo.io/country) + + echo "Countries detected:$country" + + if [ "$country" = "CN" ]; then + echo "Use domestic mirror sources..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "Use official mirror source..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13479,7 +13596,7 @@ EOF echo "Select update source region" echo "Access LinuxMirrors to switch system update sources" echo "------------------------" - echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas regions" + echo "1. Mainland China [Default] 2. Mainland China [Education Network] 3. Overseas regions 4. Intelligent switching of update sources" echo "------------------------" echo "0. Return to the previous menu" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "Overseas sources" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "Intelligent switching of update sources" + switch_mirror true true + ;; + *) echo "Canceled" ;; @@ -14492,7 +14614,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 4de4a5ef3..28aec41f5 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -897,12 +897,12 @@ open_port() { 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" + echo "ポートがオープンしました$port" fi done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # DNS を設定する関数を呼び出します (ユーザーが定義する必要があります) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "サイトキャッシュをクリアする" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP 環境が高パフォーマンス モードに設定されている" @@ -2929,7 +2916,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -3527,7 +3520,7 @@ ldnmp_Proxy_backend_stream() { *) echo "無効な選択"; return 1 ;; esac - read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306)。" reverseproxy_port + read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306):" reverseproxy_port nginx_install_status cd /home && mkdir -p web/stream.d @@ -4177,7 +4170,7 @@ frps_panel() { 8) send_stats "IPアクセスをブロックする" - echo "ドメイン名アクセスを反転している場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全です。" + echo "ドメイン名アクセスを逆にしている場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全になります。" read -e -p "ブロックするポートを入力してください:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -4751,7 +4747,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5352,7 +5348,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドのパラメータを構築する + # clamscan コマンドパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5417,7 +5413,7 @@ clamav() { ;; 3) send_stats "カスタムディレクトリスキャン" - read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root)。" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -7151,7 +7147,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" + echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7360,7 +7356,7 @@ docker_ssh_migration() { echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーを使用してログインする + # キーでログイン scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7739,6 +7735,7 @@ linux_test() { 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}33. ${gl_bai}ノードクオリティ融合モンスターの評価${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; + 33) + send_stats "ノードクオリティ融合モンスターの評価" + clear + bash <(curl -sL https://run.NodeQuality.com) + ;; + + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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}仕上げる" @@ -9067,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール${gl_kjlan}104. ${color104}ストリーム 4 層プロキシ転送ツール" echo -e "${gl_kjlan}105. ${color105}思源ノート${gl_kjlan}106. ${color106}Drawnix オープンソース ホワイトボード ツール" echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索${gl_kjlan}108. ${color108}LangBot チャットボット" + echo -e "${gl_kjlan}109. ${color109}ZFileオンラインネットワークディスク${gl_kjlan}110. ${color110}カラオケのブックマーク管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" @@ -9339,7 +9344,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "インストール完了" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "アプリがアンインストールされました" + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# インテリジェントスイッチングミラーソース機能 +switch_mirror() { + # オプションのパラメータ、デフォルトは false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # ユーザーの国を取得する + local country + country=$(curl -s ipinfo.io/country) + + echo "検出された国:$country" + + if [ "$country" = "CN" ]; then + echo "国内のミラーソースを使用..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "公式ミラーソースを使用してください..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13371,7 +13488,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13479,7 +13596,7 @@ EOF echo "更新元リージョンの選択" echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" echo "------------------------" - echo "1. 中国本土 [デフォルト] 2. 中国本土 [教育ネットワーク] 3. 海外地域" + echo "1. 中国本土 [デフォルト] 2. 中国本土 [教育ネットワーク] 3. 海外地域 4. 更新ソースのインテリジェントな切り替え" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "海外情報源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "アップデートソースのインテリジェントな切り替え" + switch_mirror true true + ;; + *) echo "キャンセル" ;; @@ -14408,7 +14530,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14492,7 +14614,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS オファー${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index c2533424d..056abd24f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # DNS를 설정하는 함수 호출(사용자가 정의해야 함) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "사이트 캐시 지우기" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP 환경이 고성능 모드로 설정되었습니다." @@ -2597,7 +2584,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2616,7 +2603,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2729,7 +2716,7 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -5340,7 +5336,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -7360,7 +7356,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키를 사용하여 로그인 + # 키로 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7739,6 +7735,7 @@ linux_test() { 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}33. ${gl_bai}Nodequality 융합 몬스터 평가${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh + ;; + + 33) + send_stats "Nodequality 융합 몬스터 평가" + clear + bash <(curl -sL https://run.NodeQuality.com) ;; + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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}마치다" @@ -9067,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" + echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" @@ -9410,7 +9415,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우정$check_docker $update_status" + echo -e "우편 서비스$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "설치 완료" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "앱이 제거되었습니다." + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# 지능형 스위칭 미러 소스 기능 +switch_mirror() { + # 선택적 매개변수, 기본값은 false입니다. + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # 사용자 국가 가져오기 + local country + country=$(curl -s ipinfo.io/country) + + echo "감지된 국가:$country" + + if [ "$country" = "CN" ]; then + echo "국내 미러 소스를 사용하세요..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "공식 미러 소스를 사용하세요..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13444,7 +13561,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 + # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13479,7 +13596,7 @@ EOF echo "업데이트 소스 지역 선택" echo "LinuxMirrors에 액세스하여 시스템 업데이트 소스 전환" echo "------------------------" - echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역" + echo "1. 중국 본토 [기본값] 2. 중국 본토 [교육 네트워크] 3. 해외 지역 4. 업데이트 소스의 지능형 전환" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "해외 소스" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "업데이트 소스의 지능적인 전환" + switch_mirror true true + ;; + *) echo "취소" ;; @@ -14492,7 +14614,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 혜택${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 0f95ecbed..5687c0c6e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.2" +sh_v="4.2.4" gl_hui='\e[37m' @@ -1404,8 +1404,7 @@ auto_optimize_dns() { local dns2_ipv6="2001:4860:4860::8888" fi - # 調用設置 DNS 的函數(需你定義) - set_dns "$dns1_ipv4" "$dns2_ipv4" "$dns1_ipv6" "$dns2_ipv6" + set_dns } @@ -1439,9 +1438,9 @@ install_ldnmp() { rm -rf /home/custom_mysql_config.cnf - + restart_ldnmp - + clear @@ -1630,17 +1629,8 @@ reverse_proxy() { } -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 1gb > /dev/null 2>&1 - # docker exec -it redis redis-cli CONFIG SET maxmemory-policy allkeys-lru > /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 @@ -1742,7 +1732,6 @@ web_cache() { send_stats "清理站點緩存" cf_purge_cache cd /home/web && docker compose restart - restart_redis } @@ -2329,7 +2318,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_balanced @@ -2370,7 +2358,6 @@ web_optimization() { cd /home/web && docker compose restart - restart_redis optimize_web_server echo "LDNMP環境已設置成 高性能模式" @@ -3100,6 +3087,12 @@ f2b_install_sshd() { curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf fi + if command -v apt &>/dev/null; then + install rsyslog + systemctl start rsyslog + systemctl enable rsyslog + fi + } f2b_sshd() { @@ -4554,9 +4547,7 @@ set_dns() { ip_address chattr -i /etc/resolv.conf -rm /etc/resolv.conf -touch /etc/resolv.conf - +> /etc/resolv.conf if [ -n "$ipv4_address" ]; then echo "nameserver $dns1_ipv4" >> /etc/resolv.conf @@ -4568,6 +4559,11 @@ if [ -n "$ipv6_address" ]; then echo "nameserver $dns2_ipv6" >> /etc/resolv.conf fi +if [ ! -s /etc/resolv.conf ]; then + echo "nameserver 223.5.5.5" >> /etc/resolv.conf + echo "nameserver 8.8.8.8" >> /etc/resolv.conf +fi + chattr +i /etc/resolv.conf } @@ -7739,6 +7735,7 @@ linux_test() { echo -e "${gl_kjlan}綜合性測試" echo -e "${gl_kjlan}31. ${gl_bai}bench 性能測試" echo -e "${gl_kjlan}32. ${gl_bai}spiritysdx 融合怪測評${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}33. ${gl_bai}nodequality 融合怪測評${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -7856,9 +7853,17 @@ linux_test() { 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 + curl -L ${gh_proxy}gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh ;; + 33) + send_stats "nodequality融合怪測評" + clear + bash <(curl -sL https://run.NodeQuality.com) + ;; + + + 0) kejilion @@ -8972,7 +8977,6 @@ linux_ldnmp() { 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}完成" @@ -9129,6 +9133,7 @@ while true; do echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具${gl_kjlan}104. ${color104}Stream四層代理轉發工具" echo -e "${gl_kjlan}105. ${color105}思源筆記${gl_kjlan}106. ${color106}Drawnix開源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索${gl_kjlan}108. ${color108}LangBot聊天機器人" + echo -e "${gl_kjlan}109. ${color109}ZFile在線網盤${gl_kjlan}110. ${color110}Karakeep書籤管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -10753,7 +10758,6 @@ while true; do docker_app_install() { install git mkdir -p /home/docker/ && cd /home/docker/ && git clone https://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 @@ -12602,6 +12606,82 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 109|zfile) + + local app_id="109" + local docker_name="zfile" + local docker_img="zhaojun1998/zfile:latest" + local docker_port=8109 + + docker_rum() { + + + docker run -d --name=zfile --restart=always \ + -p ${docker_port}:8080 \ + -v /home/docker/zfile/db:/root/.zfile-v4/db \ + -v /home/docker/zfile/logs:/root/.zfile-v4/logs \ + -v /home/docker/zfile/file:/data/file \ + -v /home/docker/zfile/application.properties:/root/.zfile-v4/application.properties \ + zhaojun1998/zfile:latest + + + } + + local docker_describe="是一个适用于个人或小团队的在线网盘程序。" + local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 110|karakeep) + local app_id="110" + local app_name="karakeep书签管理" + local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" + local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local docker_name="docker-web-1" + local docker_port="8110" + local app_size="1" + + docker_app_install() { + install git + mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + + docker compose up -d + clear + echo "已經安裝完成" + check_docker_app_ip + } + + docker_app_update() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + cd /home/docker/karakeep/ + git pull origin main + sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml + cd /home/docker/karakeep/docker/ && docker compose up -d + } + + docker_app_uninstall() { + cd /home/docker/karakeep/docker/ && docker compose down --rmi all + rm -rf /home/docker/karakeep + echo "應用已卸載" + } + + docker_app_plus + + ;; + + + + + + + + b) @@ -12876,6 +12956,43 @@ linux_work() { +# 智能切換鏡像源函數 +switch_mirror() { + # 可選參數,默認為 false + local upgrade_software=${1:-false} + local clean_cache=${2:-false} + + # 獲取用戶國家 + local country + country=$(curl -s ipinfo.io/country) + + echo "檢測到國家:$country" + + if [ "$country" = "CN" ]; then + echo "使用國內鏡像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --source mirrors.huaweicloud.com \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + else + echo "使用官方鏡像源..." + bash <(curl -sSL https://linuxmirrors.cn/main.sh) \ + --use-official-source true \ + --protocol https \ + --use-intranet-source false \ + --backup true \ + --upgrade-software "$upgrade_software" \ + --clean-cache "$clean_cache" \ + --ignore-backup-tips \ + --pure-mode + fi +} + linux_Settings() { @@ -13479,7 +13596,7 @@ EOF echo "選擇更新源區域" echo "接入LinuxMirrors切換系統更新源" echo "------------------------" - echo "1. 中國大陸【默認】 2. 中國大陸【教育網】 3. 海外地區" + echo "1. 中國大陸【默認】 2. 中國大陸【教育網】 3. 海外地區 4. 智能切換更新源" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -13498,6 +13615,11 @@ EOF send_stats "海外源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; + 4) + send_stats "智能切換更新源" + switch_mirror true true + ;; + *) echo "已取消" ;; From b6e352c3b8c7467f569aadc73f75230f4230faa7 Mon Sep 17 00:00:00 2001 From: AkarinLiu Date: Sun, 16 Nov 2025 13:59:00 +0800 Subject: [PATCH 365/553] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20Minecraft=20?= =?UTF-8?q?=E5=BC=80=E6=9C=8D=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mc.sh | 445 +++++++++++++++++++++++++++++++++++++++++++++++++++ mc_backup.sh | 7 + 2 files changed, 452 insertions(+) create mode 100644 mc.sh create mode 100644 mc_backup.sh diff --git a/mc.sh b/mc.sh new file mode 100644 index 000000000..fd79f9c4c --- /dev/null +++ b/mc.sh @@ -0,0 +1,445 @@ +#!/bin/bash +ln -sf ~/minecraft_server.sh /usr/local/bin/mcs + +ip_address() { +ipv4_address=$(curl -s ipv4.ip.sb) +ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb) +} + + +install() { + if [ $# -eq 0 ]; then + echo "未提供软件包参数!" + return 1 + fi + + for package in "$@"; do + if ! command -v "$package" &>/dev/null; then + if command -v apt &>/dev/null; then + apt update -y && apt install -y "$package" + elif command -v yum &>/dev/null; then + yum -y update && yum -y install "$package" + elif command -v apk &>/dev/null; then + apk update && apk add "$package" + else + echo "未知的包管理器!" + return 1 + fi + fi + done + + return 0 +} + + +remove() { + if [ $# -eq 0 ]; then + echo "未提供软件包参数!" + return 1 + fi + + for package in "$@"; do + if command -v apt &>/dev/null; then + apt purge -y "$package" + elif command -v yum &>/dev/null; then + yum remove -y "$package" + elif command -v apk &>/dev/null; then + apk del "$package" + else + echo "未知的包管理器!" + return 1 + fi + done + + return 0 +} + + +break_end() { + echo -e "\033[0;32m操作完成\033[0m" + echo "按任意键继续..." + read -n 1 -s -r -p "" + echo "" + clear +} + +mc() { + p + exit +} + + +install_add_docker() { + if [ -f "/etc/alpine-release" ]; then + apk update + apk add docker docker-compose + rc-update add docker default + service docker start + else + curl -fsSL https://get.docker.com | sh && ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin + systemctl start docker + systemctl enable docker + fi +} + +install_docker() { + if ! command -v docker &>/dev/null; then + install_add_docker + else + echo "Docker 已经安装" + fi +} + +mc_start() { + ip_address + tmux new -d -s mc1 "docker start mcserver -it" + echo -e "\033[0;32mMinecraft服务启动啦!\033[0m" + echo -e "\033[0;32m游戏下载地址: https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj\033[0m" + echo -e "\033[0;32m进入游戏连接:\033[93m $ipv4_address:25565 $ipv6_address:25565 \033[0;32m开始冒险吧!\033[0m" + +} + +mc_backup() { + cd ~ + curl -sS -O https://kejilion.pro/mc_backup.sh && chmod +x mc_backup.sh +} + +mc_install_status() { + CONTAINER_NAME="mcserver" + + # 检查容器是否已安装 + if [ "$(docker ps -a -q -f name=$CONTAINER_NAME 2>/dev/null)" ]; then + container_status="\e[32mMinecraft服务已安装\e[0m" # 绿色 + else + container_status="\e[90mMinecraft服务未安装\e[0m" # 灰色 + fi + + SESSION_NAME="mc1" + + ip_address + # 检查 tmux 中是否存在指定的工作区 + if tmux has-session -t $SESSION_NAME 2>/dev/null; then + tmux_status="\e[32m已开服:\033[93m $ipv4_address:25565 $ipv6_address:25565 \e[0m" # 绿色 + else + tmux_status="\e[90m未开服\e[0m" # 灰色 + fi + +} + +while true; do +clear +mc_install_status +echo -e "\033[93m . . ." +echo "███╗ ███╗██╗███╗ ██╗███████╗ ██████╗██████╗ █████╗ ███████╗████████╗" +echo "████╗ ████║██║████╗ ██║██╔════╝██╔════╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝" +echo "██╔████╔██║██║██╔██╗ ██║█████╗ ██║ ██████╔╝███████║█████╗ ██║ " +echo "██║╚██╔╝██║██║██║╚██╗██║██╔══╝ ██║ ██╔══██╗██╔══██║██╔══╝ ██║ " +echo "██║ ╚═╝ ██║██║██║ ╚████║███████╗╚██████╗██║ ██║██║ ██║██║ ██║ " +echo "╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ " +echo -e "\033[96mMinecraft开服一键脚本工具v1.0.0 by AkarinLiu\033[0m" +echo -e "\033[96m-输入\033[93mp\033[96m可快速启动此脚本-\033[0m" +echo -e "$container_status $tmux_status" +echo "------------------------" +echo "1. 安装Minecraft服务" +echo "2. 开启Minecraft服务" +echo "3. 关闭Minecraft服务" +echo "4. 重启Minecraft服务" +echo "------------------------" +echo "5. 查看服务器状态" +echo "6. 设置虚拟内存" +echo "------------------------" +echo "7. 导出游戏存档" +echo "8. 导入游戏存档" +echo "9. 定时备份游戏存档" +echo "------------------------" +echo "10. 修改游戏配置" +echo "------------------------" +echo "11. 更新Minecraft服务" +echo "12. 卸载Minecraft服务" +echo "------------------------" +echo "k. 科技lion脚本工具箱" +echo "------------------------" +echo "00. 脚本更新" +echo "------------------------" +echo "0. 退出脚本" +echo "------------------------" +read -p "请输入你的选择: " choice + +case $choice in + 1) + clear + install_docker + install tmux + docker create -d --name $CONTAINER_NAME -p 25565:25565/tcp --restart=always -e EULA=true -v mcserver:/data:rw itzg/minecraft-server + clear + mc_start + ;; + + 2) + clear + docker start $CONTAINER_NAME > /dev/null 2>&1 + mc_start + ;; + + 3) + clear + tmux kill-session -t mc1 + docker stop $CONTAINER_NAME > /dev/null 2>&1 + echo -e "\033[0;32mMinecraft服务已关闭\033[0m" + ;; + + 4) + clear + tmux kill-session -t mc1 + docker restart $CONTAINER_NAME > /dev/null 2>&1 + mc_start + ;; + + 5) + clear + install btop + clear + btop + ;; + + 6) + clear + swap_used=$(free -m | awk 'NR==3{print $3}') + swap_total=$(free -m | awk 'NR==3{print $2}') + + if [ "$swap_total" -eq 0 ]; then + swap_percentage=0 + else + swap_percentage=$((swap_used * 100 / swap_total)) + fi + + swap_info="${swap_used}MB/${swap_total}MB (${swap_percentage}%)" + + echo "当前虚拟内存: $swap_info" + + read -p "是否调整大小?(Y/N): " choice + + case "$choice" in + [Yy]) + # 输入新的虚拟内存大小 + read -p "请输入虚拟内存大小MB: " new_swap + + # 获取当前系统中所有的 swap 分区 + swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') + + # 遍历并删除所有的 swap 分区 + for partition in $swap_partitions; do + swapoff "$partition" + wipefs -a "$partition" # 清除文件系统标识符 + mkswap -f "$partition" + echo "已删除并重新创建 swap 分区: $partition" + done + + # 确保 /swapfile 不再被使用 + swapoff /swapfile + + # 删除旧的 /swapfile + rm -f /swapfile + + # 创建新的 swap 分区 + dd if=/dev/zero of=/swapfile bs=1M count=$new_swap + chmod 600 /swapfile + mkswap /swapfile + swapon /swapfile + + if [ -f /etc/alpine-release ]; then + echo "/swapfile swap swap defaults 0 0" >> /etc/fstab + echo "nohup swapon /swapfile" >> /etc/local.d/swap.start + chmod +x /etc/local.d/swap.start + rc-update add local + else + echo "/swapfile swap swap defaults 0 0" >> /etc/fstab + fi + + echo "虚拟内存大小已调整为${new_swap}MB" + ;; + [Nn]) + echo "已取消" + ;; + *) + echo "无效的选择,请输入 Y 或 N。" + ;; + esac + ;; + + 7) + clear + mkdir -p /home/game + docker cp $CONTAINER_NAME:/data/world /home/game/mc/ > /dev/null 2>&1 + cd /home/game && tar czvf mcsave_$(date +"%Y%m%d%H%M%S").tar.gz mc > /dev/null 2>&1 + rm -rf /home/game/mc/ + echo -e "\033[0;32m游戏存档已导出存放在: /home/game/\033[0m" + ;; + 8) + clear + tmux kill-session -t mc1 + docker exec -it mcserver bash -c "rm -rf /data/world/*" + cd /home/game/ && ls -t /home/game/mc/mcsave_*.tar.gz | head -1 | xargs -I {} tar -xzf {} + docker cp /home/game/mc/world/* mcserver: + docker exec -it -u root $CONTAINER_NAME bash -c "chmod -R 777 /home/steam/Steam/steamapps/common/mcServer/mc/Saved/" + rm -rf /home/game/mc/ + echo -e "\033[0;32m游戏存档已导入\033[0m" + docker restart mcserver > /dev/null 2>&1 + mc_start + ;; + + 9) + clear + echo "Minecraft游戏存档定时备份" + echo "------------------------" + echo "1. 每周备份 2. 每天备份 3. 每小时备份" + echo "------------------------" + read -p "请输入你的选择: " dingshi + case $dingshi in + 1) + mc_backup + (crontab -l ; echo "0 0 * * 1 ./mc_backup.sh") | crontab - > /dev/null 2>&1 + echo "每周一备份,已设置" + + ;; + 2) + mc_backup + (crontab -l ; echo "0 3 * * * ./mc_backup.sh") | crontab - > /dev/null 2>&1 + echo "每天凌晨3点备份,已设置" + + ;; + 3) + mc_backup + (crontab -l ; echo "0 * * * * ./mc_backup.sh") | crontab - > /dev/null 2>&1 + echo "每小时整点备份,已设置" + + ;; + *) + echo "已取消" + ;; + esac + ;; + + 10) + clear + tmux kill-session -t mc1 + cd ~ && curl -sS -O https://kejilion.pro/mcSettings.ini + + echo "配置游戏参数" + echo "------------------------" + read -p "设置加入的密码(回车默认无密码): " server_password + read -p "设置游戏难度: (1. 简单 2. 普通 3. 困难):" Difficulty + case $Difficulty in + 1) + Difficulty=1 + ;; + + 2) + Difficulty=2 + ;; + 3) + Difficulty=3 + ;; + *) + echo "-默认设置为普通难度" + Difficulty=2 + ;; + esac + + read -p "经验值倍率: (回车默认1倍):" exp_rate + ExpRate=${exp_rate:-1} + read -p "死亡后掉落设置: (1. 掉落 2. 不掉落):" DeathPenalty + case $DeathPenalty in + 1) + DeathPenalty=All + ;; + + 2) + DeathPenalty=None + ;; + *) + DeathPenalty=All + echo "-默认设置为掉落" + ;; + esac + + read -p "设置pvp模式: (1. 开启 2. 关闭):" mc_pvp + + case $mc_pvp in + 1) + mc_pvp=True + ;; + 2) + mc_pvp=False + ;; + *) + mc_pvp=False + echo "-默认关闭pvp模式" + ;; + esac + + # 更新配置文件 + sed -i "s/ServerPassword=\"\"/ServerPassword=\"$server_password\"/" ~/mcSettings.ini + sed -i "s/Difficulty=2/Difficulty=$Difficulty/" ~/mcSettings.ini + sed -i "s/ExpRate=1.000000/ExpRate=$ExpRate/" ~/mcSettings.ini + sed -i "s/DeathPenalty=All/DeathPenalty=$DeathPenalty/" ~/mcSettings.ini + sed -i "s/bEnablePlayerToPlayerDamage=False/bEnablePlayerToPlayerDamage=$mc_pvp/" ~/mcSettings.ini + sed -i "s/bIsPvP=False/bIsPvP=$mc_pvp/" ~/mcSettings.ini + echo "------------------------" + echo "配置文件已更新" + + docker exec -it mcserver bash -c "rm -f /home/steam/Steam/steamapps/common/mcServer/mc/Saved/Config/LinuxServer/mcSettings.ini" + docker cp ~/mcSettings.ini mcserver:/home/steam/Steam/steamapps/common/mcServer/mc/Saved/Config/LinuxServer/ > /dev/null 2>&1 + docker exec -it -u root $CONTAINER_NAME bash -c "chmod -R 777 /home/steam/Steam/steamapps/common/mcServer/mc/Saved/" + rm -f ~/mcSettings.ini + echo -e "\033[0;32m游戏配置已导入\033[0m" + docker restart mcserver > /dev/null 2>&1 + mc_start + ;; + + + 11) + clear + tmux kill-session -t mc1 + docker restart mcserver > /dev/null 2>&1 + docker exec -it mcserver bash -c "/home/steam/mcserver/mcserver.sh +login anonymous +app_update 2394010 validate +quit" + clear + echo -e "\033[0;32mMinecraft已更新\033[0m" + mc_start + ;; + + 12) + clear + docker rm -f mcserver + docker rmi -f cm2network/mcserver + ;; + + k) + cd ~ + curl -sS -O https://kejilion.pro/kejilion.sh && chmod +x kejilion.sh && ./kejilion.sh + exit + ;; + + 00) + cd ~ + curl -sS -O https://kejilion.pro/mc_log.sh && chmod +x mc_log.sh && ./mc_log.sh + rm mc_log.sh + echo "" + curl -sS -O https://kejilion.pro/mc.sh && chmod +x mc.sh + echo "脚本已更新到最新版本!" + break_end + mc + ;; + + + 0) + clear + exit + ;; + + *) + echo "无效的输入!" + ;; +esac + break_end +done diff --git a/mc_backup.sh b/mc_backup.sh new file mode 100644 index 000000000..2f0515202 --- /dev/null +++ b/mc_backup.sh @@ -0,0 +1,7 @@ +#!/bin/bash +clear +mkdir -p /home/game +docker cp mcserver:/data /home/game/mc +cd /home/game && tar czvf mc_$(date +"%Y%m%d%H%M%S").tar.gz mc +rm -rf /home/game/mc/ +echo -e "\033[0;32m游戏存档已导出存放在: /home/game/\033[0m" \ No newline at end of file From c01330aa19ca4b843de3f12d0abe66d70e769259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:43:15 +0800 Subject: [PATCH 366/553] Update kejilion.sh --- cn/kejilion.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6d8be57d3..039797fae 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -235,11 +235,12 @@ check_disk_space() { install_dependency() { - install wget unzip tar jq grep - + switch_mirror true true + check_port check_swap - auto_optimize_dns prefer_ipv4 + auto_optimize_dns + install wget unzip tar jq grep } @@ -1638,7 +1639,8 @@ restart_ldnmp() { 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 + cd /home/web && docker compose restart + } @@ -3176,7 +3178,6 @@ root_use clear echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 /home -check_port install_dependency install_docker install_certbot @@ -3193,7 +3194,6 @@ root_use clear echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 /home -check_port install_dependency install_docker install_certbot @@ -8853,7 +8853,6 @@ linux_ldnmp() { echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" - check_port install_dependency install_docker install_certbot @@ -8989,7 +8988,6 @@ linux_ldnmp() { cd /home/web/ docker compose down --rmi all - check_port install_dependency install_docker install_certbot From 4f88b479f365a2408c866fe133d13144ebac9c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:43:54 +0800 Subject: [PATCH 367/553] Refactor install_dependency function and remove check_port --- kejilion.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 5bcbf0676..0abd6f75e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -235,11 +235,12 @@ check_disk_space() { install_dependency() { - install wget unzip tar jq grep - + switch_mirror true true + check_port check_swap - auto_optimize_dns prefer_ipv4 + auto_optimize_dns + install wget unzip tar jq grep } @@ -1638,7 +1639,8 @@ restart_ldnmp() { 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 + cd /home/web && docker compose restart + } @@ -3176,7 +3178,6 @@ root_use clear echo -e "${gl_huang}LDNMP环境未安装,开始安装LDNMP环境...${gl_bai}" check_disk_space 3 /home -check_port install_dependency install_docker install_certbot @@ -3193,7 +3194,6 @@ root_use clear echo -e "${gl_huang}nginx未安装,开始安装nginx环境...${gl_bai}" check_disk_space 1 /home -check_port install_dependency install_docker install_certbot @@ -8853,7 +8853,6 @@ linux_ldnmp() { echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" - check_port install_dependency install_docker install_certbot @@ -8989,7 +8988,6 @@ linux_ldnmp() { cd /home/web/ docker compose down --rmi all - check_port install_dependency install_docker install_certbot From 2110e9e734386fc887dda7eb35e4d670bdceadee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:46:27 +0800 Subject: [PATCH 368/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 153ab569f..c94a568e6 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1354,5 +1354,6 @@ LDNMP安装环境时对mysql进行优化。 自动优化dns地址修复部分机型写入为空的问题。 系统工具ssh防御修复个别系统安装后启动失败的问题。 LDNMP环境中redis去除了不必要的清理机制。 +LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 ------------------------ From 04cf6e42f5907cb223920674bc759b77ea8fd8a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:27:04 +0800 Subject: [PATCH 369/553] Fix docker stop command indentation in install_ssltls --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 039797fae..b1041c15a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1467,8 +1467,8 @@ install_certbot() { install_ssltls() { - docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 + docker stop nginx > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" From 45a5a67861712126d9c8792825e2575b21e404eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 10:27:55 +0800 Subject: [PATCH 370/553] Fix docker stop command indentation in install_ssltls --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 0abd6f75e..bc9b4413c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1467,8 +1467,8 @@ install_certbot() { install_ssltls() { - docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 + docker stop nginx > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" From d3bdcdbeb39996ae39845e1c7c1a14edff2eca1b Mon Sep 17 00:00:00 2001 From: AkarinLiu Date: Mon, 17 Nov 2025 13:51:27 +0800 Subject: [PATCH 371/553] =?UTF-8?q?=E5=AF=B9=20Minecraft=20=E7=9A=84?= =?UTF-8?q?=E9=9A=BE=E5=BA=A6=E7=AD=89=E7=BB=86=E8=8A=82=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BA=86=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mc.sh | 104 ++++++++++++++++++++++----------------------------- mc_backup.sh | 4 +- mc_log.sh | 7 ++++ 3 files changed, 53 insertions(+), 62 deletions(-) create mode 100644 mc_log.sh diff --git a/mc.sh b/mc.sh index fd79f9c4c..f79a7b3ca 100644 --- a/mc.sh +++ b/mc.sh @@ -92,7 +92,7 @@ install_docker() { mc_start() { ip_address - tmux new -d -s mc1 "docker start mcserver -it" + docker start mcserver > /dev/null 2>&1 echo -e "\033[0;32mMinecraft服务启动啦!\033[0m" echo -e "\033[0;32m游戏下载地址: https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj\033[0m" echo -e "\033[0;32m进入游戏连接:\033[93m $ipv4_address:25565 $ipv6_address:25565 \033[0;32m开始冒险吧!\033[0m" @@ -114,11 +114,9 @@ mc_install_status() { container_status="\e[90mMinecraft服务未安装\e[0m" # 灰色 fi - SESSION_NAME="mc1" - ip_address - # 检查 tmux 中是否存在指定的工作区 - if tmux has-session -t $SESSION_NAME 2>/dev/null; then + # 检查 Docker 容器是否正在运行 + if docker ps --format "table {{.Names}}" | grep -q "^$CONTAINER_NAME$"; then tmux_status="\e[32m已开服:\033[93m $ipv4_address:25565 $ipv6_address:25565 \e[0m" # 绿色 else tmux_status="\e[90m未开服\e[0m" # 灰色 @@ -129,15 +127,14 @@ mc_install_status() { while true; do clear mc_install_status -echo -e "\033[93m . . ." -echo "███╗ ███╗██╗███╗ ██╗███████╗ ██████╗██████╗ █████╗ ███████╗████████╗" -echo "████╗ ████║██║████╗ ██║██╔════╝██╔════╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝" -echo "██╔████╔██║██║██╔██╗ ██║█████╗ ██║ ██████╔╝███████║█████╗ ██║ " -echo "██║╚██╔╝██║██║██║╚██╗██║██╔══╝ ██║ ██╔══██╗██╔══██║██╔══╝ ██║ " -echo "██║ ╚═╝ ██║██║██║ ╚████║███████╗╚██████╗██║ ██║██║ ██║██║ ██║ " -echo "╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ " -echo -e "\033[96mMinecraft开服一键脚本工具v1.0.0 by AkarinLiu\033[0m" -echo -e "\033[96m-输入\033[93mp\033[96m可快速启动此脚本-\033[0m" +echo -e "\033[92m███╗ ███╗██╗███╗ ██╗███████╗ ██████╗██████╗ █████╗ ███████╗████████╗\033[0m" +echo -e "\033[92m████╗ ████║██║████╗ ██║██╔════╝██╔════╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝\033[0m" +echo -e "\033[92m██╔████╔██║██║██╔██╗ ██║█████╗ ██║ ██████╔╝███████║█████╗ ██║ \033[0m" +echo -e "\033[92m██║╚██╔╝██║██║██║╚██╗██║██╔══╝ ██║ ██╔══██╗██╔══██║██╔══╝ ██║ \033[0m" +echo -e "\033[92m██║ ╚═╝ ██║██║██║ ╚████║███████╗╚██████╗██║ ██║██║ ██║██║ ██║ \033[0m" +echo -e "\033[92m╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ \033[0m" +echo -e "\033[92mMinecraft开服一键脚本工具v1.0.1 by AkarinLiu\033[0m" +echo -e "\033[92m-输入\033[92mp\033[92m可快速启动此脚本-\033[0m" echo -e "$container_status $tmux_status" echo "------------------------" echo "1. 安装Minecraft服务" @@ -153,6 +150,8 @@ echo "8. 导入游戏存档" echo "9. 定时备份游戏存档" echo "------------------------" echo "10. 修改游戏配置" +echo "o. 添加管理员权限" +echo "p. 删除管理员权限" echo "------------------------" echo "11. 更新Minecraft服务" echo "12. 卸载Minecraft服务" @@ -169,8 +168,7 @@ case $choice in 1) clear install_docker - install tmux - docker create -d --name $CONTAINER_NAME -p 25565:25565/tcp --restart=always -e EULA=true -v mcserver:/data:rw itzg/minecraft-server + docker run -d --name mcserver -p 25565:25565/tcp --restart=always -e EULA=true -e CREATE_CONSOLE_IN_PIPE=true -v mcserver:/data:rw itzg/minecraft-server clear mc_start ;; @@ -183,14 +181,12 @@ case $choice in 3) clear - tmux kill-session -t mc1 docker stop $CONTAINER_NAME > /dev/null 2>&1 echo -e "\033[0;32mMinecraft服务已关闭\033[0m" ;; 4) clear - tmux kill-session -t mc1 docker restart $CONTAINER_NAME > /dev/null 2>&1 mc_start ;; @@ -273,15 +269,14 @@ case $choice in docker cp $CONTAINER_NAME:/data/world /home/game/mc/ > /dev/null 2>&1 cd /home/game && tar czvf mcsave_$(date +"%Y%m%d%H%M%S").tar.gz mc > /dev/null 2>&1 rm -rf /home/game/mc/ - echo -e "\033[0;32m游戏存档已导出存放在: /home/game/\033[0m" + echo -e "\033[0;32m游戏存档已导出存放在: /home/game/mc/\033[0m" ;; 8) clear - tmux kill-session -t mc1 + docker stop mcserver > /dev/null 2>&1 docker exec -it mcserver bash -c "rm -rf /data/world/*" - cd /home/game/ && ls -t /home/game/mc/mcsave_*.tar.gz | head -1 | xargs -I {} tar -xzf {} - docker cp /home/game/mc/world/* mcserver: - docker exec -it -u root $CONTAINER_NAME bash -c "chmod -R 777 /home/steam/Steam/steamapps/common/mcServer/mc/Saved/" + cd /home/game/ && ls -t /home/game/mc/*.tar.gz | head -1 | xargs -I {} tar -xzf {} + docker cp /home/game/mc/world/* mcserver:/data/world rm -rf /home/game/mc/ echo -e "\033[0;32m游戏存档已导入\033[0m" docker restart mcserver > /dev/null 2>&1 @@ -322,43 +317,40 @@ case $choice in 10) clear - tmux kill-session -t mc1 - cd ~ && curl -sS -O https://kejilion.pro/mcSettings.ini - echo "配置游戏参数" echo "------------------------" - read -p "设置加入的密码(回车默认无密码): " server_password - read -p "设置游戏难度: (1. 简单 2. 普通 3. 困难):" Difficulty + read -p "设置游戏难度: (0.和平 1. 简单 2. 普通 3. 困难):" Difficulty case $Difficulty in + 0) + docker exec --user 1000 mcserver mc-send-to-console difficulty peaceful + ;; 1) - Difficulty=1 + docker exec --user 1000 mcserver mc-send-to-console difficulty easy ;; 2) - Difficulty=2 + docker exec --user 1000 mcserver mc-send-to-console difficulty normal ;; 3) - Difficulty=3 + docker exec --user 1000 mcserver mc-send-to-console difficulty hard ;; *) echo "-默认设置为普通难度" - Difficulty=2 + docker exec --user 1000 mcserver mc-send-to-console difficulty normal ;; esac - read -p "经验值倍率: (回车默认1倍):" exp_rate - ExpRate=${exp_rate:-1} read -p "死亡后掉落设置: (1. 掉落 2. 不掉落):" DeathPenalty case $DeathPenalty in 1) - DeathPenalty=All + docker exec --user 1000 mcserver mc-send-to-console gamerule KeepInventoy false ;; 2) - DeathPenalty=None + docker exec --user 1000 mcserver mc-send-to-console gamerule KeepInventoy true ;; *) - DeathPenalty=All + docker exec --user 1000 mcserver mc-send-to-console gamerule KeepInventoy false echo "-默认设置为掉落" ;; esac @@ -367,40 +359,25 @@ case $choice in case $mc_pvp in 1) - mc_pvp=True + docker exec --user 1000 mcserver mc-send-to-console gamerule pvp true ;; 2) - mc_pvp=False + docker exec --user 1000 mcserver mc-send-to-console gamerule pvp false ;; *) - mc_pvp=False + docker exec --user 1000 mcserver mc-send-to-console gamerule pvp false echo "-默认关闭pvp模式" ;; esac - # 更新配置文件 - sed -i "s/ServerPassword=\"\"/ServerPassword=\"$server_password\"/" ~/mcSettings.ini - sed -i "s/Difficulty=2/Difficulty=$Difficulty/" ~/mcSettings.ini - sed -i "s/ExpRate=1.000000/ExpRate=$ExpRate/" ~/mcSettings.ini - sed -i "s/DeathPenalty=All/DeathPenalty=$DeathPenalty/" ~/mcSettings.ini - sed -i "s/bEnablePlayerToPlayerDamage=False/bEnablePlayerToPlayerDamage=$mc_pvp/" ~/mcSettings.ini - sed -i "s/bIsPvP=False/bIsPvP=$mc_pvp/" ~/mcSettings.ini - echo "------------------------" - echo "配置文件已更新" - - docker exec -it mcserver bash -c "rm -f /home/steam/Steam/steamapps/common/mcServer/mc/Saved/Config/LinuxServer/mcSettings.ini" - docker cp ~/mcSettings.ini mcserver:/home/steam/Steam/steamapps/common/mcServer/mc/Saved/Config/LinuxServer/ > /dev/null 2>&1 - docker exec -it -u root $CONTAINER_NAME bash -c "chmod -R 777 /home/steam/Steam/steamapps/common/mcServer/mc/Saved/" - rm -f ~/mcSettings.ini - echo -e "\033[0;32m游戏配置已导入\033[0m" - docker restart mcserver > /dev/null 2>&1 - mc_start + # 更新配置 + echo -e "\033[0;32m游戏配置已更改\033[0m" ;; 11) clear - tmux kill-session -t mc1 + docker stop mcserver > /dev/null 2>&1 docker restart mcserver > /dev/null 2>&1 docker exec -it mcserver bash -c "/home/steam/mcserver/mcserver.sh +login anonymous +app_update 2394010 validate +quit" clear @@ -411,9 +388,16 @@ case $choice in 12) clear docker rm -f mcserver - docker rmi -f cm2network/mcserver + docker rmi -f itzg/minecraft-server ;; - + o) + read -p "请输入 Minecraft Java 版档案名称:" mc_op + docker exec --user 1000 mcserver mc-send-to-console op $mc_op + ;; + p) + read -p "请输入 Minecraft Java 版档案名称:" mc_deop + docker exec --user 1000 mcserver mc-send-to-console deop $mc_deop + ;; k) cd ~ curl -sS -O https://kejilion.pro/kejilion.sh && chmod +x kejilion.sh && ./kejilion.sh diff --git a/mc_backup.sh b/mc_backup.sh index 2f0515202..a996cc18d 100644 --- a/mc_backup.sh +++ b/mc_backup.sh @@ -2,6 +2,6 @@ clear mkdir -p /home/game docker cp mcserver:/data /home/game/mc -cd /home/game && tar czvf mc_$(date +"%Y%m%d%H%M%S").tar.gz mc +cd /home/game/mc && tar czvf mc_$(date +"%Y%m%d%H%M%S").tar.gz mc rm -rf /home/game/mc/ -echo -e "\033[0;32m游戏存档已导出存放在: /home/game/\033[0m" \ No newline at end of file +echo -e "\033[0;32m游戏存档已导出存放在: /home/game/mc/\033[0m" diff --git a/mc_log.sh b/mc_log.sh new file mode 100644 index 000000000..0023e118d --- /dev/null +++ b/mc_log.sh @@ -0,0 +1,7 @@ + clear + echo "脚本更新日志" + echo "------------------------" + echo "2025-11-16 v1.0.1" + echo "Minecraft 开服脚本魔改自 幻兽帕鲁开服脚本" + echo "2025-11-17 v1.0.1" + ech "对 Minecraft 的难度等细节进行了适配" From 1217abeeee41474da06b3c3b6f03d98f1a4ea4f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:32:08 +0800 Subject: [PATCH 372/553] Update kejilion.sh --- cn/kejilion.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b1041c15a..54987310e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.4" +sh_v="4.2.5" gl_hui='\e[37m' @@ -14758,6 +14758,7 @@ 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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}m. ${gl_bai}我的世界开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}脚本更新" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14787,6 +14788,10 @@ case $choice in curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh exit ;; + m) send_stats "我的世界开服脚本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "无效的输入!" ;; From e039dadd6b3eb27f0e29a1d9f7c5b882f16dbdb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:32:54 +0800 Subject: [PATCH 373/553] Update kejilion.sh --- kejilion.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index bc9b4413c..24f114eb3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.4" +sh_v="4.2.5" gl_hui='\e[37m' @@ -14758,6 +14758,7 @@ 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}幻兽帕鲁开服脚本" +echo -e "${gl_kjlan}m. ${gl_bai}我的世界开服脚本" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}脚本更新" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14787,6 +14788,10 @@ case $choice in curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh exit ;; + m) send_stats "我的世界开服脚本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "无效的输入!" ;; From 9401aa1d1f2aa63f99d4469d5e89630d53200d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:36:42 +0800 Subject: [PATCH 374/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index c94a568e6..ea621a9f7 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1356,4 +1356,7 @@ LDNMP安装环境时对mysql进行优化。 LDNMP环境中redis去除了不必要的清理机制。 LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 ------------------------ +2025-11-17 v4.2.5 +新增我的世界开服脚本工具,感谢阿卡林刘大佬进行适配,有我的世界开服需求的可以试试。 +------------------------ From 058d85ac2f1209ed853eeec6159cca3585da0c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:49:48 +0800 Subject: [PATCH 375/553] Add game server tools function and update menu Added a new function for game server scripts and updated the main menu to include it. --- cn/kejilion.sh | 74 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 54987310e..b16109b88 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -8029,6 +8029,9 @@ linux_Oracle() { } + + + docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) @@ -14636,6 +14639,64 @@ echo "" +games_server_tools() { + + while true; do + clear + echo -e "游戏开服脚本合集" + 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}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}------------------------${gl_bai}" + read -e -p "请输入你的选择: " sub_choice + + case $sub_choice in + + 1) send_stats "幻兽帕鲁开服脚本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh + exit + ;; + 2) send_stats "我的世界开服脚本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; + + 0) + kejilion + ;; + + *) + echo "无效的输入!" + ;; + esac + break_end + + done + + +} + + + + + + + + + + + + + + + + + + + + kejilion_update() { @@ -14756,9 +14817,7 @@ 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}幻兽帕鲁开服脚本" -echo -e "${gl_kjlan}m. ${gl_bai}我的世界开服脚本" +echo -e "${gl_kjlan}16. ${gl_bai}游戏开服脚本合集" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}脚本更新" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14784,14 +14843,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh - exit - ;; - m) send_stats "我的世界开服脚本" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh - exit - ;; + 16) games_server_tools ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "无效的输入!" ;; From 1b773cb2dc8a4f402d23d69deffc4bf9f2bc8337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:50:26 +0800 Subject: [PATCH 376/553] Add game server tools function and menu option Added a new function for game server tools and updated the main menu to include it. --- kejilion.sh | 74 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 24f114eb3..57765bb65 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -8029,6 +8029,9 @@ linux_Oracle() { } + + + docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) @@ -14636,6 +14639,64 @@ echo "" +games_server_tools() { + + while true; do + clear + echo -e "游戏开服脚本合集" + 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}0. ${gl_bai}返回主菜单" + echo -e "${gl_kjlan}------------------------${gl_bai}" + read -e -p "请输入你的选择: " sub_choice + + case $sub_choice in + + 1) send_stats "幻兽帕鲁开服脚本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh + exit + ;; + 2) send_stats "我的世界开服脚本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; + + 0) + kejilion + ;; + + *) + echo "无效的输入!" + ;; + esac + break_end + + done + + +} + + + + + + + + + + + + + + + + + + + + kejilion_update() { @@ -14756,9 +14817,7 @@ 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}幻兽帕鲁开服脚本" -echo -e "${gl_kjlan}m. ${gl_bai}我的世界开服脚本" +echo -e "${gl_kjlan}16. ${gl_bai}游戏开服脚本合集" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}脚本更新" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14784,14 +14843,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh - exit - ;; - m) send_stats "我的世界开服脚本" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh - exit - ;; + 16) games_server_tools ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "无效的输入!" ;; From 60796e84b88f646b54fdef818cd9db8afef722a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:29:06 +0800 Subject: [PATCH 377/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ea621a9f7..1eea5bbde 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1358,5 +1358,6 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 ------------------------ 2025-11-17 v4.2.5 新增我的世界开服脚本工具,感谢阿卡林刘大佬进行适配,有我的世界开服需求的可以试试。 +主菜单新增游戏开服脚本合集,将幻兽帕鲁和我的世界的开服脚本加入合集。 ------------------------ From 98764cd0cff5ba802647d0fea8d0338dc58a0588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:43:33 +0800 Subject: [PATCH 378/553] Add TCP and UDP connection counts to output --- cn/kejilion.sh | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b16109b88..6ba3a2cca 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -6732,43 +6732,47 @@ linux_info() { local timezone=$(current_timezone) + local tcp_count=$(ss -t | wc -l) + local udp_count=$(ss -u | wc -l) + 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}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}CPU占用: ${gl_bai}$cpu_usage_percent%" + echo -e "${gl_kjlan}系统负载: ${gl_bai}$load" + echo -e "${gl_kjlan}TCP|UDP连接数: ${gl_bai}$tcp_count|$udp_count" + 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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo From c5f457371ef2d41661e7fad6b9d6ebd833c823f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:44:02 +0800 Subject: [PATCH 379/553] Update kejilion.sh --- kejilion.sh | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 57765bb65..4aa57657c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -6732,43 +6732,47 @@ linux_info() { local timezone=$(current_timezone) + local tcp_count=$(ss -t | wc -l) + local udp_count=$(ss -u | wc -l) + 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}Linux版本: ${gl_bai}$kernel_version" + echo -e "${gl_kjlan}主机名: ${gl_bai}$hostname" + echo -e "${gl_kjlan}系统版本: ${gl_bai}$os_info" + echo -e "${gl_kjlan}Linux版本: ${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}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}CPU占用: ${gl_bai}$cpu_usage_percent%" + echo -e "${gl_kjlan}系统负载: ${gl_bai}$load" + echo -e "${gl_kjlan}TCP|UDP连接数: ${gl_bai}$tcp_count|$udp_count" + 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}总接收: ${gl_bai}$rx" - echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" + echo -e "${gl_kjlan}总接收: ${gl_bai}$rx" + echo -e "${gl_kjlan}总发送: ${gl_bai}$tx" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" + echo -e "${gl_kjlan}网络算法: ${gl_bai}$congestion_algorithm $queue_algorithm" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" + echo -e "${gl_kjlan}运营商: ${gl_bai}$isp_info" if [ -n "$ipv4_address" ]; then - echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" + echo -e "${gl_kjlan}IPv4地址: ${gl_bai}$ipv4_address" fi if [ -n "$ipv6_address" ]; then - echo -e "${gl_kjlan}IPv6地址: ${gl_bai}$ipv6_address" + 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}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 -e "${gl_kjlan}运行时长: ${gl_bai}$runtime" echo From ba973d03f6851f4b9f34fdec9a5895ca5ebccaf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 17 Nov 2025 16:45:29 +0800 Subject: [PATCH 380/553] Update kejilion_sh_log with new features Added TCP/UDP current connection count display to system query. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 1eea5bbde..4f34eced9 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1359,5 +1359,6 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 2025-11-17 v4.2.5 新增我的世界开服脚本工具,感谢阿卡林刘大佬进行适配,有我的世界开服需求的可以试试。 主菜单新增游戏开服脚本合集,将幻兽帕鲁和我的世界的开服脚本加入合集。 +系统查询中添加TCP|UDP当前连接数显示。 ------------------------ From 476f31919777706f13a5baf8f8a2f50f8becba4e Mon Sep 17 00:00:00 2001 From: AkarinLiu Date: Mon, 17 Nov 2025 17:26:31 +0800 Subject: [PATCH 381/553] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20IP=20=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E6=99=BA=E8=83=BD=E6=A3=80=E6=B5=8B=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E7=94=B1=20DeepSeek=20=E6=8F=90=E4=BE=9B=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mc.sh | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/mc.sh b/mc.sh index f79a7b3ca..839aad603 100644 --- a/mc.sh +++ b/mc.sh @@ -2,8 +2,21 @@ ln -sf ~/minecraft_server.sh /usr/local/bin/mcs ip_address() { -ipv4_address=$(curl -s ipv4.ip.sb) -ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb) + # 检测 IPv4 地址 + ipv4_address=$(curl -s --connect-timeout 5 ipv4.ip.sb 2>/dev/null || echo "") + # 检测 IPv6 地址 + ipv6_address=$(curl -s --connect-timeout 5 ipv6.ip.sb 2>/dev/null || echo "") + + # 设置显示变量 + if [ -n "$ipv4_address" ] && [ -n "$ipv6_address" ]; then + ip_display="\033[93m IPv4: $ipv4_address:25565 IPv6: $ipv6_address:25565 \033[0m" + elif [ -n "$ipv4_address" ]; then + ip_display="\033[93m IPv4: $ipv4_address:25565 \033[0m" + elif [ -n "$ipv6_address" ]; then + ip_display="\033[93m IPv6: $ipv6_address:25565 \033[0m" + else + ip_display="\033[93m 无法获取IP地址 \033[0m" + fi } @@ -95,7 +108,7 @@ mc_start() { docker start mcserver > /dev/null 2>&1 echo -e "\033[0;32mMinecraft服务启动啦!\033[0m" echo -e "\033[0;32m游戏下载地址: https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj\033[0m" - echo -e "\033[0;32m进入游戏连接:\033[93m $ipv4_address:25565 $ipv6_address:25565 \033[0;32m开始冒险吧!\033[0m" + echo -e "\033[0;32m进入游戏连接:$ip_display\033[0;32m开始冒险吧!\033[0m" } @@ -117,7 +130,7 @@ mc_install_status() { ip_address # 检查 Docker 容器是否正在运行 if docker ps --format "table {{.Names}}" | grep -q "^$CONTAINER_NAME$"; then - tmux_status="\e[32m已开服:\033[93m $ipv4_address:25565 $ipv6_address:25565 \e[0m" # 绿色 + tmux_status="\e[32m已开服:$ip_display\e[0m" # 绿色 else tmux_status="\e[90m未开服\e[0m" # 灰色 fi @@ -134,7 +147,7 @@ echo -e "\033[92m██║╚██╔╝██║██║██║╚██╗ echo -e "\033[92m██║ ╚═╝ ██║██║██║ ╚████║███████╗╚██████╗██║ ██║██║ ██║██║ ██║ \033[0m" echo -e "\033[92m╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ \033[0m" echo -e "\033[92mMinecraft开服一键脚本工具v1.0.1 by AkarinLiu\033[0m" -echo -e "\033[92m-输入\033[92mp\033[92m可快速启动此脚本-\033[0m" +echo -e "\033[92m-输入\033[92mmcs\033[92m可快速启动此脚本-\033[0m" echo -e "$container_status $tmux_status" echo "------------------------" echo "1. 安装Minecraft服务" From aff1bdd4a005f4fe0ff7460043afeefc648b58ba Mon Sep 17 00:00:00 2001 From: AkarinLiu Date: Mon, 17 Nov 2025 17:31:00 +0800 Subject: [PATCH 382/553] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mc.sh b/mc.sh index 839aad603..b622b4b6f 100644 --- a/mc.sh +++ b/mc.sh @@ -1,5 +1,5 @@ #!/bin/bash -ln -sf ~/minecraft_server.sh /usr/local/bin/mcs +ln -sf ~/mc.sh /usr/local/bin/mcs ip_address() { # 检测 IPv4 地址 From 40642e8903c7caca7241e86ce41d3724b3595dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 18 Nov 2025 20:09:07 +0800 Subject: [PATCH 383/553] Fix make command in OpenSSH upgrade script --- upgrade_openssh9.8p1.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/upgrade_openssh9.8p1.sh b/upgrade_openssh9.8p1.sh index 8bd19bd14..78b5d7138 100644 --- a/upgrade_openssh9.8p1.sh +++ b/upgrade_openssh9.8p1.sh @@ -64,13 +64,13 @@ install_openssh() { ./configure - make -j${nproc} + make make install } # 重启SSH服务 restart_ssh() { - case $OS 在 + case $OS in ubuntu|debian) systemctl restart ssh ;; From 5b90987e50bb31c64e684a50a882c6f4ca90d19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:04:31 +0800 Subject: [PATCH 384/553] Update kejilion.sh --- cn/kejilion.sh | 86 ++++++++++++++------------------------------------ 1 file changed, 23 insertions(+), 63 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6ba3a2cca..0ef67e646 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.5" +sh_v="4.2.6" gl_hui='\e[37m' @@ -417,18 +417,31 @@ restart docker } -install_add_docker_guanfang() { + +linuxmirrors_install_docker() { + 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 + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source mirrors.huaweicloud.com/docker-ce \ + --source-registry docker.1ms.run \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips else - curl -fsSL https://get.docker.com | sh + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source download.docker.com \ + --source-registry registry.hub.docker.com \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips fi -install_add_docker_cn +install_add_docker_cn } @@ -436,61 +449,8 @@ install_add_docker_cn install_add_docker() { echo -e "${gl_huang}正在安装docker环境...${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 + if command -v apt &>/dev/null || command -v yum &>/dev/null || command -v dnf &>/dev/null; then + linuxmirrors_install_docker else install docker docker-compose install_add_docker_cn From 8a26e3e0073cbfeab94c50f095c6ea4a505c48ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:05:50 +0800 Subject: [PATCH 385/553] Update kejilion.sh --- kejilion.sh | 86 ++++++++++++++--------------------------------------- 1 file changed, 23 insertions(+), 63 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 4aa57657c..8db81133c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.5" +sh_v="4.2.6" gl_hui='\e[37m' @@ -417,18 +417,31 @@ restart docker } -install_add_docker_guanfang() { + +linuxmirrors_install_docker() { + 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 + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source mirrors.huaweicloud.com/docker-ce \ + --source-registry docker.1ms.run \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips else - curl -fsSL https://get.docker.com | sh + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source download.docker.com \ + --source-registry registry.hub.docker.com \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips fi -install_add_docker_cn +install_add_docker_cn } @@ -436,61 +449,8 @@ install_add_docker_cn install_add_docker() { echo -e "${gl_huang}正在安装docker环境...${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 + if command -v apt &>/dev/null || command -v yum &>/dev/null || command -v dnf &>/dev/null; then + linuxmirrors_install_docker else install docker docker-compose install_add_docker_cn From 67b53265a1e84957de406ab833fa33af6d848718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:09:44 +0800 Subject: [PATCH 386/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 4f34eced9..f846ff5a6 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1361,4 +1361,8 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 主菜单新增游戏开服脚本合集,将幻兽帕鲁和我的世界的开服脚本加入合集。 系统查询中添加TCP|UDP当前连接数显示。 ------------------------ +2025-11-19 v4.2.6 +安装docker环境采用更加成熟的linuxmirrors解决方案。提升安装兼容性和稳定性。 +------------------------ + From 1183005cd1acda0a97caff3ca330697844364ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:17:28 +0800 Subject: [PATCH 387/553] Update kejilion.sh --- cn/kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0ef67e646..f0b2b016e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -14009,7 +14009,7 @@ EOF echo "一条龙系统调优" echo "------------------------------------------------" echo "将对以下内容进行操作与优化" - echo "1. 更新系统到最新" + echo "1. 优化系统更新源,更新系统到最新" echo "2. 清理系统垃圾文件" echo -e "3. 设置虚拟内存${gl_huang}1G${gl_bai}" echo -e "4. 设置SSH端口号为${gl_huang}5522${gl_bai}" @@ -14029,6 +14029,7 @@ EOF clear send_stats "一条龙调优启动" echo "------------------------------------------------" + switch_mirror true true linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系统到最新" From 28f5ffc4d8b0326be26020feb0ea8bf597488167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:18:59 +0800 Subject: [PATCH 388/553] Enhance system update message in kejilion.sh --- kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 8db81133c..97c4709e2 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -14009,7 +14009,7 @@ EOF echo "一条龙系统调优" echo "------------------------------------------------" echo "将对以下内容进行操作与优化" - echo "1. 更新系统到最新" + echo "1. 优化系统更新源,更新系统到最新" echo "2. 清理系统垃圾文件" echo -e "3. 设置虚拟内存${gl_huang}1G${gl_bai}" echo -e "4. 设置SSH端口号为${gl_huang}5522${gl_bai}" @@ -14029,6 +14029,7 @@ EOF clear send_stats "一条龙调优启动" echo "------------------------------------------------" + switch_mirror true true linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系统到最新" From 25c6669660bb8de1edf3d577f0741c66a16b12d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 19 Nov 2025 14:20:18 +0800 Subject: [PATCH 389/553] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=B9=B6=E6=9B=B4=E6=96=B0=E8=87=B3=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化系统工具并更新系统源至最新版本。 --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index f846ff5a6..9d2ebca2d 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1363,6 +1363,7 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 ------------------------ 2025-11-19 v4.2.6 安装docker环境采用更加成熟的linuxmirrors解决方案。提升安装兼容性和稳定性。 +系统工具一条龙优化增加了对系统源的优化,并将系统更新到最新。 ------------------------ From bafdf790e395c455662dc114d56808eab56a7969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 11:56:48 +0800 Subject: [PATCH 390/553] Rename function and update MySQL configuration checks --- cn/kejilion.sh | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f0b2b016e..e9fd323b2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2179,19 +2179,17 @@ web_security() { -check_nginx_mode() { +check_ldnmp_mode() { -CONFIG_FILE="/home/web/nginx.conf" + MYSQL_CONTAINER="mysql" + MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" -# 获取当前的 worker_processes 设置值 -current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') - -# 根据值设置模式信息 -if [ "$current_value" = "8" ]; then - mode_info=" 高性能模式" -else - mode_info=" 标准模式" -fi + # 检查 MySQL 配置文件中是否包含 4096M + if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then + mode_info=" 高性能模式" + else + mode_info=" 标准模式" + fi @@ -2200,7 +2198,7 @@ fi check_nginx_compression() { - CONFIG_FILE="/home/web/nginx.conf" + local CONFIG_FILE="/home/web/nginx.conf" # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then @@ -2229,7 +2227,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_nginx_mode + check_ldnmp_mode check_nginx_compression clear send_stats "优化LDNMP环境" From 5bc4c04860ab9b43287ab926910865d72b7832b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 11:58:42 +0800 Subject: [PATCH 391/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e9fd323b2..3036c80d8 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2181,8 +2181,8 @@ web_security() { check_ldnmp_mode() { - MYSQL_CONTAINER="mysql" - MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" + local MYSQL_CONTAINER="mysql" + local MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" # 检查 MySQL 配置文件中是否包含 4096M if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then From 4eec1e28cb41e91833315d9d3cc90f8912b09cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 11:59:16 +0800 Subject: [PATCH 392/553] Rename check_nginx_mode to check_ldnmp_mode --- kejilion.sh | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 97c4709e2..12f382ca1 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -2179,19 +2179,17 @@ web_security() { -check_nginx_mode() { +check_ldnmp_mode() { -CONFIG_FILE="/home/web/nginx.conf" + local MYSQL_CONTAINER="mysql" + local MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" -# 获取当前的 worker_processes 设置值 -current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') - -# 根据值设置模式信息 -if [ "$current_value" = "8" ]; then - mode_info=" 高性能模式" -else - mode_info=" 标准模式" -fi + # 检查 MySQL 配置文件中是否包含 4096M + if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then + mode_info=" 高性能模式" + else + mode_info=" 标准模式" + fi @@ -2200,7 +2198,7 @@ fi check_nginx_compression() { - CONFIG_FILE="/home/web/nginx.conf" + local CONFIG_FILE="/home/web/nginx.conf" # 检查 zstd 是否开启且未被注释(整行以 zstd on; 开头) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then @@ -2229,7 +2227,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_nginx_mode + check_ldnmp_mode check_nginx_compression clear send_stats "优化LDNMP环境" From 2fff7c1a0c7f0e276b1f2aabd360501a5b5ac786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 12:00:21 +0800 Subject: [PATCH 393/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 9d2ebca2d..8bc0af1a1 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1364,6 +1364,7 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 2025-11-19 v4.2.6 安装docker环境采用更加成熟的linuxmirrors解决方案。提升安装兼容性和稳定性。 系统工具一条龙优化增加了对系统源的优化,并将系统更新到最新。 +优化LDNMP环境中高性能模式无法切换的问题进行修复。 ------------------------ From 7b23303483b8acc3fae54890c47db31859555848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:49:10 +0800 Subject: [PATCH 394/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 3036c80d8..87e939835 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -235,7 +235,7 @@ check_disk_space() { install_dependency() { - switch_mirror true true + switch_mirror false false check_port check_swap prefer_ipv4 From 84ad393a109a09984b71b69a22ec2e8d3bc12597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:49:42 +0800 Subject: [PATCH 395/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 12f382ca1..42c1037dd 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -235,7 +235,7 @@ check_disk_space() { install_dependency() { - switch_mirror true true + switch_mirror false false check_port check_swap prefer_ipv4 From 3f16fc8dc6724df4a3b5935e57a498454a6037c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 20:56:15 +0800 Subject: [PATCH 396/553] Implement patch_wp_url function for WordPress config Add patch_wp_url function to update WP_HOME and WP_SITEURL in wp-config.php files. --- cn/kejilion.sh | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 87e939835..3b8757ec2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1846,6 +1846,43 @@ patch_wp_debug() { } + + +patch_wp_url() { + local HOME_URL="$1" + local SITE_URL="$2" + local TARGET_DIR="/home/web/html" + + find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + # 删除旧定义 + sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" + sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" + + # 生成插入内容 + INSERT=" +define('WP_HOME', '$HOME_URL'); +define('WP_SITEURL', '$SITE_URL'); +" + + # 插入到 “Happy publishing” 之前 + awk -v insert="$INSERT" ' + /Happy publishing/ { + print insert + } + { print } + ' "$FILE" > "$FILE.tmp" && mv -f "$FILE.tmp" "$FILE" + + echo "[+] Updated WP_HOME and WP_SITEURL in $FILE" + done +} + + + + + + + + nginx_br() { local mode=$1 @@ -3241,6 +3278,7 @@ ldnmp_wp() { 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 + patch_wp_url "https://$yuming" "https://$yuming" restart_ldnmp nginx_web_on @@ -3602,15 +3640,12 @@ ldnmp_web_status() { install_ssltls certs_status - # mysql替换 - add_db + 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 @@ -3629,9 +3664,6 @@ ldnmp_web_status() { cp /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 - cd /home/web && docker compose restart ;; From 9b1910b13ee7552c573f8048f7f671b2a33d9896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 20:56:51 +0800 Subject: [PATCH 397/553] Implement patch_wp_url function for WordPress config Add patch_wp_url function to update WP_HOME and WP_SITEURL in wp-config.php files. --- kejilion.sh | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 42c1037dd..17786c06c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1846,6 +1846,43 @@ patch_wp_debug() { } + + +patch_wp_url() { + local HOME_URL="$1" + local SITE_URL="$2" + local TARGET_DIR="/home/web/html" + + find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + # 删除旧定义 + sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" + sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" + + # 生成插入内容 + INSERT=" +define('WP_HOME', '$HOME_URL'); +define('WP_SITEURL', '$SITE_URL'); +" + + # 插入到 “Happy publishing” 之前 + awk -v insert="$INSERT" ' + /Happy publishing/ { + print insert + } + { print } + ' "$FILE" > "$FILE.tmp" && mv -f "$FILE.tmp" "$FILE" + + echo "[+] Updated WP_HOME and WP_SITEURL in $FILE" + done +} + + + + + + + + nginx_br() { local mode=$1 @@ -3241,6 +3278,7 @@ ldnmp_wp() { 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 + patch_wp_url "https://$yuming" "https://$yuming" restart_ldnmp nginx_web_on @@ -3602,15 +3640,12 @@ ldnmp_web_status() { install_ssltls certs_status - # mysql替换 - add_db + 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 @@ -3629,9 +3664,6 @@ ldnmp_web_status() { cp /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 - cd /home/web && docker compose restart ;; From 59dfc14d808af3a4d38e85ef7f25f0f3eadbac9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 20 Nov 2025 21:03:35 +0800 Subject: [PATCH 398/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 8bc0af1a1..9aa252599 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1365,6 +1365,7 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 安装docker环境采用更加成熟的linuxmirrors解决方案。提升安装兼容性和稳定性。 系统工具一条龙优化增加了对系统源的优化,并将系统更新到最新。 优化LDNMP环境中高性能模式无法切换的问题进行修复。 +LDNMP初始化时新增URL绑定,提升wordpress安装向导的稳定性。 ------------------------ From f51045c2bf431b886aea844743d6dc530c2c682c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 21 Nov 2025 17:52:18 +0800 Subject: [PATCH 399/553] Update prompt for reverse proxy IP input --- cn/kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 3b8757ec2..ba1cb2023 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3299,7 +3299,8 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "请输入你的反代IP (回车默认本机IP 127.0.0.1): " reverseproxy + reverseproxy=${reverseproxy:-127.0.0.1} fi if [ -z "$port" ]; then From 916194716f2540549efa115af41f12bc03ff0287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 21 Nov 2025 17:53:21 +0800 Subject: [PATCH 400/553] Update kejilion.sh --- kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 17786c06c..dc3ab3660 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3299,7 +3299,8 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "请输入你的反代IP: " reverseproxy + read -e -p "请输入你的反代IP (回车默认本机IP 127.0.0.1): " reverseproxy + reverseproxy=${reverseproxy:-127.0.0.1} fi if [ -z "$port" ]; then From bcb2933287827e8a89896066b8354780f4e74e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 21 Nov 2025 17:55:46 +0800 Subject: [PATCH 401/553] Enhance reverse proxy IP input functionality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化反向代理IP端口功能,简化用户输入。 --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 9aa252599..402b72ee2 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1366,6 +1366,7 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 系统工具一条龙优化增加了对系统源的优化,并将系统更新到最新。 优化LDNMP环境中高性能模式无法切换的问题进行修复。 LDNMP初始化时新增URL绑定,提升wordpress安装向导的稳定性。 +反向代理IP+端口功能优化,输入反代IP时回车可默认选择本机IP 127.0.0.1省去额外输入的麻烦。 ------------------------ From c41924add1ca5f82da1d7b23de42cc29f3a557b1 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 23 Nov 2025 04:48:53 +0000 Subject: [PATCH 402/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-11-23=2004:48:53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 281 +++++++++++++++++++++++++++------------------- jp/kejilion.sh | 299 +++++++++++++++++++++++++++++-------------------- kr/kejilion.sh | 287 ++++++++++++++++++++++++++++------------------- tw/kejilion.sh | 251 ++++++++++++++++++++++++----------------- 4 files changed, 661 insertions(+), 457 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 9221ad3b3..27b2e33c9 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.4" +sh_v="4.2.6" gl_hui='\e[37m' @@ -235,11 +235,12 @@ check_disk_space() { install_dependency() { - install wget unzip tar jq grep - + switch_mirror false false + check_port check_swap - auto_optimize_dns prefer_ipv4 + auto_optimize_dns + install wget unzip tar jq grep } @@ -416,18 +417,31 @@ restart docker } -install_add_docker_guanfang() { + +linuxmirrors_install_docker() { + 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 + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source mirrors.huaweicloud.com/docker-ce \ + --source-registry docker.1ms.run \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips else - curl -fsSL https://get.docker.com | sh + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source download.docker.com \ + --source-registry registry.hub.docker.com \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips fi -install_add_docker_cn +install_add_docker_cn } @@ -435,61 +449,8 @@ install_add_docker_cn install_add_docker() { echo -e "${gl_huang}Installing docker environment...${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 + if command -v apt &>/dev/null || command -v yum &>/dev/null || command -v dnf &>/dev/null; then + linuxmirrors_install_docker else install docker docker-compose install_add_docker_cn @@ -920,7 +881,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add a shutdown rule + # Add shutdown rule 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 @@ -1466,8 +1427,8 @@ install_certbot() { install_ssltls() { - docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 + docker stop nginx > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" @@ -1638,7 +1599,8 @@ restart_ldnmp() { 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 + cd /home/web && docker compose restart + } @@ -1884,6 +1846,43 @@ patch_wp_debug() { } + + +patch_wp_url() { + local HOME_URL="$1" + local SITE_URL="$2" + local TARGET_DIR="/home/web/html" + + find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + # Delete old definition + sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" + sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" + + # Generate insert content + INSERT=" +define('WP_HOME', '$HOME_URL'); +define('WP_SITEURL', '$SITE_URL'); +" + + # Insert before “Happy publishing” + awk -v insert="$INSERT" ' + /Happy publishing/ { + print insert + } + { print } + ' "$FILE" > "$FILE.tmp" && mv -f "$FILE.tmp" "$FILE" + + echo "[+] Updated WP_HOME and WP_SITEURL in $FILE" + done +} + + + + + + + + nginx_br() { local mode=$1 @@ -2217,19 +2216,17 @@ web_security() { -check_nginx_mode() { +check_ldnmp_mode() { -CONFIG_FILE="/home/web/nginx.conf" + local MYSQL_CONTAINER="mysql" + local MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" -# Get the current worker_processes setting value -current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') - -# Set mode information based on value -if [ "$current_value" = "8" ]; then - mode_info=" 高性能模式" -else - mode_info=" 标准模式" -fi + # Check if MySQL configuration file contains 4096M + if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then + mode_info=" 高性能模式" + else + mode_info=" 标准模式" + fi @@ -2238,7 +2235,7 @@ fi check_nginx_compression() { - CONFIG_FILE="/home/web/nginx.conf" + local CONFIG_FILE="/home/web/nginx.conf" # Check whether zstd is on and uncommented (the whole line starts with zstd on;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then @@ -2267,7 +2264,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_nginx_mode + check_ldnmp_mode check_nginx_compression clear send_stats "Optimize LDNMP environment" @@ -3176,7 +3173,6 @@ root_use clear echo -e "${gl_huang}The LDNMP environment is not installed. Start installing the LDNMP environment...${gl_bai}" check_disk_space 3 /home -check_port install_dependency install_docker install_certbot @@ -3193,7 +3189,6 @@ root_use clear echo -e "${gl_huang}nginx is not installed, start installing nginx environment...${gl_bai}" check_disk_space 1 /home -check_port install_dependency install_docker install_certbot @@ -3283,6 +3278,7 @@ ldnmp_wp() { 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 + patch_wp_url "https://$yuming" "https://$yuming" restart_ldnmp nginx_web_on @@ -3303,7 +3299,8 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "Please enter your anti-generation IP:" reverseproxy + read -e -p "Please enter your anti-generation IP (press Enter to default to the local IP 127.0.0.1):" reverseproxy + reverseproxy=${reverseproxy:-127.0.0.1} fi if [ -z "$port" ]; then @@ -3644,15 +3641,12 @@ ldnmp_web_status() { install_ssltls certs_status - # mysql replacement - add_db + 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 @@ -3671,9 +3665,6 @@ ldnmp_web_status() { cp /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 - cd /home/web && docker compose restart ;; @@ -4704,7 +4695,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, and reconnection will take effect.${gl_bai}" + echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, reconnection will take effect${gl_bai}" } @@ -4747,14 +4738,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion } @@ -5022,7 +5013,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall Windows 11" + send_stats "Reinstall windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5556,7 +5547,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -6732,6 +6723,9 @@ linux_info() { local timezone=$(current_timezone) + local tcp_count=$(ss -t | wc -l) + local udp_count=$(ss -u | wc -l) + echo "" echo -e "System information query" @@ -6747,6 +6741,7 @@ linux_info() { echo -e "${gl_kjlan}-------------" echo -e "${gl_kjlan}CPU usage:${gl_bai}$cpu_usage_percent%" echo -e "${gl_kjlan}System load:${gl_bai}$load" + echo -e "${gl_kjlan}Number of TCP|UDP connections:${gl_bai}$tcp_count|$udp_count" echo -e "${gl_kjlan}Physical memory:${gl_bai}$mem_info" echo -e "${gl_kjlan}Virtual memory:${gl_bai}$swap_info" echo -e "${gl_kjlan}Hard drive usage:${gl_bai}$disk_info" @@ -6781,7 +6776,7 @@ linux_tools() { while true; do clear - # send_stats "Basic tools" + # send_stats "Basic Tools" echo -e "basic tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" @@ -7356,7 +7351,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in with key + # Log in using key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -8029,6 +8024,9 @@ linux_Oracle() { } + + + docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) @@ -8853,7 +8851,6 @@ linux_ldnmp() { echo -e "${gl_huang}Unzipping$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" - check_port install_dependency install_docker install_certbot @@ -8989,7 +8986,6 @@ linux_ldnmp() { cd /home/web/ docker compose down --rmi all - check_port install_dependency install_docker install_certbot @@ -9415,7 +9411,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal services$check_docker $update_status" + echo -e "postal service$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -12776,7 +12772,7 @@ linux_work() { send_stats "Backend workspace" echo -e "Backend workspace" echo -e "The system will provide you with a workspace that can run permanently in the background, which you can use to perform long-term tasks." - echo -e "Even if you disconnect SSH, the tasks in the workspace will not be interrupted, and the tasks will remain in the background." + echo -e "Even if you disconnect SSH, the tasks in the workspace will not be interrupted, and the background tasks will persist." echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and then press d alone to exit the workspace!" echo -e "${gl_kjlan}------------------------" echo "List of currently existing workspaces" @@ -12787,7 +12783,7 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" + echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" @@ -13260,7 +13256,7 @@ EOF 2) rm -f /etc/gai.conf echo "Switched to IPv6 first" - send_stats "Switched to IPv6 priority" + send_stats "Switched to IPv6 first" ;; 3) @@ -13802,7 +13798,7 @@ EOF echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" + echo -e "${gl_hui}Current limiting shutdown function is not currently enabled${gl_bai}" fi echo @@ -14044,7 +14040,7 @@ EOF echo "One-stop system tuning" echo "------------------------------------------------" echo "The following content will be operated and optimized" - echo "1. Update the system to the latest" + echo "1. Optimize the system update source and update the system to the latest" echo "2. Clean up system junk files" echo -e "3. Set up virtual memory${gl_huang}1G${gl_bai}" echo -e "4. Set the SSH port number to${gl_huang}5522${gl_bai}" @@ -14064,6 +14060,7 @@ EOF clear send_stats "One-stop tuning starts" echo "------------------------------------------------" + switch_mirror true true linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. Update the system to the latest" @@ -14497,7 +14494,7 @@ while true; do echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}Install technology lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom instructions" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}custom directive" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14614,7 +14611,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" +echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14638,6 +14635,64 @@ echo "" +games_server_tools() { + + while true; do + clear + echo -e "Collection of game server opening scripts" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}1. ${gl_bai}Eudemons Parlu server opening script" + echo -e "${gl_kjlan}2. ${gl_bai}Minecraft server opening script" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" + echo -e "${gl_kjlan}------------------------${gl_bai}" + read -e -p "Please enter your choice:" sub_choice + + case $sub_choice in + + 1) send_stats "Eudemons Parlu server opening script" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh + exit + ;; + 2) send_stats "Minecraft server opening script" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; + + 0) + kejilion + ;; + + *) + echo "Invalid input!" + ;; + esac + break_end + + done + + +} + + + + + + + + + + + + + + + + + + + + kejilion_update() { @@ -14758,8 +14813,7 @@ echo -e "${gl_kjlan}12. ${gl_bai}Backend workspace" echo -e "${gl_kjlan}13. ${gl_bai}system tools" echo -e "${gl_kjlan}14. ${gl_bai}Server cluster control" echo -e "${gl_kjlan}15. ${gl_bai}Advertising column" -echo -e "${gl_kjlan}------------------------${gl_bai}" -echo -e "${gl_kjlan}p. ${gl_bai}Eudemons Parlu server opening script" +echo -e "${gl_kjlan}16. ${gl_bai}Collection of game server opening scripts" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}Script update" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14785,10 +14839,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu server opening script" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh - exit - ;; + 16) games_server_tools ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "Invalid input!" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 527ff1dc4..890c94315 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.4" +sh_v="4.2.6" gl_hui='\e[37m' @@ -235,11 +235,12 @@ check_disk_space() { install_dependency() { - install wget unzip tar jq grep - + switch_mirror false false + check_port check_swap - auto_optimize_dns prefer_ipv4 + auto_optimize_dns + install wget unzip tar jq grep } @@ -416,18 +417,31 @@ restart docker } -install_add_docker_guanfang() { + +linuxmirrors_install_docker() { + 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 + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source mirrors.huaweicloud.com/docker-ce \ + --source-registry docker.1ms.run \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips else - curl -fsSL https://get.docker.com | sh + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source download.docker.com \ + --source-registry registry.hub.docker.com \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips fi -install_add_docker_cn +install_add_docker_cn } @@ -435,61 +449,8 @@ install_add_docker_cn install_add_docker() { echo -e "${gl_huang}Docker 環境をインストールしています...${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 + if command -v apt &>/dev/null || command -v yum &>/dev/null || command -v dnf &>/dev/null; then + linuxmirrors_install_docker else install docker docker-compose install_add_docker_cn @@ -897,12 +858,12 @@ open_port() { 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" + echo "ポートがオープンされました$port" fi done save_iptables_rules - send_stats "ポートがオープンしました" + send_stats "ポートがオープンされました" } @@ -1466,8 +1427,8 @@ install_certbot() { install_ssltls() { - docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 + docker stop nginx > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" @@ -1638,7 +1599,8 @@ restart_ldnmp() { 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 + cd /home/web && docker compose restart + } @@ -1884,6 +1846,43 @@ patch_wp_debug() { } + + +patch_wp_url() { + local HOME_URL="$1" + local SITE_URL="$2" + local TARGET_DIR="/home/web/html" + + find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + # 古い定義を削除する + sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" + sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" + + # 挿入コンテンツの生成 + INSERT=" +define('WP_HOME', '$HOME_URL'); +define('WP_SITEURL', '$SITE_URL'); +" + + # 「出版おめでとうございます」の前に挿入 + awk -v insert="$INSERT" ' + /Happy publishing/ { + print insert + } + { print } + ' "$FILE" > "$FILE.tmp" && mv -f "$FILE.tmp" "$FILE" + + echo "[+] Updated WP_HOME and WP_SITEURL in $FILE" + done +} + + + + + + + + nginx_br() { local mode=$1 @@ -2153,7 +2152,7 @@ web_security() { ;; 22) - send_stats "高負荷により5秒シールドが可能" + send_stats "高負荷で5秒シールド可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" @@ -2217,19 +2216,17 @@ web_security() { -check_nginx_mode() { +check_ldnmp_mode() { -CONFIG_FILE="/home/web/nginx.conf" + local MYSQL_CONTAINER="mysql" + local MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" -# 現在のworker_processes設定値を取得します -current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') - -# 値に基づいてモード情報を設定します -if [ "$current_value" = "8" ]; then - mode_info=" 高性能模式" -else - mode_info=" 标准模式" -fi + # MySQL 設定ファイルに 4096M が含まれているかどうかを確認する + if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then + mode_info=" 高性能模式" + else + mode_info=" 标准模式" + fi @@ -2238,7 +2235,7 @@ fi check_nginx_compression() { - CONFIG_FILE="/home/web/nginx.conf" + local CONFIG_FILE="/home/web/nginx.conf" # zstd がオンでコメントが解除されているかどうかを確認します (行全体が zstd on で始まります)。 if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then @@ -2267,7 +2264,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_nginx_mode + check_ldnmp_mode check_nginx_compression clear send_stats "LDNMP環境の最適化" @@ -3176,7 +3173,6 @@ root_use clear echo -e "${gl_huang}LDNMP環境がインストールされていません。 LDNMP 環境のインストールを開始します...${gl_bai}" check_disk_space 3 /home -check_port install_dependency install_docker install_certbot @@ -3193,7 +3189,6 @@ root_use clear echo -e "${gl_huang}nginx がインストールされていません。nginx 環境のインストールを開始してください...${gl_bai}" check_disk_space 1 /home -check_port install_dependency install_docker install_certbot @@ -3283,6 +3278,7 @@ ldnmp_wp() { 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 + patch_wp_url "https://$yuming" "https://$yuming" restart_ldnmp nginx_web_on @@ -3303,7 +3299,8 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "アンチジェネレーション IP を入力してください:" reverseproxy + read -e -p "アンチジェネレーション IP を入力してください (Enter キーを押すと、デフォルトのローカル IP 127.0.0.1 になります)。" reverseproxy + reverseproxy=${reverseproxy:-127.0.0.1} fi if [ -z "$port" ]; then @@ -3520,7 +3517,7 @@ ldnmp_Proxy_backend_stream() { *) echo "無効な選択"; return 1 ;; esac - read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306):" reverseproxy_port + read -e -p "1 つ以上のバックエンド IP + ポートをスペースで区切って入力してください (例: 10.13.0.2:3306 10.13.0.3:3306)。" reverseproxy_port nginx_install_status cd /home && mkdir -p web/stream.d @@ -3644,15 +3641,12 @@ ldnmp_web_status() { install_ssltls certs_status - # mysqlの置換 - add_db + 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 @@ -3671,9 +3665,6 @@ ldnmp_web_status() { cp /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 - cd /home/web && docker compose restart ;; @@ -4586,7 +4577,7 @@ while true; do 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 "3. DNS 構成を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4704,7 +4695,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT 秘密キー ログインがオンになり、ROOT パスワード ログインがオフになり、再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}ROOT秘密キーログインがオンになり、ROOTパスワードログインがオフになり、再接続が有効になります${gl_bai}" } @@ -4747,14 +4738,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を使用するには、root ユーザーが実行する必要があります。" && break_end && kejilion } @@ -5383,7 +5374,7 @@ clamav() { while true; do clear echo "Clamav ウイルス スキャン ツール" - echo "ビデオ紹介: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" echo "これは、主にさまざまな種類のマルウェアを検出して削除するために使用されるオープンソースのウイルス対策ソフトウェア ツールです。" echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアが含まれます。" @@ -6363,7 +6354,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6732,6 +6723,9 @@ linux_info() { local timezone=$(current_timezone) + local tcp_count=$(ss -t | wc -l) + local udp_count=$(ss -u | wc -l) + echo "" echo -e "システム情報の問い合わせ" @@ -6747,6 +6741,7 @@ linux_info() { 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}TCP|UDP 接続の数:${gl_bai}$tcp_count|$udp_count" echo -e "${gl_kjlan}物理メモリ:${gl_bai}$mem_info" echo -e "${gl_kjlan}仮想メモリ:${gl_bai}$swap_info" echo -e "${gl_kjlan}ハードドライブの使用状況:${gl_bai}$disk_info" @@ -6781,7 +6776,7 @@ linux_tools() { while true; do clear - # send_stats "基本ツール" + # 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}" @@ -7157,7 +7152,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7356,7 +7351,7 @@ docker_ssh_migration() { echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーでログイン + # キーを使用してログインする scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7430,7 +7425,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -7573,7 +7568,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -8029,6 +8024,9 @@ linux_Oracle() { } + + + docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) @@ -8853,7 +8851,6 @@ linux_ldnmp() { echo -e "${gl_huang}解凍中$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" - check_port install_dependency install_docker install_certbot @@ -8989,7 +8986,6 @@ linux_ldnmp() { cd /home/web/ docker compose down --rmi all - check_port install_dependency install_docker install_certbot @@ -12776,7 +12772,7 @@ linux_work() { send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、バックグラウンド タスクは継続されます。" echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" @@ -12787,7 +12783,7 @@ linux_work() { 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}ワークスペースNo.5" + 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" @@ -13259,8 +13255,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -13802,7 +13798,7 @@ EOF 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません${gl_bai}" fi echo @@ -14044,7 +14040,7 @@ EOF echo "ワンストップのシステムチューニング" echo "------------------------------------------------" echo "以下のコンテンツを運用・最適化していきます" - echo "1. システムを最新のものにアップデートします" + echo "1. システムアップデートソースを最適化し、システムを最新にアップデートします。" echo "2. システムジャンクファイルをクリーンアップする" echo -e "3. 仮想メモリを設定する${gl_huang}1G${gl_bai}" echo -e "4. SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" @@ -14064,6 +14060,7 @@ EOF clear send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" + switch_mirror true true linux_update echo -e "[${gl_lv}OK${gl_bai}】1/12。システムを最新のものにアップデートする" @@ -14492,12 +14489,12 @@ while true; do 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}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}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}" @@ -14530,7 +14527,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14638,6 +14635,64 @@ echo "" +games_server_tools() { + + while true; do + clear + echo -e "ゲームサーバー起動スクリプト集" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}1. ${gl_bai}Eudemons Parlu サーバー開始スクリプト" + echo -e "${gl_kjlan}2. ${gl_bai}Minecraft サーバーを開くスクリプト" + 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) send_stats "Eudemons Parlu サーバー開始スクリプト" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh + exit + ;; + 2) send_stats "Minecraft サーバーを開くスクリプト" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; + + 0) + kejilion + ;; + + *) + echo "無効な入力です!" + ;; + esac + break_end + + done + + +} + + + + + + + + + + + + + + + + + + + + kejilion_update() { @@ -14758,8 +14813,7 @@ 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}Eudemons Parlu サーバー開始スクリプト" +echo -e "${gl_kjlan}16. ${gl_bai}ゲームサーバー起動スクリプト集" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}スクリプトの更新" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14785,10 +14839,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu サーバー開始スクリプト" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh - exit - ;; + 16) games_server_tools ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "無効な入力です!" ;; @@ -14806,7 +14857,7 @@ echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" -echo "システム k アップデートを更新 | kアップデート" +echo "システム k 更新を更新します。 kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 056abd24f..702be9f86 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.4" +sh_v="4.2.6" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -235,11 +235,12 @@ check_disk_space() { install_dependency() { - install wget unzip tar jq grep - + switch_mirror false false + check_port check_swap - auto_optimize_dns prefer_ipv4 + auto_optimize_dns + install wget unzip tar jq grep } @@ -416,18 +417,31 @@ restart docker } -install_add_docker_guanfang() { + +linuxmirrors_install_docker() { + 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 + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source mirrors.huaweicloud.com/docker-ce \ + --source-registry docker.1ms.run \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips else - curl -fsSL https://get.docker.com | sh + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source download.docker.com \ + --source-registry registry.hub.docker.com \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips fi -install_add_docker_cn +install_add_docker_cn } @@ -435,61 +449,8 @@ 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 + if command -v apt &>/dev/null || command -v yum &>/dev/null || command -v dnf &>/dev/null; then + linuxmirrors_install_docker else install docker docker-compose install_add_docker_cn @@ -1129,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP 지우기" + echo "7. 지정된 IP를 삭제합니다." echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1466,8 +1427,8 @@ install_certbot() { install_ssltls() { - docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 + docker stop nginx > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" @@ -1638,7 +1599,8 @@ restart_ldnmp() { 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 + cd /home/web && docker compose restart + } @@ -1884,6 +1846,43 @@ patch_wp_debug() { } + + +patch_wp_url() { + local HOME_URL="$1" + local SITE_URL="$2" + local TARGET_DIR="/home/web/html" + + find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + # 이전 정의 삭제 + sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" + sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" + + # 삽입 콘텐츠 생성 + INSERT=" +define('WP_HOME', '$HOME_URL'); +define('WP_SITEURL', '$SITE_URL'); +" + + # '행복한 출판' 앞에 삽입 + awk -v insert="$INSERT" ' + /Happy publishing/ { + print insert + } + { print } + ' "$FILE" > "$FILE.tmp" && mv -f "$FILE.tmp" "$FILE" + + echo "[+] Updated WP_HOME and WP_SITEURL in $FILE" + done +} + + + + + + + + nginx_br() { local mode=$1 @@ -2217,19 +2216,17 @@ web_security() { -check_nginx_mode() { +check_ldnmp_mode() { -CONFIG_FILE="/home/web/nginx.conf" + local MYSQL_CONTAINER="mysql" + local MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" -# 현재 작업자_프로세스 설정 값을 가져옵니다. -current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') - -# 값에 따라 모드 정보 설정 -if [ "$current_value" = "8" ]; then - mode_info=" 高性能模式" -else - mode_info=" 标准模式" -fi + # MySQL 구성 파일에 4096M이 포함되어 있는지 확인하세요. + if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then + mode_info=" 高性能模式" + else + mode_info=" 标准模式" + fi @@ -2238,7 +2235,7 @@ fi check_nginx_compression() { - CONFIG_FILE="/home/web/nginx.conf" + local CONFIG_FILE="/home/web/nginx.conf" # zstd가 켜져 있고 주석 처리가 해제되어 있는지 확인하세요. (전체 줄은 zstd on으로 시작됩니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then @@ -2267,7 +2264,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_nginx_mode + check_ldnmp_mode check_nginx_compression clear send_stats "LDNMP 환경 최적화" @@ -2803,7 +2800,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -3176,7 +3173,6 @@ root_use clear echo -e "${gl_huang}LDNMP 환경이 설치되지 않았습니다. LDNMP 환경 설치를 시작합니다...${gl_bai}" check_disk_space 3 /home -check_port install_dependency install_docker install_certbot @@ -3193,7 +3189,6 @@ root_use clear echo -e "${gl_huang}nginx가 설치되지 않았습니다. nginx 환경 설치를 시작하세요...${gl_bai}" check_disk_space 1 /home -check_port install_dependency install_docker install_certbot @@ -3283,6 +3278,7 @@ ldnmp_wp() { 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 + patch_wp_url "https://$yuming" "https://$yuming" restart_ldnmp nginx_web_on @@ -3303,7 +3299,8 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "세대방지 IP를 입력해주세요:" reverseproxy + read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + reverseproxy=${reverseproxy:-127.0.0.1} fi if [ -z "$port" ]; then @@ -3644,15 +3641,12 @@ ldnmp_web_status() { install_ssltls certs_status - # MySQL 교체 - add_db + 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 @@ -3671,9 +3665,6 @@ ldnmp_web_status() { cp /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 - cd /home/web && docker compose restart ;; @@ -4704,7 +4695,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT 개인키 로그인이 활성화되어 있고, ROOT 비밀번호 로그인이 비활성화되어 재접속이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT 개인 키 로그인이 활성화되었습니다. ROOT 비밀번호 로그인이 비활성화되었습니다. 다시 연결이 적용됩니다.${gl_bai}" } @@ -6363,7 +6354,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6732,6 +6723,9 @@ linux_info() { local timezone=$(current_timezone) + local tcp_count=$(ss -t | wc -l) + local udp_count=$(ss -u | wc -l) + echo "" echo -e "시스템 정보 쿼리" @@ -6747,6 +6741,7 @@ linux_info() { 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}TCP|UDP 연결 수:${gl_bai}$tcp_count|$udp_count" echo -e "${gl_kjlan}물리적 메모리:${gl_bai}$mem_info" echo -e "${gl_kjlan}가상 메모리:${gl_bai}$swap_info" echo -e "${gl_kjlan}하드 드라이브 사용량:${gl_bai}$disk_info" @@ -7356,7 +7351,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키로 로그인 + # 키를 사용하여 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7543,7 +7538,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -8029,6 +8024,9 @@ linux_Oracle() { } + + + docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) @@ -8853,7 +8851,6 @@ linux_ldnmp() { echo -e "${gl_huang}압축 해제 중$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" - check_port install_dependency install_docker install_certbot @@ -8989,7 +8986,6 @@ linux_ldnmp() { cd /home/web/ docker compose down --rmi all - check_port install_dependency install_docker install_certbot @@ -9131,7 +9127,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" - echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawnix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" @@ -9335,7 +9331,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "나타 모니터링$check_docker $update_status" + echo -e "네자 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9415,7 +9411,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우편 서비스$check_docker $update_status" + echo -e "우정$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -12776,7 +12772,7 @@ linux_work() { send_stats "백엔드 작업공간" echo -e "백엔드 작업공간" echo -e "시스템은 장기간 작업을 수행하는 데 사용할 수 있는 백그라운드에서 영구적으로 실행될 수 있는 작업 공간을 제공합니다." - echo -e "SSH 연결을 끊더라도 작업 공간의 작업은 중단되지 않으며 작업은 백그라운드에 유지됩니다." + echo -e "SSH 연결을 끊더라도 작업 공간의 작업은 중단되지 않으며 백그라운드 작업은 유지됩니다." echo -e "${gl_huang}힌트:${gl_bai}워크스페이스 진입 후 Ctrl+b를 누른 후 d만 눌러 워크스페이스를 종료하세요!" echo -e "${gl_kjlan}------------------------" echo "현재 존재하는 작업공간 목록" @@ -12787,7 +12783,7 @@ linux_work() { 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}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" @@ -13006,7 +13002,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -13259,8 +13255,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -13561,7 +13557,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 + # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13802,7 +13798,7 @@ EOF 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}" + echo -e "${gl_hui}현재 제한 종료 기능이 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -14044,7 +14040,7 @@ EOF echo "원스톱 시스템 튜닝" echo "------------------------------------------------" echo "다음 콘텐츠가 운영 및 최적화됩니다." - echo "1. 시스템을 최신으로 업데이트하세요" + echo "1. 시스템 업데이트 소스를 최적화하고 시스템을 최신 버전으로 업데이트하세요." echo "2. 시스템 정크 파일 정리" echo -e "3. 가상 메모리 설정${gl_huang}1G${gl_bai}" echo -e "4. SSH 포트 번호를 다음으로 설정합니다.${gl_huang}5522${gl_bai}" @@ -14064,6 +14060,7 @@ EOF clear send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" + switch_mirror true true linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 시스템을 최신으로 업데이트하세요" @@ -14497,7 +14494,7 @@ while true; do 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}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}" @@ -14638,6 +14635,64 @@ echo "" +games_server_tools() { + + while true; do + clear + echo -e "게임 서버 오프닝 스크립트 모음" + echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}1. ${gl_bai}Eudemons Parlu 서버 오픈 스크립트" + echo -e "${gl_kjlan}2. ${gl_bai}Minecraft 서버 열기 스크립트" + 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) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh + exit + ;; + 2) send_stats "Minecraft 서버 열기 스크립트" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; + + 0) + kejilion + ;; + + *) + echo "입력이 잘못되었습니다!" + ;; + esac + break_end + + done + + +} + + + + + + + + + + + + + + + + + + + + kejilion_update() { @@ -14758,8 +14813,7 @@ 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}Eudemons Parlu 서버 오픈 스크립트" +echo -e "${gl_kjlan}16. ${gl_bai}게임 서버 오프닝 스크립트 모음" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}스크립트 업데이트" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14785,10 +14839,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh - exit - ;; + 16) games_server_tools ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "입력이 잘못되었습니다!" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 5687c0c6e..f3e3243c5 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.4" +sh_v="4.2.6" gl_hui='\e[37m' @@ -235,11 +235,12 @@ check_disk_space() { install_dependency() { - install wget unzip tar jq grep - + switch_mirror false false + check_port check_swap - auto_optimize_dns prefer_ipv4 + auto_optimize_dns + install wget unzip tar jq grep } @@ -416,18 +417,31 @@ restart docker } -install_add_docker_guanfang() { + +linuxmirrors_install_docker() { + 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 + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source mirrors.huaweicloud.com/docker-ce \ + --source-registry docker.1ms.run \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips else - curl -fsSL https://get.docker.com | sh + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ + --source download.docker.com \ + --source-registry registry.hub.docker.com \ + --protocol https \ + --use-intranet-source false \ + --install-latest true \ + --close-firewall false \ + --ignore-backup-tips fi -install_add_docker_cn +install_add_docker_cn } @@ -435,61 +449,8 @@ install_add_docker_cn install_add_docker() { echo -e "${gl_huang}正在安裝docker環境...${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 + if command -v apt &>/dev/null || command -v yum &>/dev/null || command -v dnf &>/dev/null; then + linuxmirrors_install_docker else install docker docker-compose install_add_docker_cn @@ -1466,8 +1427,8 @@ install_certbot() { install_ssltls() { - docker stop nginx > /dev/null 2>&1 check_port > /dev/null 2>&1 + docker stop nginx > /dev/null 2>&1 cd ~ local file_path="/etc/letsencrypt/live/$yuming/fullchain.pem" @@ -1638,7 +1599,8 @@ restart_ldnmp() { 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 + cd /home/web && docker compose restart + } @@ -1884,6 +1846,43 @@ patch_wp_debug() { } + + +patch_wp_url() { + local HOME_URL="$1" + local SITE_URL="$2" + local TARGET_DIR="/home/web/html" + + find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + # 刪除舊定義 + sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" + sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" + + # 生成插入內容 + INSERT=" +define('WP_HOME', '$HOME_URL'); +define('WP_SITEURL', '$SITE_URL'); +" + + # 插入到 “Happy publishing” 之前 + awk -v insert="$INSERT" ' + /Happy publishing/ { + print insert + } + { print } + ' "$FILE" > "$FILE.tmp" && mv -f "$FILE.tmp" "$FILE" + + echo "[+] Updated WP_HOME and WP_SITEURL in $FILE" + done +} + + + + + + + + nginx_br() { local mode=$1 @@ -2217,19 +2216,17 @@ web_security() { -check_nginx_mode() { +check_ldnmp_mode() { -CONFIG_FILE="/home/web/nginx.conf" + local MYSQL_CONTAINER="mysql" + local MYSQL_CONF="/etc/mysql/conf.d/custom_mysql_config.cnf" -# 獲取當前的 worker_processes 設置值 -current_value=$(grep -E '^\s*worker_processes\s+[0-9]+;' "$CONFIG_FILE" | awk '{print $2}' | tr -d ';') - -# 根據值設置模式信息 -if [ "$current_value" = "8" ]; then - mode_info=" 高性能模式" -else - mode_info=" 标准模式" -fi + # 檢查 MySQL 配置文件中是否包含 4096M + if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then + mode_info=" 高性能模式" + else + mode_info=" 标准模式" + fi @@ -2238,7 +2235,7 @@ fi check_nginx_compression() { - CONFIG_FILE="/home/web/nginx.conf" + local CONFIG_FILE="/home/web/nginx.conf" # 檢查 zstd 是否開啟且未被註釋(整行以 zstd on; 開頭) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then @@ -2267,7 +2264,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_nginx_mode + check_ldnmp_mode check_nginx_compression clear send_stats "優化LDNMP環境" @@ -3176,7 +3173,6 @@ root_use clear echo -e "${gl_huang}LDNMP環境未安裝,開始安裝LDNMP環境...${gl_bai}" check_disk_space 3 /home -check_port install_dependency install_docker install_certbot @@ -3193,7 +3189,6 @@ root_use clear echo -e "${gl_huang}nginx未安裝,開始安裝nginx環境...${gl_bai}" check_disk_space 1 /home -check_port install_dependency install_docker install_certbot @@ -3283,6 +3278,7 @@ ldnmp_wp() { 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 + patch_wp_url "https://$yuming" "https://$yuming" restart_ldnmp nginx_web_on @@ -3303,7 +3299,8 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "請輸入你的反代IP:" reverseproxy + read -e -p "請輸入你的反代IP (回車默認本機IP 127.0.0.1):" reverseproxy + reverseproxy=${reverseproxy:-127.0.0.1} fi if [ -z "$port" ]; then @@ -3644,15 +3641,12 @@ ldnmp_web_status() { install_ssltls certs_status - # mysql替換 - add_db + 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 @@ -3671,9 +3665,6 @@ ldnmp_web_status() { cp /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 - cd /home/web && docker compose restart ;; @@ -6732,6 +6723,9 @@ linux_info() { local timezone=$(current_timezone) + local tcp_count=$(ss -t | wc -l) + local udp_count=$(ss -u | wc -l) + echo "" echo -e "系統信息查詢" @@ -6747,6 +6741,7 @@ linux_info() { 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}TCP|UDP連接數:${gl_bai}$tcp_count|$udp_count" echo -e "${gl_kjlan}物理內存:${gl_bai}$mem_info" echo -e "${gl_kjlan}虛擬內存:${gl_bai}$swap_info" echo -e "${gl_kjlan}硬盤佔用:${gl_bai}$disk_info" @@ -8029,6 +8024,9 @@ linux_Oracle() { } + + + docker_tato() { local container_count=$(docker ps -a -q 2>/dev/null | wc -l) @@ -8853,7 +8851,6 @@ linux_ldnmp() { echo -e "${gl_huang}正在解壓$filename ...${gl_bai}" cd /home/ && tar -xzf "$filename" - check_port install_dependency install_docker install_certbot @@ -8989,7 +8986,6 @@ linux_ldnmp() { cd /home/web/ docker compose down --rmi all - check_port install_dependency install_docker install_certbot @@ -14044,7 +14040,7 @@ EOF echo "一條龍系統調優" echo "------------------------------------------------" echo "將對以下內容進行操作與優化" - echo "1. 更新系統到最新" + echo "1. 優化系統更新源,更新系統到最新" echo "2. 清理系統垃圾文件" echo -e "3. 設置虛擬內存${gl_huang}1G${gl_bai}" echo -e "4. 設置SSH端口號為${gl_huang}5522${gl_bai}" @@ -14064,6 +14060,7 @@ EOF clear send_stats "一條龍調優啟動" echo "------------------------------------------------" + switch_mirror true true linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系統到最新" @@ -14638,6 +14635,64 @@ echo "" +games_server_tools() { + + while true; do + clear + echo -e "遊戲開服腳本合集" + 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}0. ${gl_bai}返回主菜單" + echo -e "${gl_kjlan}------------------------${gl_bai}" + read -e -p "請輸入你的選擇:" sub_choice + + case $sub_choice in + + 1) send_stats "幻獸帕魯開服腳本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh + exit + ;; + 2) send_stats "我的世界開服腳本" ; cd ~ + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/mc.sh ; chmod +x mc.sh ; ./mc.sh + exit + ;; + + 0) + kejilion + ;; + + *) + echo "無效的輸入!" + ;; + esac + break_end + + done + + +} + + + + + + + + + + + + + + + + + + + + kejilion_update() { @@ -14758,8 +14813,7 @@ 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}幻獸帕魯開服腳本" +echo -e "${gl_kjlan}16. ${gl_bai}遊戲開服腳本合集" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}00. ${gl_bai}腳本更新" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14785,10 +14839,7 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻獸帕魯開服腳本" ; cd ~ - curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/sh/main/palworld.sh ; chmod +x palworld.sh ; ./palworld.sh - exit - ;; + 16) games_server_tools ;; 00) kejilion_update ;; 0) clear ; exit ;; *) echo "無效的輸入!" ;; From 1e5e9dcf4349422a5eb996d2b695a3d0093a980a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 23 Nov 2025 13:07:39 +0800 Subject: [PATCH 403/553] Add timezone environment variable to Docker run command --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index ba1cb2023..75479bfc9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -11583,6 +11583,7 @@ while true; do -v /home/docker/komari:/app/data \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=1212156 \ + -e TZ=Asia/Shanghai \ --restart=always \ ghcr.io/komari-monitor/komari:latest From 52f522d6bce430a509887377900827c288f58a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 23 Nov 2025 13:08:24 +0800 Subject: [PATCH 404/553] Add timezone environment variable to Docker command --- kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion.sh b/kejilion.sh index dc3ab3660..a36dfe7db 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -11583,6 +11583,7 @@ while true; do -v /home/docker/komari:/app/data \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=1212156 \ + -e TZ=Asia/Shanghai \ --restart=always \ ghcr.io/komari-monitor/komari:latest From ff39d1e84ee155589a9c66fcc9b2863c772283b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 23 Nov 2025 13:09:53 +0800 Subject: [PATCH 405/553] Fix time display issue in Komari monitoring Added timezone definition for Komari monitoring in the app market and fixed the time display issue. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 402b72ee2..5e51f6a81 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1367,6 +1367,7 @@ LDNMP环境NGINX环境优化安装流程,提升环境安装稳定性。 优化LDNMP环境中高性能模式无法切换的问题进行修复。 LDNMP初始化时新增URL绑定,提升wordpress安装向导的稳定性。 反向代理IP+端口功能优化,输入反代IP时回车可默认选择本机IP 127.0.0.1省去额外输入的麻烦。 +应用市场komari监控定义时区为上海,修复时间显示问题。 ------------------------ From 7c2e2798ec5864e09c3380d8b79eab555d3f8612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 25 Nov 2025 14:16:42 +0800 Subject: [PATCH 406/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 75479bfc9..885357deb 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13614,7 +13614,7 @@ EOF ;; 4) send_stats "智能切换更新源" - switch_mirror true true + switch_mirror false false ;; *) @@ -14061,7 +14061,7 @@ EOF clear send_stats "一条龙调优启动" echo "------------------------------------------------" - switch_mirror true true + switch_mirror false false linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系统到最新" From f3bd3eabfdd588dfc3a1f758d7f35ecd6098da27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 25 Nov 2025 14:17:19 +0800 Subject: [PATCH 407/553] Change switch_mirror parameters to false --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index a36dfe7db..c52319d5f 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13614,7 +13614,7 @@ EOF ;; 4) send_stats "智能切换更新源" - switch_mirror true true + switch_mirror false false ;; *) @@ -14061,7 +14061,7 @@ EOF clear send_stats "一条龙调优启动" echo "------------------------------------------------" - switch_mirror true true + switch_mirror false false linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系统到最新" From 9efe1237c1cd7c056939955f41481949bfda5aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 27 Nov 2025 09:45:30 +0800 Subject: [PATCH 408/553] Refactor BBR configuration in kejilion.sh --- cn/kejilion.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 885357deb..f7ac1a32d 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -4525,9 +4525,8 @@ linux_clean() { bbr_on() { -cat > /etc/sysctl.conf << EOF -net.ipv4.tcp_congestion_control=bbr -EOF +sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p } @@ -7057,7 +7056,7 @@ linux_bbr() { send_stats "alpine开启bbr3" ;; 2) - sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf sysctl -p server_reboot ;; From 0414e986967b535777e816cbf8880c9ec74b5efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 27 Nov 2025 09:45:56 +0800 Subject: [PATCH 409/553] Refactor BBR configuration in kejilion.sh --- kejilion.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index c52319d5f..e4e42085c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -4525,9 +4525,8 @@ linux_clean() { bbr_on() { -cat > /etc/sysctl.conf << EOF -net.ipv4.tcp_congestion_control=bbr -EOF +sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p } @@ -7057,7 +7056,7 @@ linux_bbr() { send_stats "alpine开启bbr3" ;; 2) - sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf sysctl -p server_reboot ;; From ad2146e58c1f59c9c309b0bbcf7f96b262d81ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 28 Nov 2025 16:24:43 +0800 Subject: [PATCH 410/553] Change wp-config.php to wp-config-sample.php --- cn/kejilion.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index f7ac1a32d..6d99bb0c9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1853,7 +1853,7 @@ patch_wp_url() { local SITE_URL="$2" local TARGET_DIR="/home/web/html" - find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + find "$TARGET_DIR" -type f -name "wp-config-sample.php" | while read -r FILE; do # 删除旧定义 sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" @@ -3277,8 +3277,9 @@ ldnmp_wp() { 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 patch_wp_url "https://$yuming" "https://$yuming" + cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php + restart_ldnmp nginx_web_on From ffb2b81dce27ea573ed9c8a057f3648b20205717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 28 Nov 2025 16:25:14 +0800 Subject: [PATCH 411/553] Change wp-config.php to wp-config-sample.php --- kejilion.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index e4e42085c..d46c2cd6e 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1853,7 +1853,7 @@ patch_wp_url() { local SITE_URL="$2" local TARGET_DIR="/home/web/html" - find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + find "$TARGET_DIR" -type f -name "wp-config-sample.php" | while read -r FILE; do # 删除旧定义 sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" @@ -3277,8 +3277,9 @@ ldnmp_wp() { 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 patch_wp_url "https://$yuming" "https://$yuming" + cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php + restart_ldnmp nginx_web_on From 19d444f76630a322bbc8d9174a39ff76cb134147 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 30 Nov 2025 04:09:05 +0000 Subject: [PATCH 412/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-11-30=2004:09:05?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 47 +++++++++++++++++---------------- jp/kejilion.sh | 71 +++++++++++++++++++++++++------------------------- kr/kejilion.sh | 51 ++++++++++++++++++------------------ tw/kejilion.sh | 17 ++++++------ 4 files changed, 95 insertions(+), 91 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 27b2e33c9..592e40c24 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1853,7 +1853,7 @@ patch_wp_url() { local SITE_URL="$2" local TARGET_DIR="/home/web/html" - find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + find "$TARGET_DIR" -type f -name "wp-config-sample.php" | while read -r FILE; do # Delete old definition sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" @@ -2581,7 +2581,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 @@ -2600,7 +2600,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 @@ -3277,8 +3277,9 @@ ldnmp_wp() { 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 patch_wp_url "https://$yuming" "https://$yuming" + cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php + restart_ldnmp nginx_web_on @@ -4525,9 +4526,8 @@ linux_clean() { bbr_on() { -cat > /etc/sysctl.conf << EOF -net.ipv4.tcp_congestion_control=bbr -EOF +sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p } @@ -4695,7 +4695,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, reconnection will take effect${gl_bai}" + echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, and reconnection will take effect.${gl_bai}" } @@ -4745,7 +4745,7 @@ echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion } @@ -5013,7 +5013,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall windows 11" + send_stats "Reinstall Windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5547,7 +5547,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -6776,7 +6776,7 @@ linux_tools() { while true; do clear - # send_stats "Basic Tools" + # send_stats "Basic tools" echo -e "basic tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" @@ -7057,7 +7057,7 @@ linux_bbr() { send_stats "alpine opens bbr3" ;; 2) - sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf sysctl -p server_reboot ;; @@ -7190,7 +7190,7 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # mirror + # Mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -9067,7 +9067,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -11583,6 +11583,7 @@ while true; do -v /home/docker/komari:/app/data \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=1212156 \ + -e TZ=Asia/Shanghai \ --restart=always \ ghcr.io/komari-monitor/komari:latest @@ -12772,7 +12773,7 @@ linux_work() { send_stats "Backend workspace" echo -e "Backend workspace" echo -e "The system will provide you with a workspace that can run permanently in the background, which you can use to perform long-term tasks." - echo -e "Even if you disconnect SSH, the tasks in the workspace will not be interrupted, and the background tasks will persist." + echo -e "Even if you disconnect SSH, the tasks in the workspace will not be interrupted, and the tasks will remain in the background." echo -e "${gl_huang}hint:${gl_bai}After entering the workspace, use Ctrl+b and then press d alone to exit the workspace!" echo -e "${gl_kjlan}------------------------" echo "List of currently existing workspaces" @@ -12783,7 +12784,7 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" + echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" @@ -13066,7 +13067,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by python!" + echo "This function can seamlessly install any version officially supported by Python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13613,7 +13614,7 @@ EOF ;; 4) send_stats "Intelligent switching of update sources" - switch_mirror true true + switch_mirror false false ;; *) @@ -13798,7 +13799,7 @@ EOF echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}Current limiting shutdown function is not currently enabled${gl_bai}" + echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" fi echo @@ -14060,7 +14061,7 @@ EOF clear send_stats "One-stop tuning starts" echo "------------------------------------------------" - switch_mirror true true + switch_mirror false false linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. Update the system to the latest" @@ -14494,7 +14495,7 @@ while true; do echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}Install technology lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}custom directive" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom instructions" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14611,7 +14612,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 890c94315..1f230406c 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1853,7 +1853,7 @@ patch_wp_url() { local SITE_URL="$2" local TARGET_DIR="/home/web/html" - find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + find "$TARGET_DIR" -type f -name "wp-config-sample.php" | while read -r FILE; do # 古い定義を削除する sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" @@ -2037,7 +2037,7 @@ web_security() { echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. インターセプトパラメータを設定します。 12. ブロックされているすべての IP をクリアします。" echo "------------------------" echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" @@ -2152,7 +2152,7 @@ web_security() { ;; 22) - send_stats "高負荷で5秒シールド可能" + send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" @@ -3277,8 +3277,9 @@ ldnmp_wp() { 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 patch_wp_url "https://$yuming" "https://$yuming" + cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php + restart_ldnmp nginx_web_on @@ -3299,7 +3300,7 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "アンチジェネレーション IP を入力してください (Enter キーを押すと、デフォルトのローカル IP 127.0.0.1 になります)。" reverseproxy + read -e -p "アンチジェネレーション IP を入力してください (Enter キーを押すとデフォルトでローカル IP 127.0.0.1 になります):" reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3709,7 +3710,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -4525,9 +4526,8 @@ linux_clean() { bbr_on() { -cat > /etc/sysctl.conf << EOF -net.ipv4.tcp_congestion_control=bbr -EOF +sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p } @@ -4577,7 +4577,7 @@ while true; do 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 "3. DNS 設定を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4695,7 +4695,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT秘密キーログインがオンになり、ROOTパスワードログインがオフになり、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}ROOT 秘密キー ログインがオンになり、ROOT パスワード ログインがオフになり、再接続が有効になります。${gl_bai}" } @@ -4745,7 +4745,7 @@ echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を使用するには、root ユーザーが実行する必要があります。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion } @@ -5374,7 +5374,7 @@ clamav() { while true; do clear echo "Clamav ウイルス スキャン ツール" - echo "视频介绍: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" + echo "ビデオ紹介: https://www.bilibili.com/video/BV1TqvZe4EQm?t=0.1" echo "------------------------" echo "これは、主にさまざまな種類のマルウェアを検出して削除するために使用されるオープンソースのウイルス対策ソフトウェア ツールです。" echo "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアが含まれます。" @@ -6242,7 +6242,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6402,7 +6402,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port + read -e -p "SSH ポートを入力してください (デフォルトは 22):" port port=${port:-22} echo "認証方法を選択してください:" @@ -6776,7 +6776,7 @@ linux_tools() { while true; do clear - # send_stats 「基本ツール」 + # 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}" @@ -7057,7 +7057,7 @@ linux_bbr() { send_stats "アルパインがBBR3をオープン" ;; 2) - sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf sysctl -p server_reboot ;; @@ -7152,7 +7152,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7425,7 +7425,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -7568,7 +7568,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -9067,7 +9067,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9340,7 +9340,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -11583,6 +11583,7 @@ while true; do -v /home/docker/komari:/app/data \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=1212156 \ + -e TZ=Asia/Shanghai \ --restart=always \ ghcr.io/komari-monitor/komari:latest @@ -12772,7 +12773,7 @@ linux_work() { send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、バックグラウンド タスクは継続されます。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" @@ -12783,7 +12784,7 @@ linux_work() { 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}5. ${gl_bai}ワークスペースNo.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" @@ -13484,7 +13485,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13613,7 +13614,7 @@ EOF ;; 4) send_stats "アップデートソースのインテリジェントな切り替え" - switch_mirror true true + switch_mirror false false ;; *) @@ -13798,7 +13799,7 @@ EOF 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません。${gl_bai}" fi echo @@ -14040,7 +14041,7 @@ EOF echo "ワンストップのシステムチューニング" echo "------------------------------------------------" echo "以下のコンテンツを運用・最適化していきます" - echo "1. システムアップデートソースを最適化し、システムを最新にアップデートします。" + echo "1. システムアップデートソースを最適化し、システムを最新の状態にアップデートします。" echo "2. システムジャンクファイルをクリーンアップする" echo -e "3. 仮想メモリを設定する${gl_huang}1G${gl_bai}" echo -e "4. SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" @@ -14060,7 +14061,7 @@ EOF clear send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" - switch_mirror true true + switch_mirror false false linux_update echo -e "[${gl_lv}OK${gl_bai}】1/12。システムを最新のものにアップデートする" @@ -14140,7 +14141,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -14333,7 +14334,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14353,7 +14354,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14494,7 +14495,7 @@ while true; do 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}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}" @@ -14527,7 +14528,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14857,7 +14858,7 @@ echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" -echo "システム k 更新を更新します。 kアップデート" +echo "システム k アップデートを更新 | kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 702be9f86..484b56417 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 삭제합니다." + echo "7. 지정된 IP 지우기" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1853,7 +1853,7 @@ patch_wp_url() { local SITE_URL="$2" local TARGET_DIR="/home/web/html" - find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + find "$TARGET_DIR" -type f -name "wp-config-sample.php" | while read -r FILE; do # 이전 정의 삭제 sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" @@ -2581,7 +2581,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 @@ -2600,7 +2600,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 @@ -2800,7 +2800,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2913,7 +2913,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3277,8 +3277,9 @@ ldnmp_wp() { 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 patch_wp_url "https://$yuming" "https://$yuming" + cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php + restart_ldnmp nginx_web_on @@ -3299,7 +3300,7 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -4525,9 +4526,8 @@ linux_clean() { bbr_on() { -cat > /etc/sysctl.conf << EOF -net.ipv4.tcp_congestion_control=bbr -EOF +sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p } @@ -4695,7 +4695,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT 개인 키 로그인이 활성화되었습니다. ROOT 비밀번호 로그인이 비활성화되었습니다. 다시 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT 개인키 로그인이 활성화되어 있고, ROOT 비밀번호 로그인이 비활성화되어 재접속이 적용됩니다.${gl_bai}" } @@ -7057,7 +7057,7 @@ linux_bbr() { send_stats "알파인이 열립니다 bbr3" ;; 2) - sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf sysctl -p server_reboot ;; @@ -7538,7 +7538,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -9067,7 +9067,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9127,7 +9127,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" - echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawnix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" @@ -9331,7 +9331,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "네자 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9443,7 +9443,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -11583,6 +11583,7 @@ while true; do -v /home/docker/komari:/app/data \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=1212156 \ + -e TZ=Asia/Shanghai \ --restart=always \ ghcr.io/komari-monitor/komari:latest @@ -12772,7 +12773,7 @@ linux_work() { send_stats "백엔드 작업공간" echo -e "백엔드 작업공간" echo -e "시스템은 장기간 작업을 수행하는 데 사용할 수 있는 백그라운드에서 영구적으로 실행될 수 있는 작업 공간을 제공합니다." - echo -e "SSH 연결을 끊더라도 작업 공간의 작업은 중단되지 않으며 백그라운드 작업은 유지됩니다." + echo -e "SSH 연결을 끊더라도 작업 공간의 작업은 중단되지 않으며 작업은 백그라운드에 유지됩니다." echo -e "${gl_huang}힌트:${gl_bai}워크스페이스 진입 후 Ctrl+b를 누른 후 d만 눌러 워크스페이스를 종료하세요!" echo -e "${gl_kjlan}------------------------" echo "현재 존재하는 작업공간 목록" @@ -12783,7 +12784,7 @@ linux_work() { 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}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" @@ -12885,7 +12886,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13613,7 +13614,7 @@ EOF ;; 4) send_stats "업데이트 소스의 지능적인 전환" - switch_mirror true true + switch_mirror false false ;; *) @@ -13798,7 +13799,7 @@ EOF 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}" + echo -e "${gl_hui}현재 제한 종료 기능이 현재 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -14060,7 +14061,7 @@ EOF clear send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" - switch_mirror true true + switch_mirror false false linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 시스템을 최신으로 업데이트하세요" @@ -14494,7 +14495,7 @@ while true; do 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}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}" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index f3e3243c5..42bd4e45d 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1853,7 +1853,7 @@ patch_wp_url() { local SITE_URL="$2" local TARGET_DIR="/home/web/html" - find "$TARGET_DIR" -type f -name "wp-config.php" | while read -r FILE; do + find "$TARGET_DIR" -type f -name "wp-config-sample.php" | while read -r FILE; do # 刪除舊定義 sed -i "/define(['\"]WP_HOME['\"].*/d" "$FILE" sed -i "/define(['\"]WP_SITEURL['\"].*/d" "$FILE" @@ -3277,8 +3277,9 @@ ldnmp_wp() { 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 patch_wp_url "https://$yuming" "https://$yuming" + cp /home/web/html/$yuming/wordpress/wp-config-sample.php /home/web/html/$yuming/wordpress/wp-config.php + restart_ldnmp nginx_web_on @@ -4525,9 +4526,8 @@ linux_clean() { bbr_on() { -cat > /etc/sysctl.conf << EOF -net.ipv4.tcp_congestion_control=bbr -EOF +sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf +echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p } @@ -7057,7 +7057,7 @@ linux_bbr() { send_stats "alpine開啟bbr3" ;; 2) - sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf + sed -i '/net.ipv4.tcp_congestion_control=/d' /etc/sysctl.conf sysctl -p server_reboot ;; @@ -11583,6 +11583,7 @@ while true; do -v /home/docker/komari:/app/data \ -e ADMIN_USERNAME=admin \ -e ADMIN_PASSWORD=1212156 \ + -e TZ=Asia/Shanghai \ --restart=always \ ghcr.io/komari-monitor/komari:latest @@ -13613,7 +13614,7 @@ EOF ;; 4) send_stats "智能切換更新源" - switch_mirror true true + switch_mirror false false ;; *) @@ -14060,7 +14061,7 @@ EOF clear send_stats "一條龍調優啟動" echo "------------------------------------------------" - switch_mirror true true + switch_mirror false false linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/12. 更新系統到最新" From 0be21cfde4aa93504fae9865fde78aa0ba7bcf76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 1 Dec 2025 09:39:36 +0800 Subject: [PATCH 413/553] Add sleep before clearing screen in kejilion.sh Added a sleep command before clearing the screen after installation. --- cn/kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6d99bb0c9..fe1309a92 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1401,8 +1401,7 @@ install_ldnmp() { restart_ldnmp - - + sleep 2 clear echo "LDNMP环境安装完毕" From a44d1b255e8486f266f6261311969ee9eb42c551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 1 Dec 2025 09:40:33 +0800 Subject: [PATCH 414/553] Update kejilion.sh --- kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index d46c2cd6e..657172347 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1401,8 +1401,7 @@ install_ldnmp() { restart_ldnmp - - + sleep 2 clear echo "LDNMP环境安装完毕" From 093f1643103afcb7ab21b5d87e12dcfffbc5fbd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 2 Dec 2025 21:51:05 +0800 Subject: [PATCH 415/553] Update auto_cert_renewal.sh --- auto_cert_renewal.sh | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/auto_cert_renewal.sh b/auto_cert_renewal.sh index 4d574d6dc..97cd09087 100644 --- a/auto_cert_renewal.sh +++ b/auto_cert_renewal.sh @@ -31,15 +31,19 @@ for cert_file in $certs_directory*_cert.pem; do docker stop nginx > /dev/null 2>&1 - 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi + + # 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 docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d $yuming --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa From 96e2eaea713884c0cc72e0e6b23ace9a2dd75187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 3 Dec 2025 13:15:02 +0800 Subject: [PATCH 416/553] Update version and add new composer requirements --- cn/kejilion.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index fe1309a92..459a02c39 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.6" +sh_v="4.2.7" gl_hui='\e[37m' @@ -8318,9 +8318,13 @@ linux_ldnmp() { 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 fof/upload" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/gamification" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/byobu:*" 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 @@ -10756,6 +10760,12 @@ while true; do 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 + + chown -R 1001:1001 /home/docker/dify/docker/volumes/app/storage + chmod -R 755 /home/docker/dify/docker/volumes/app/storage + docker compose down + docker compose up -d + clear echo "已经安装完成" check_docker_app_ip From 8fc06fa0bd8b717f75caf03a13b016b37a87ba34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 3 Dec 2025 13:15:46 +0800 Subject: [PATCH 417/553] Update shell script for version and dependencies --- kejilion.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 657172347..3599f925c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.6" +sh_v="4.2.7" gl_hui='\e[37m' @@ -8318,9 +8318,13 @@ linux_ldnmp() { 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 fof/upload" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/gamification" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/byobu:*" 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 @@ -10756,6 +10760,12 @@ while true; do 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 + + chown -R 1001:1001 /home/docker/dify/docker/volumes/app/storage + chmod -R 755 /home/docker/dify/docker/volumes/app/storage + docker compose down + docker compose up -d + clear echo "已经安装完成" check_docker_app_ip From 08423c94c208697585bf950932601461b573722c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 3 Dec 2025 13:18:41 +0800 Subject: [PATCH 418/553] Update kejilion_sh_log.txt with version 4.2.7 changes --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 5e51f6a81..8443077a0 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1369,5 +1369,9 @@ LDNMP初始化时新增URL绑定,提升wordpress安装向导的稳定性。 反向代理IP+端口功能优化,输入反代IP时回车可默认选择本机IP 127.0.0.1省去额外输入的麻烦。 应用市场komari监控定义时区为上海,修复时间显示问题。 ------------------------ +2025-12-03 v4.2.7 +LDNMP建站为flarum论坛安装时增加了更多实用插件扩展。 +应用市场Dify知识库修复创建管理员出错的问题。官方API权限问题已擦屁股。 +------------------------ From 30efeadb3ce81e8fbdf63e19e72d7a550680b68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:33:45 +0800 Subject: [PATCH 419/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 459a02c39..77275d675 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1634,7 +1634,7 @@ phpmyadmin_upgrade() { 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 + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address From 821ee648671c89f59b2e045d69b94c3855097b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:34:40 +0800 Subject: [PATCH 420/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 3599f925c..c09cdd22f 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1634,7 +1634,7 @@ phpmyadmin_upgrade() { 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 + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address From cd839def044925cda130955a8e3516b230d2be49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 6 Dec 2025 22:14:43 +0800 Subject: [PATCH 421/553] Update kejilion.sh --- cn/kejilion.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 77275d675..6422c68ab 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1434,8 +1434,6 @@ install_ssltls() { 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}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' - # 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 @@ -1445,6 +1443,9 @@ install_ssltls() { 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi From cff7a0f3f958eaa286cac1281d2546d0b38e1fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 6 Dec 2025 22:15:49 +0800 Subject: [PATCH 422/553] Allow traffic on port 80 for certbot Add iptables rule to allow traffic on port 80 for certbot. --- kejilion.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index c09cdd22f..a9885f850 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1434,8 +1434,6 @@ install_ssltls() { 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}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' - # 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 @@ -1445,6 +1443,9 @@ install_ssltls() { 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi From 6c0558e1071102f2683bc77168bacfb73c7ea780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 6 Dec 2025 22:17:32 +0800 Subject: [PATCH 423/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 8443077a0..e19355d8c 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1372,6 +1372,7 @@ LDNMP初始化时新增URL绑定,提升wordpress安装向导的稳定性。 2025-12-03 v4.2.7 LDNMP建站为flarum论坛安装时增加了更多实用插件扩展。 应用市场Dify知识库修复创建管理员出错的问题。官方API权限问题已擦屁股。 +对申请证书时80端口防火墙规则进行优化,提升申请证书成功率。 ------------------------ From 518bc0d2f7f09cb258189e0cb649acec7015b384 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 7 Dec 2025 04:30:07 +0000 Subject: [PATCH 424/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-12-07=2004:30:07?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 30 ++++++++++++++++++---------- jp/kejilion.sh | 54 ++++++++++++++++++++++++++++++-------------------- kr/kejilion.sh | 44 ++++++++++++++++++++++++---------------- tw/kejilion.sh | 22 ++++++++++++++------ 4 files changed, 95 insertions(+), 55 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 592e40c24..af13a099d 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.6" +sh_v="4.2.7" gl_hui='\e[37m' @@ -1401,8 +1401,7 @@ install_ldnmp() { restart_ldnmp - - + sleep 2 clear echo "The LDNMP environment is installed" @@ -1435,8 +1434,6 @@ install_ssltls() { 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}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' - # 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 @@ -1446,6 +1443,9 @@ install_ssltls() { 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi @@ -1635,7 +1635,7 @@ phpmyadmin_upgrade() { 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 + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address @@ -6354,7 +6354,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard drive partition management" + echo "Hard disk partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -8319,9 +8319,13 @@ linux_ldnmp() { 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 fof/upload" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/gamification" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/byobu:*" 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 @@ -10757,6 +10761,12 @@ while true; do 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 + + chown -R 1001:1001 /home/docker/dify/docker/volumes/app/storage + chmod -R 755 /home/docker/dify/docker/volumes/app/storage + docker compose down + docker compose up -d + clear echo "Installation completed" check_docker_app_ip @@ -12784,7 +12794,7 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" + echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" @@ -13256,8 +13266,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 first" - send_stats "Switched to IPv6 first" + echo "Switched to IPv6 priority" + send_stats "Switched to IPv6 priority" ;; 3) diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 1f230406c..8fed2772b 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.6" +sh_v="4.2.7" gl_hui='\e[37m' @@ -863,7 +863,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -1186,7 +1186,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -1401,8 +1401,7 @@ install_ldnmp() { restart_ldnmp - - + sleep 2 clear echo "LDNMP環境がインストールされている" @@ -1435,8 +1434,6 @@ install_ssltls() { 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}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' - # 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 @@ -1446,6 +1443,9 @@ install_ssltls() { 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi @@ -1635,7 +1635,7 @@ phpmyadmin_upgrade() { 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 + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address @@ -2037,7 +2037,7 @@ web_security() { echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされているすべての IP をクリアします。" + echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" echo "------------------------" echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" @@ -5716,7 +5716,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えて" + send_stats "英語に切り替えてください" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -6242,7 +6242,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6354,7 +6354,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6402,7 +6402,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポートを入力してください (デフォルトは 22):" port + read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port port=${port:-22} echo "認証方法を選択してください:" @@ -7425,7 +7425,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -8319,9 +8319,13 @@ linux_ldnmp() { 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 fof/upload" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/gamification" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/byobu:*" 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 @@ -10757,6 +10761,12 @@ while true; do 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 + + chown -R 1001:1001 /home/docker/dify/docker/volumes/app/storage + chmod -R 755 /home/docker/dify/docker/volumes/app/storage + docker compose down + docker compose up -d + clear echo "インストール完了" check_docker_app_ip @@ -12784,7 +12794,7 @@ linux_work() { 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}ワークスペースNo.5" + 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" @@ -13256,8 +13266,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -14141,7 +14151,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -14334,7 +14344,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14354,7 +14364,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14490,7 +14500,7 @@ while true; do 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}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}システムをクリーンアップする" @@ -14818,7 +14828,7 @@ echo -e "${gl_kjlan}16. ${gl_bai}ゲームサーバー起動スクリプト集" 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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 484b56417..018b44482 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.6" +sh_v="4.2.7" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP 지우기" + echo "7. 지정된 IP를 삭제합니다." echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1401,8 +1401,7 @@ install_ldnmp() { restart_ldnmp - - + sleep 2 clear echo "LDNMP 환경이 설치되었습니다" @@ -1435,8 +1434,6 @@ install_ssltls() { 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}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' - # 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 @@ -1446,6 +1443,9 @@ install_ssltls() { 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi @@ -1635,7 +1635,7 @@ phpmyadmin_upgrade() { 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 + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address @@ -3233,7 +3233,7 @@ ldnmp_web_on() { echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치정보는 다음과 같습니다." + echo "$webname설치 정보는 다음과 같습니다." } @@ -6354,7 +6354,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -8319,9 +8319,13 @@ linux_ldnmp() { 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 fof/upload" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/gamification" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/byobu:*" 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 @@ -9443,7 +9447,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -10757,6 +10761,12 @@ while true; do 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 + + chown -R 1001:1001 /home/docker/dify/docker/volumes/app/storage + chmod -R 755 /home/docker/dify/docker/volumes/app/storage + docker compose down + docker compose up -d + clear echo "설치 완료" check_docker_app_ip @@ -12784,7 +12794,7 @@ linux_work() { 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}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" @@ -12886,7 +12896,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13003,7 +13013,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -13256,8 +13266,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -13558,7 +13568,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 + # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 42bd4e45d..c8f9f2a9e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.6" +sh_v="4.2.7" gl_hui='\e[37m' @@ -1401,8 +1401,7 @@ install_ldnmp() { restart_ldnmp - - + sleep 2 clear echo "LDNMP環境安裝完畢" @@ -1435,8 +1434,6 @@ install_ssltls() { 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}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - # local ipv6_pattern='^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$' - # 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 @@ -1446,6 +1443,9 @@ install_ssltls() { 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi @@ -1635,7 +1635,7 @@ phpmyadmin_upgrade() { 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 + curl -sS -O ${gh_proxy}raw.githubusercontent.com/kejilion/docker/refs/heads/main/docker-compose.phpmyadmin.yml docker compose -f docker-compose.phpmyadmin.yml up -d clear ip_address @@ -8319,9 +8319,13 @@ linux_ldnmp() { 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 fof/upload" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/gamification" + docker exec php sh -c "cd /var/www/html/$yuming && composer require fof/byobu:*" 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 @@ -10757,6 +10761,12 @@ while true; do 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 + + chown -R 1001:1001 /home/docker/dify/docker/volumes/app/storage + chmod -R 755 /home/docker/dify/docker/volumes/app/storage + docker compose down + docker compose up -d + clear echo "已經安裝完成" check_docker_app_ip From 3ad21f01243cf0af80f9451d48b746128533c82f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 14 Dec 2025 04:44:15 +0000 Subject: [PATCH 425/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-12-14=2004:44:15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 18 +++++++++--------- jp/kejilion.sh | 34 +++++++++++++++++----------------- kr/kejilion.sh | 30 +++++++++++++++--------------- 3 files changed, 41 insertions(+), 41 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index af13a099d..f271d8a02 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -4738,7 +4738,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -5013,7 +5013,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall Windows 11" + send_stats "Reinstall windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -6354,7 +6354,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard disk partition management" + echo "Hard drive partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -7190,7 +7190,7 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # Mirror + # mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -9071,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -13266,8 +13266,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 priority" - send_stats "Switched to IPv6 priority" + echo "Switched to IPv6 first" + send_stats "Switched to IPv6 first" ;; 3) @@ -14060,7 +14060,7 @@ EOF echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" + echo -e "10. Set the network to${gl_huang}ipv4 priority${gl_bai}" echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" @@ -14109,7 +14109,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" prefer_ipv4 - echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}ipv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 8fed2772b..eb2dcf90a 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -858,12 +858,12 @@ open_port() { 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" + echo "ポートがオープンしました$port" fi done save_iptables_rules - send_stats "ポートがオープンしました" + send_stats "ポートがオープンされました" } @@ -921,7 +921,7 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリース済みIP$ip" + echo "リリースされたIP$ip" fi done @@ -1186,7 +1186,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -2913,7 +2913,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3710,7 +3710,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -4738,7 +4738,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5716,7 +5716,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えてください" + send_stats "英語に切り替えて" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -6242,7 +6242,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6354,7 +6354,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -7425,7 +7425,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -9071,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9344,7 +9344,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12784,7 +12784,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -13480,7 +13480,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得します + # 現在のシステム時刻を取得する local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -14622,7 +14622,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS セール${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14828,7 +14828,7 @@ echo -e "${gl_kjlan}16. ${gl_bai}ゲームサーバー起動スクリプト集" 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}0. ${gl_bai}終了スクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 018b44482..2fcfc8e66 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 삭제합니다." + echo "7. 지정된 IP 지우기" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -2800,7 +2800,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2913,7 +2913,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3239,7 +3239,7 @@ ldnmp_web_on() { nginx_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" } @@ -3300,7 +3300,7 @@ ldnmp_Proxy() { add_yuming fi if [ -z "$reverseproxy" ]; then - read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3539,7 +3539,7 @@ ldnmp_Proxy_backend_stream() { docker exec nginx nginx -s reload clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "------------------------" echo "방문 주소:" ip_address @@ -6354,7 +6354,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -9071,7 +9071,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9131,7 +9131,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" - echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawnix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" @@ -9326,7 +9326,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9335,7 +9335,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "나타 모니터링$check_docker $update_status" + echo -e "네자 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9447,7 +9447,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -12896,7 +12896,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13568,7 +13568,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 + # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -14622,7 +14622,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 거래${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" From 1c7b7b6acaf06952bff12247feabf9ccf68bba4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Dec 2025 16:10:29 +0800 Subject: [PATCH 426/553] Upgrade sh_v to 4.2.8 and adjust nginx config handling Updated version from 4.2.7 to 4.2.8 and modified configuration file handling. --- cn/kejilion.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 6422c68ab..237d8f6dd 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.7" +sh_v="4.2.8" gl_hui='\e[37m' @@ -3310,11 +3310,25 @@ ldnmp_Proxy() { nginx_install_status install_ssltls certs_status + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf - wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf + 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 - 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 + + reverseproxy_port="$reverseproxy:$port" + 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 + sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + nginx_http_on docker exec nginx nginx -s reload nginx_web_on From eb4afcf5100e3355c676ac63b7b2d9c4eadb4a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Dec 2025 16:11:10 +0800 Subject: [PATCH 427/553] Update version and enhance reverse proxy configuration Updated the script to use a new version and modified the configuration file paths. Added dynamic backend server generation and updated reverse proxy settings. --- kejilion.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index a9885f850..e78846210 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.7" +sh_v="4.2.8" gl_hui='\e[37m' @@ -3310,11 +3310,25 @@ ldnmp_Proxy() { nginx_install_status install_ssltls certs_status + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf - wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.conf + 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 - 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 + + reverseproxy_port="$reverseproxy:$port" + 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 + sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + nginx_http_on docker exec nginx nginx -s reload nginx_web_on From 862d317e31aed4d21f09aeaf760d6ff767c623ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 15 Dec 2025 16:14:28 +0800 Subject: [PATCH 428/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index e19355d8c..2ccb6e9ba 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1374,5 +1374,8 @@ LDNMP建站为flarum论坛安装时增加了更多实用插件扩展。 应用市场Dify知识库修复创建管理员出错的问题。官方API权限问题已擦屁股。 对申请证书时80端口防火墙规则进行优化,提升申请证书成功率。 ------------------------ +2025-12-15 v4.2.8 +nginx反向代理优化,定义upstream和keepalive提升后端连接性能和稳定性。 +------------------------ From b8704a930186ae87f8441725b2431ab4a2da0114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Dec 2025 09:54:42 +0800 Subject: [PATCH 429/553] Remove '-it' option from docker exec and run commands --- cn/kejilion.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 237d8f6dd..4d88c90c2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -546,7 +546,7 @@ while true; do 11) send_stats "进入容器" read -e -p "请输入容器名: " dockername - docker exec -it $dockername /bin/sh + docker exec $dockername /bin/sh break_end ;; 12) @@ -1446,7 +1446,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi - docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ @@ -1483,7 +1483,7 @@ if [ -z "$yuming" ]; then fi install_docker install_certbot -docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null +docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text @@ -3642,7 +3642,7 @@ ldnmp_web_status() { 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 + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status @@ -3741,7 +3741,7 @@ ldnmp_web_status() { 20) web_del - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) @@ -5363,7 +5363,7 @@ clamav_scan() { > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # 执行 Docker 命令 - docker run -it --rm \ + docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ @@ -7939,7 +7939,7 @@ linux_Oracle() { local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # 运行Docker容器 - docker run -itd --name=lookbusy --restart=always \ + docker run -d --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ @@ -9290,7 +9290,7 @@ while true; do local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" + local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" docker_app @@ -9561,7 +9561,7 @@ while true; do -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 - docker exec -it db mongosh --eval "printjson(rs.initiate())" + docker exec 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 @@ -10671,7 +10671,7 @@ while true; do docker_rum() { - docker run -it -d --name dpanel --restart=always \ + docker run -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 \ @@ -11070,7 +11070,7 @@ while true; do local docker_port=8068 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 + docker run -d --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 证书自动化管理平台" @@ -11833,7 +11833,7 @@ while true; do add_yuming if [ ! -d /home/docker/matrix/data ]; then - docker run -it --rm \ + docker run --rm \ -v /home/docker/matrix/data:/data \ -e SYNAPSE_SERVER_NAME=${yuming} \ -e SYNAPSE_REPORT_STATS=yes \ @@ -12183,7 +12183,7 @@ while true; do done ' - docker exec -it wireguard bash -c ' + docker exec wireguard bash -c ' for d in /config/peer_*; do cd "$d" || continue conf_file=$(ls *.conf) @@ -12197,7 +12197,7 @@ while true; do sleep 2 echo echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}" - docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + docker exec wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}所有客户端配置代码: ${gl_bai}" From 8aa6c56c9f78ae030007e750b1b410c4f3cba547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Dec 2025 09:55:22 +0800 Subject: [PATCH 430/553] Remove interactive flag from docker run commands --- kejilion.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index e78846210..09bd7f5e3 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -546,7 +546,7 @@ while true; do 11) send_stats "进入容器" read -e -p "请输入容器名: " dockername - docker exec -it $dockername /bin/sh + docker exec $dockername /bin/sh break_end ;; 12) @@ -1446,7 +1446,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi - docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ @@ -1483,7 +1483,7 @@ if [ -z "$yuming" ]; then fi install_docker install_certbot -docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null +docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text @@ -3642,7 +3642,7 @@ ldnmp_web_status() { 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 + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status @@ -3741,7 +3741,7 @@ ldnmp_web_status() { 20) web_del - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) @@ -5363,7 +5363,7 @@ clamav_scan() { > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # 执行 Docker 命令 - docker run -it --rm \ + docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ @@ -7939,7 +7939,7 @@ linux_Oracle() { local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # 运行Docker容器 - docker run -itd --name=lookbusy --restart=always \ + docker run -d --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ @@ -9290,7 +9290,7 @@ while true; do local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" + local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" docker_app @@ -9561,7 +9561,7 @@ while true; do -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 - docker exec -it db mongosh --eval "printjson(rs.initiate())" + docker exec 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 @@ -10671,7 +10671,7 @@ while true; do docker_rum() { - docker run -it -d --name dpanel --restart=always \ + docker run -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 \ @@ -11070,7 +11070,7 @@ while true; do local docker_port=8068 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 + docker run -d --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 证书自动化管理平台" @@ -11833,7 +11833,7 @@ while true; do add_yuming if [ ! -d /home/docker/matrix/data ]; then - docker run -it --rm \ + docker run --rm \ -v /home/docker/matrix/data:/data \ -e SYNAPSE_SERVER_NAME=${yuming} \ -e SYNAPSE_REPORT_STATS=yes \ @@ -12183,7 +12183,7 @@ while true; do done ' - docker exec -it wireguard bash -c ' + docker exec wireguard bash -c ' for d in /config/peer_*; do cd "$d" || continue conf_file=$(ls *.conf) @@ -12197,7 +12197,7 @@ while true; do sleep 2 echo echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}" - docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + docker exec wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}所有客户端配置代码: ${gl_bai}" From cca8b3ec794ec5f54f7c8a6b2993e08eececac6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Dec 2025 09:56:45 +0800 Subject: [PATCH 431/553] Optimize Docker automation by removing -it parameter Removed unnecessary -it parameter from Docker automation to enhance stability and follow best practices. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 2ccb6e9ba..db9f8ca54 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1376,6 +1376,7 @@ LDNMP建站为flarum论坛安装时增加了更多实用插件扩展。 ------------------------ 2025-12-15 v4.2.8 nginx反向代理优化,定义upstream和keepalive提升后端连接性能和稳定性。 +去掉docker自动化中无用的-it参数,提升运行稳定性,遵行最佳实践。 ------------------------ From b303d20515842fd962b25b41c64537746526fe58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Dec 2025 10:26:58 +0800 Subject: [PATCH 432/553] Add fail2ban management panel function --- cn/kejilion.sh | 111 ++++++++++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 47 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 4d88c90c2..de7880337 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13015,6 +13015,62 @@ switch_mirror() { } +fail2ban_panel() { + root_use + send_stats "ssh防御" + while true; do + + check_f2b_status + echo -e "SSH防御程序 $check_f2b_status" + 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) + f2b_install_sshd + cd ~ + f2b_status + break_end + ;; + 2) + echo "------------------------" + f2b_sshd + echo "------------------------" + break_end + ;; + 3) + tail -f /var/log/fail2ban.log + break + ;; + 9) + remove fail2ban + rm -rf /etc/fail2ban + echo "Fail2Ban防御程序已卸载" + break + ;; + *) + break + ;; + esac + done + +} + + + + + + linux_Settings() { @@ -13752,53 +13808,7 @@ EOF ;; 22) - root_use - send_stats "ssh防御" - while true; do - - check_f2b_status - echo -e "SSH防御程序 $check_f2b_status" - 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) - f2b_install_sshd - cd ~ - f2b_status - break_end - ;; - 2) - echo "------------------------" - f2b_sshd - echo "------------------------" - break_end - ;; - 3) - tail -f /var/log/fail2ban.log - break - ;; - 9) - remove fail2ban - rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" - break - ;; - *) - break - ;; - esac - done + fail2ban_panel ;; @@ -14921,6 +14931,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夹 k fav | k 命令收藏夹" echo "应用市场管理 k app" echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "fail2ban管理 k fail2ban | k f2b" echo "显示系统信息 k info" } @@ -15153,8 +15164,14 @@ else linux_info ;; + fail2ban|f2b) + fail2ban_panel + ;; + *) k_info ;; esac fi + + From 2f6345e5bf47acb4afc2417dd1568ea3bc9e4a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Dec 2025 10:27:30 +0800 Subject: [PATCH 433/553] Update kejilion.sh --- kejilion.sh | 111 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 47 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 09bd7f5e3..29567b34b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13015,6 +13015,62 @@ switch_mirror() { } +fail2ban_panel() { + root_use + send_stats "ssh防御" + while true; do + + check_f2b_status + echo -e "SSH防御程序 $check_f2b_status" + 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) + f2b_install_sshd + cd ~ + f2b_status + break_end + ;; + 2) + echo "------------------------" + f2b_sshd + echo "------------------------" + break_end + ;; + 3) + tail -f /var/log/fail2ban.log + break + ;; + 9) + remove fail2ban + rm -rf /etc/fail2ban + echo "Fail2Ban防御程序已卸载" + break + ;; + *) + break + ;; + esac + done + +} + + + + + + linux_Settings() { @@ -13752,53 +13808,7 @@ EOF ;; 22) - root_use - send_stats "ssh防御" - while true; do - - check_f2b_status - echo -e "SSH防御程序 $check_f2b_status" - 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) - f2b_install_sshd - cd ~ - f2b_status - break_end - ;; - 2) - echo "------------------------" - f2b_sshd - echo "------------------------" - break_end - ;; - 3) - tail -f /var/log/fail2ban.log - break - ;; - 9) - remove fail2ban - rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" - break - ;; - *) - break - ;; - esac - done + fail2ban_panel ;; @@ -14921,6 +14931,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夹 k fav | k 命令收藏夹" echo "应用市场管理 k app" echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "fail2ban管理 k fail2ban | k f2b" echo "显示系统信息 k info" } @@ -15153,8 +15164,14 @@ else linux_info ;; + fail2ban|f2b) + fail2ban_panel + ;; + *) k_info ;; esac fi + + From 0264f78e7f48aa5d5ffe36c0dbbf3a36ddb85cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 17 Dec 2025 10:29:04 +0800 Subject: [PATCH 434/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index db9f8ca54..bb2172376 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1377,6 +1377,7 @@ LDNMP建站为flarum论坛安装时增加了更多实用插件扩展。 2025-12-15 v4.2.8 nginx反向代理优化,定义upstream和keepalive提升后端连接性能和稳定性。 去掉docker自动化中无用的-it参数,提升运行稳定性,遵行最佳实践。 +添加kl快捷命令 k f2b 可以快速启动fail2ban管理工具。 ------------------------ From 5a7064e46bb9803aafa72dfb86647b08c273448a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:43:47 +0800 Subject: [PATCH 435/553] Update kejilion.sh --- cn/kejilion.sh | 118 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 23 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index de7880337..19ce322e6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.8" +sh_v="4.2.9" gl_hui='\e[37m' @@ -1425,6 +1425,13 @@ install_certbot() { } + + + + + + + install_ssltls() { check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 @@ -1542,12 +1549,28 @@ certs_status() { echo -e "4. 防火墙限制 ➠ 检查80/443端口是否开放,确保验证可访问" echo -e "5. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" - break_end - clear - echo "请再次尝试部署 $webname" - add_yuming - install_ssltls - certs_status + echo "------------------------" + echo "1. 重新申请 2. 不带证书改用HTTP访问 0. 退出" + echo "------------------------" + read -e -p "请输入你的选择: " sub_choice + case $sub_choice in + 1) + send_stats "重新申请" + echo "请再次尝试部署 $webname" + add_yuming + install_ssltls + certs_status + ;; + 2) + send_stats "不带证书改用HTTP访问" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf + sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf + ;; + *) + exit + ;; + esac fi } @@ -1569,6 +1592,40 @@ add_yuming() { } +check_ip_and_get_access_port() { + local yuming="$1" + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + read -e -p "请输入访问/监听端口,回车默认使用 80: " access_port + access_port=${access_port:-80} + fi +} + + + +update_nginx_listen_port() { + local yuming="$1" + local access_port="$2" + local conf="/home/web/conf.d/${yuming}.conf" + + # 如果 access_port 为空,则跳过 + [ -z "$access_port" ] && return 0 + + # 删除所有 listen 行 + sed -i '/^[[:space:]]*listen[[:space:]]\+/d' "$conf" + + # 在 server { 后插入新的 listen + sed -i "/server {/a\\ + listen ${access_port};\\ + listen [::]:${access_port}; +" "$conf" +} + + + add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" @@ -1579,17 +1636,6 @@ add_db() { 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_ldnmp() { docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 @@ -3238,10 +3284,21 @@ ldnmp_web_on() { } nginx_web_on() { - clear - echo "您的 $webname 搭建好了!" - echo "https://$yuming" + clear + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + echo "您的 $webname 搭建好了!" + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf + echo "http://$yuming:$access_port" + elif grep -q '^[[:space:]]*#.*if (\$scheme = http)' "/home/web/conf.d/"$yuming".conf"; then + echo "http://$yuming" + else + echo "https://$yuming" + fi } @@ -3287,6 +3344,7 @@ ldnmp_wp() { } + ldnmp_Proxy() { clear webname="反向代理-IP+端口" @@ -3299,6 +3357,9 @@ ldnmp_Proxy() { if [ -z "$yuming" ]; then add_yuming fi + + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy" ]; then read -e -p "请输入你的反代IP (回车默认本机IP 127.0.0.1): " reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} @@ -3329,6 +3390,8 @@ ldnmp_Proxy() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3346,6 +3409,8 @@ ldnmp_Proxy_backend() { add_yuming fi + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy_port" ]; then read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi @@ -3369,6 +3434,8 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3610,6 +3677,11 @@ ldnmp_web_status() { fi done + for conf_file in /home/web/conf.d/*_*.conf; do + [ -e "$conf_file" ] || continue + basename "$conf_file" .conf + done + echo "------------------------" echo "" echo -e "数据库: ${db_output}" @@ -8639,7 +8711,7 @@ linux_ldnmp() { -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server duankou=3280 - reverse_proxy + ldnmp_Proxy 127.0.0.1 $duankou nginx_web_on @@ -8657,7 +8729,7 @@ linux_ldnmp() { 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 + ldnmp_Proxy 127.0.0.1 $duankou nginx_web_on From 38e7200fbc87c6c140639fe2f4c8abee92d9795d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:44:29 +0800 Subject: [PATCH 436/553] Update version and refactor reverse proxy handling Updated version from 4.2.8 to 4.2.9 and refactored the reverse proxy function. Added user prompts for deployment options and improved nginx configuration handling. --- kejilion.sh | 118 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 23 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 29567b34b..de08356a1 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.8" +sh_v="4.2.9" gl_hui='\e[37m' @@ -1425,6 +1425,13 @@ install_certbot() { } + + + + + + + install_ssltls() { check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 @@ -1542,12 +1549,28 @@ certs_status() { echo -e "4. 防火墙限制 ➠ 检查80/443端口是否开放,确保验证可访问" echo -e "5. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" - break_end - clear - echo "请再次尝试部署 $webname" - add_yuming - install_ssltls - certs_status + echo "------------------------" + echo "1. 重新申请 2. 不带证书改用HTTP访问 0. 退出" + echo "------------------------" + read -e -p "请输入你的选择: " sub_choice + case $sub_choice in + 1) + send_stats "重新申请" + echo "请再次尝试部署 $webname" + add_yuming + install_ssltls + certs_status + ;; + 2) + send_stats "不带证书改用HTTP访问" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf + sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf + ;; + *) + exit + ;; + esac fi } @@ -1569,6 +1592,40 @@ add_yuming() { } +check_ip_and_get_access_port() { + local yuming="$1" + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + read -e -p "请输入访问/监听端口,回车默认使用 80: " access_port + access_port=${access_port:-80} + fi +} + + + +update_nginx_listen_port() { + local yuming="$1" + local access_port="$2" + local conf="/home/web/conf.d/${yuming}.conf" + + # 如果 access_port 为空,则跳过 + [ -z "$access_port" ] && return 0 + + # 删除所有 listen 行 + sed -i '/^[[:space:]]*listen[[:space:]]\+/d' "$conf" + + # 在 server { 后插入新的 listen + sed -i "/server {/a\\ + listen ${access_port};\\ + listen [::]:${access_port}; +" "$conf" +} + + + add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" @@ -1579,17 +1636,6 @@ add_db() { 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_ldnmp() { docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 @@ -3238,10 +3284,21 @@ ldnmp_web_on() { } nginx_web_on() { - clear - echo "您的 $webname 搭建好了!" - echo "https://$yuming" + clear + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + echo "您的 $webname 搭建好了!" + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf + echo "http://$yuming:$access_port" + elif grep -q '^[[:space:]]*#.*if (\$scheme = http)' "/home/web/conf.d/"$yuming".conf"; then + echo "http://$yuming" + else + echo "https://$yuming" + fi } @@ -3287,6 +3344,7 @@ ldnmp_wp() { } + ldnmp_Proxy() { clear webname="反向代理-IP+端口" @@ -3299,6 +3357,9 @@ ldnmp_Proxy() { if [ -z "$yuming" ]; then add_yuming fi + + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy" ]; then read -e -p "请输入你的反代IP (回车默认本机IP 127.0.0.1): " reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} @@ -3329,6 +3390,8 @@ ldnmp_Proxy() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3346,6 +3409,8 @@ ldnmp_Proxy_backend() { add_yuming fi + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy_port" ]; then read -e -p "请输入你的多个反代IP+端口用空格隔开(例如 127.0.0.1:3000 127.0.0.1:3002): " reverseproxy_port fi @@ -3369,6 +3434,8 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3610,6 +3677,11 @@ ldnmp_web_status() { fi done + for conf_file in /home/web/conf.d/*_*.conf; do + [ -e "$conf_file" ] || continue + basename "$conf_file" .conf + done + echo "------------------------" echo "" echo -e "数据库: ${db_output}" @@ -8639,7 +8711,7 @@ linux_ldnmp() { -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server duankou=3280 - reverse_proxy + ldnmp_Proxy 127.0.0.1 $duankou nginx_web_on @@ -8657,7 +8729,7 @@ linux_ldnmp() { 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 + ldnmp_Proxy 127.0.0.1 $duankou nginx_web_on From e0c67a2d3006a4fac928c45793ff9c4c8a53f493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:49:04 +0800 Subject: [PATCH 437/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index bb2172376..de8ca8a1e 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1379,5 +1379,9 @@ nginx反向代理优化,定义upstream和keepalive提升后端连接性能和 去掉docker自动化中无用的-it参数,提升运行稳定性,遵行最佳实践。 添加kl快捷命令 k f2b 可以快速启动fail2ban管理工具。 ------------------------ +2025-12-19 v4.2.9 +nginx反向代理和负载均衡支持IP自定义监听端口功能,可实现反代内部IP加端口到网关的效果, +SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问或者中断申请。 +------------------------ From d0e5a4b6dd2a43a64d1ef75838daee897eac7f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 19 Dec 2025 16:07:23 +0800 Subject: [PATCH 438/553] Rearrange installation functions in kejilion.sh --- cn/kejilion.sh | 152 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 102 insertions(+), 50 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 19ce322e6..8105a0cb3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3315,14 +3315,16 @@ ldnmp_wp() { fi repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + install_ssltls + certs_status + add_db + cd /home/web/html mkdir $yuming cd $yuming @@ -3369,12 +3371,14 @@ ldnmp_Proxy() { read -e -p "请输入你的反代端口: " port fi nginx_install_status - install_ssltls - certs_status wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + install_ssltls + certs_status + + 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 @@ -3416,11 +3420,14 @@ ldnmp_Proxy_backend() { fi nginx_install_status - install_ssltls - certs_status + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + + install_ssltls + certs_status + 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 @@ -3682,6 +3689,20 @@ ldnmp_web_status() { basename "$conf_file" .conf done + for conf_file in /home/web/conf.d/*.conf; do + [ -e "$conf_file" ] || continue + + filename=$(basename "$conf_file") + + if [ "$filename" = "map.conf" ] || [ "$filename" = "default.conf" ]; then + continue + fi + + if ! grep -q "ssl_certificate" "$conf_file"; then + basename "$conf_file" .conf + fi + done + echo "------------------------" echo "" echo -e "数据库: ${db_output}" @@ -8216,12 +8237,17 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8253,12 +8279,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8288,12 +8317,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8331,12 +8364,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8379,12 +8416,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini @@ -8434,12 +8474,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8472,13 +8516,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8508,12 +8555,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8642,12 +8692,15 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8679,12 +8732,14 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8700,9 +8755,6 @@ linux_ldnmp() { send_stats "安装$webname" echo "开始部署 $webname" add_yuming - nginx_install_status - install_ssltls - certs_status docker run -d \ --name bitwarden \ @@ -8710,10 +8762,10 @@ linux_ldnmp() { -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server + duankou=3280 - ldnmp_Proxy 127.0.0.1 $duankou + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou - nginx_web_on ;; @@ -8723,15 +8775,11 @@ linux_ldnmp() { 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 - ldnmp_Proxy 127.0.0.1 $duankou - nginx_web_on + duankou=8010 + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou ;; @@ -8742,11 +8790,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -8781,11 +8831,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html From 6efa4abc0f81de18dd3ce54ed1841b27de76f37e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 19 Dec 2025 16:08:00 +0800 Subject: [PATCH 439/553] Rearrange installation steps for clarity Reorder installation steps to ensure SSL/TLS and database setup occur after configuration downloads. --- kejilion.sh | 152 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 102 insertions(+), 50 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index de08356a1..ee7500831 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3315,14 +3315,16 @@ ldnmp_wp() { fi repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + install_ssltls + certs_status + add_db + cd /home/web/html mkdir $yuming cd $yuming @@ -3369,12 +3371,14 @@ ldnmp_Proxy() { read -e -p "请输入你的反代端口: " port fi nginx_install_status - install_ssltls - certs_status wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + install_ssltls + certs_status + + 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 @@ -3416,11 +3420,14 @@ ldnmp_Proxy_backend() { fi nginx_install_status - install_ssltls - certs_status + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + + install_ssltls + certs_status + 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 @@ -3682,6 +3689,20 @@ ldnmp_web_status() { basename "$conf_file" .conf done + for conf_file in /home/web/conf.d/*.conf; do + [ -e "$conf_file" ] || continue + + filename=$(basename "$conf_file") + + if [ "$filename" = "map.conf" ] || [ "$filename" = "default.conf" ]; then + continue + fi + + if ! grep -q "ssl_certificate" "$conf_file"; then + basename "$conf_file" .conf + fi + done + echo "------------------------" echo "" echo -e "数据库: ${db_output}" @@ -8216,12 +8237,17 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8253,12 +8279,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8288,12 +8317,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8331,12 +8364,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8379,12 +8416,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini @@ -8434,12 +8474,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8472,13 +8516,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8508,12 +8555,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8642,12 +8692,15 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8679,12 +8732,14 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8700,9 +8755,6 @@ linux_ldnmp() { send_stats "安装$webname" echo "开始部署 $webname" add_yuming - nginx_install_status - install_ssltls - certs_status docker run -d \ --name bitwarden \ @@ -8710,10 +8762,10 @@ linux_ldnmp() { -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server + duankou=3280 - ldnmp_Proxy 127.0.0.1 $duankou + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou - nginx_web_on ;; @@ -8723,15 +8775,11 @@ linux_ldnmp() { 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 - ldnmp_Proxy 127.0.0.1 $duankou - nginx_web_on + duankou=8010 + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou ;; @@ -8742,11 +8790,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -8781,11 +8831,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html From 9b2b0bfcdfee8bd44b39cc96b66664eb6301d5bd Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 21 Dec 2025 04:12:25 +0000 Subject: [PATCH 440/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-12-21=2004:12:25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 445 ++++++++++++++++++++++++++++++--------------- jp/kejilion.sh | 463 +++++++++++++++++++++++++++++++---------------- kr/kejilion.sh | 477 ++++++++++++++++++++++++++++++++----------------- tw/kejilion.sh | 423 +++++++++++++++++++++++++++++-------------- 4 files changed, 1214 insertions(+), 594 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index f271d8a02..807db858c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.7" +sh_v="4.2.9" gl_hui='\e[37m' @@ -546,7 +546,7 @@ while true; do 11) send_stats "Enter the container" read -e -p "Please enter the container name:" dockername - docker exec -it $dockername /bin/sh + docker exec $dockername /bin/sh break_end ;; 12) @@ -881,7 +881,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add shutdown rule + # Add a shutdown rule 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 @@ -1425,6 +1425,13 @@ install_certbot() { } + + + + + + + install_ssltls() { check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 @@ -1446,7 +1453,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi - docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ @@ -1483,7 +1490,7 @@ if [ -z "$yuming" ]; then fi install_docker install_certbot -docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null +docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text @@ -1542,12 +1549,28 @@ certs_status() { echo -e "4. Firewall restrictions ➠ Check whether port 80/443 is open and ensure that it is accessible" echo -e "5. The number of applications exceeds the limit ➠ Let's Encrypt has a weekly limit (5 times/domain name/week)" echo -e "6. Domestic registration restrictions ➠ For mainland China environment, please confirm whether the domain name is registered" - break_end - clear - echo "Please try deploying again$webname" - add_yuming - install_ssltls - certs_status + echo "------------------------" + echo "1. Reapply 2. Switch to HTTP access without certificate 0. Exit" + echo "------------------------" + read -e -p "Please enter your choice:" sub_choice + case $sub_choice in + 1) + send_stats "Reapply" + echo "Please try deploying again$webname" + add_yuming + install_ssltls + certs_status + ;; + 2) + send_stats "Switch to HTTP access without a certificate" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf + sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf + ;; + *) + exit + ;; + esac fi } @@ -1569,6 +1592,40 @@ add_yuming() { } +check_ip_and_get_access_port() { + local yuming="$1" + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + read -e -p "Please enter the access/listening port, and press Enter to use 80 by default:" access_port + access_port=${access_port:-80} + fi +} + + + +update_nginx_listen_port() { + local yuming="$1" + local access_port="$2" + local conf="/home/web/conf.d/${yuming}.conf" + + # Skip if access_port is empty + [ -z "$access_port" ] && return 0 + + # Remove all listen lines + sed -i '/^[[:space:]]*listen[[:space:]]\+/d' "$conf" + + # Insert new listen after server { + sed -i "/server {/a\\ + listen ${access_port};\\ + listen [::]:${access_port}; +" "$conf" +} + + + add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" @@ -1579,17 +1636,6 @@ add_db() { 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_ldnmp() { docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 @@ -3238,10 +3284,21 @@ ldnmp_web_on() { } nginx_web_on() { - clear - echo "your$webnameIt's built!" - echo "https://$yuming" + clear + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + echo "your$webnameIt's built!" + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf + echo "http://$yuming:$access_port" + elif grep -q '^[[:space:]]*#.*if (\$scheme = http)' "/home/web/conf.d/"$yuming".conf"; then + echo "http://$yuming" + else + echo "https://$yuming" + fi } @@ -3258,14 +3315,16 @@ ldnmp_wp() { fi repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + install_ssltls + certs_status + add_db + cd /home/web/html mkdir $yuming cd $yuming @@ -3287,6 +3346,7 @@ ldnmp_wp() { } + ldnmp_Proxy() { clear webname="反向代理-IP+端口" @@ -3299,6 +3359,9 @@ ldnmp_Proxy() { if [ -z "$yuming" ]; then add_yuming fi + + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy" ]; then read -e -p "Please enter your anti-generation IP (press Enter to default to the local IP 127.0.0.1):" reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} @@ -3308,13 +3371,31 @@ ldnmp_Proxy() { read -e -p "Please enter your anti-generation port:" port fi nginx_install_status + + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf + wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + install_ssltls certs_status - wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf - wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.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 - 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 + + reverseproxy_port="$reverseproxy:$port" + 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 + sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3332,16 +3413,21 @@ ldnmp_Proxy_backend() { add_yuming fi + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy_port" ]; then read -e -p "Please enter your multiple anti-generation IP+ports separated by spaces (for example, 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/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + + install_ssltls + certs_status + 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 @@ -3355,6 +3441,8 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3596,6 +3684,25 @@ ldnmp_web_status() { fi done + for conf_file in /home/web/conf.d/*_*.conf; do + [ -e "$conf_file" ] || continue + basename "$conf_file" .conf + done + + for conf_file in /home/web/conf.d/*.conf; do + [ -e "$conf_file" ] || continue + + filename=$(basename "$conf_file") + + if [ "$filename" = "map.conf" ] || [ "$filename" = "default.conf" ]; then + continue + fi + + if ! grep -q "ssl_certificate" "$conf_file"; then + basename "$conf_file" .conf + fi + done + echo "------------------------" echo "" echo -e "database:${db_output}" @@ -3628,7 +3735,7 @@ ldnmp_web_status() { send_stats "Apply for a domain name certificate" read -e -p "Please enter your domain name:" yuming install_certbot - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status @@ -3727,7 +3834,7 @@ ldnmp_web_status() { 20) web_del - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) @@ -4738,7 +4845,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -5013,7 +5120,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall windows 11" + send_stats "Reinstall Windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5349,7 +5456,7 @@ clamav_scan() { > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # Execute Docker command - docker run -it --rm \ + docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ @@ -6354,7 +6461,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard drive partition management" + echo "Hard disk partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -7190,7 +7297,7 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # mirror + # Mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -7925,7 +8032,7 @@ linux_Oracle() { local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # Run Docker container - docker run -itd --name=lookbusy --restart=always \ + docker run -d --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ @@ -8130,12 +8237,17 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8167,12 +8279,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8202,12 +8317,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8245,12 +8364,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8293,12 +8416,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini @@ -8348,12 +8474,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8386,13 +8516,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8422,12 +8555,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8556,12 +8692,15 @@ linux_ldnmp() { add_yuming read -e -p "Please enter the redirect domain name:" 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8593,12 +8732,14 @@ linux_ldnmp() { echo -e "Domain name format:${gl_huang}google.com${gl_bai}" read -e -p "Please enter your reverse proxy domain name:" 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8614,9 +8755,6 @@ linux_ldnmp() { send_stats "Install$webname" echo "Start deployment$webname" add_yuming - nginx_install_status - install_ssltls - certs_status docker run -d \ --name bitwarden \ @@ -8624,10 +8762,10 @@ linux_ldnmp() { -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server + duankou=3280 - reverse_proxy + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou - nginx_web_on ;; @@ -8637,15 +8775,11 @@ linux_ldnmp() { send_stats "Install$webname" echo "Start deployment$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 + duankou=8010 + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou ;; @@ -8656,11 +8790,13 @@ linux_ldnmp() { echo "Start deployment$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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -8695,11 +8831,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -9071,7 +9209,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -9276,7 +9414,7 @@ while true; do local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" + local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" docker_app @@ -9415,7 +9553,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal service$check_docker $update_status" + echo -e "postal services$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9547,7 +9685,7 @@ while true; do -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 - docker exec -it db mongosh --eval "printjson(rs.initiate())" + docker exec 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 @@ -10657,7 +10795,7 @@ while true; do docker_rum() { - docker run -it -d --name dpanel --restart=always \ + docker run -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 \ @@ -11056,7 +11194,7 @@ while true; do local docker_port=8068 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 + docker run -d --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 证书自动化管理平台" @@ -11819,7 +11957,7 @@ while true; do add_yuming if [ ! -d /home/docker/matrix/data ]; then - docker run -it --rm \ + docker run --rm \ -v /home/docker/matrix/data:/data \ -e SYNAPSE_SERVER_NAME=${yuming} \ -e SYNAPSE_REPORT_STATS=yes \ @@ -12169,7 +12307,7 @@ while true; do done ' - docker exec -it wireguard bash -c ' + docker exec wireguard bash -c ' for d in /config/peer_*; do cd "$d" || continue conf_file=$(ls *.conf) @@ -12183,7 +12321,7 @@ while true; do sleep 2 echo echo -e "${gl_huang}All client QR code configurations:${gl_bai}" - docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + docker exec wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}All client configuration codes:${gl_bai}" @@ -12794,7 +12932,7 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" + echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" @@ -13001,6 +13139,62 @@ switch_mirror() { } +fail2ban_panel() { + root_use + send_stats "ssh defense" + while true; do + + check_f2b_status + echo -e "SSH defense program$check_f2b_status" + echo "fail2ban is an SSH tool to prevent brute force cracking" + echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" + echo "------------------------" + echo "1. Install a defense program" + echo "------------------------" + echo "2. View SSH interception records" + echo "3. Real-time log monitoring" + echo "------------------------" + echo "9. Uninstall the defense program" + echo "------------------------" + echo "0. Return to the previous menu" + echo "------------------------" + read -e -p "Please enter your choice:" sub_choice + case $sub_choice in + 1) + f2b_install_sshd + cd ~ + f2b_status + break_end + ;; + 2) + echo "------------------------" + f2b_sshd + echo "------------------------" + break_end + ;; + 3) + tail -f /var/log/fail2ban.log + break + ;; + 9) + remove fail2ban + rm -rf /etc/fail2ban + echo "Fail2Ban defense program has been uninstalled" + break + ;; + *) + break + ;; + esac + done + +} + + + + + + linux_Settings() { @@ -13738,53 +13932,7 @@ EOF ;; 22) - root_use - send_stats "ssh defense" - while true; do - - check_f2b_status - echo -e "SSH defense program$check_f2b_status" - echo "fail2ban is an SSH tool to prevent brute force cracking" - echo "Official website introduction:${gh_proxy}github.com/fail2ban/fail2ban" - echo "------------------------" - echo "1. Install a defense program" - echo "------------------------" - echo "2. View SSH interception records" - echo "3. Real-time log monitoring" - echo "------------------------" - echo "9. Uninstall the defense program" - echo "------------------------" - echo "0. Return to the previous menu" - echo "------------------------" - read -e -p "Please enter your choice:" sub_choice - case $sub_choice in - 1) - f2b_install_sshd - cd ~ - f2b_status - break_end - ;; - 2) - echo "------------------------" - f2b_sshd - echo "------------------------" - break_end - ;; - 3) - tail -f /var/log/fail2ban.log - break - ;; - 9) - remove fail2ban - rm -rf /etc/fail2ban - echo "Fail2Ban defense program has been uninstalled" - break - ;; - *) - break - ;; - esac - done + fail2ban_panel ;; @@ -14060,7 +14208,7 @@ EOF echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "10. Set the network to${gl_huang}ipv4 priority${gl_bai}" + echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" @@ -14109,7 +14257,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" prefer_ipv4 - echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}ipv4 priority${gl_bai}}" + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker @@ -14622,7 +14770,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" +echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14907,6 +15055,7 @@ echo "Block IP k zzip 177.5.25.36 |k Block IP 177.5.25.36" echo "command favorites k fav | k command favorites" echo "Application market management k app" echo "Quick management of application numbers k app 26 | k app 1panel | k app npm" +echo "fail2ban management k fail2ban | k f2b" echo "Display system information k info" } @@ -15139,8 +15288,14 @@ else linux_info ;; + fail2ban|f2b) + fail2ban_panel + ;; + *) k_info ;; esac fi + + diff --git a/jp/kejilion.sh b/jp/kejilion.sh index eb2dcf90a..4628b2dc2 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.7" +sh_v="4.2.9" gl_hui='\e[37m' @@ -251,7 +251,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストールする$package...${gl_bai}" + 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 @@ -546,7 +546,7 @@ while true; do 11) send_stats "コンテナに入る" read -e -p "コンテナ名を入力してください:" dockername - docker exec -it $dockername /bin/sh + docker exec $dockername /bin/sh break_end ;; 12) @@ -858,7 +858,7 @@ open_port() { 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" + echo "ポートがオープンされました$port" fi done @@ -921,7 +921,7 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリースされたIP$ip" + echo "リリース済みIP$ip" fi done @@ -1425,6 +1425,13 @@ install_certbot() { } + + + + + + + install_ssltls() { check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 @@ -1446,7 +1453,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi - docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ @@ -1483,7 +1490,7 @@ if [ -z "$yuming" ]; then fi install_docker install_certbot -docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null +docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text @@ -1542,12 +1549,28 @@ certs_status() { echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" echo -e "5. アプリケーション数が制限を超えている ➠ Let's Encrypt には週制限あり (5 回/ドメイン名/週)" echo -e "6. 国内登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかをご確認ください。" - break_end - clear - echo "もう一度デプロイしてみてください$webname" - add_yuming - install_ssltls - certs_status + echo "------------------------" + echo "1. 再適用 2. 証明書なしの HTTP アクセスに切り替える 0. 終了" + echo "------------------------" + read -e -p "選択肢を入力してください:" sub_choice + case $sub_choice in + 1) + send_stats "再申請" + echo "もう一度デプロイしてみてください$webname" + add_yuming + install_ssltls + certs_status + ;; + 2) + send_stats "証明書なしの HTTP アクセスに切り替える" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf + sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf + ;; + *) + exit + ;; + esac fi } @@ -1569,6 +1592,40 @@ add_yuming() { } +check_ip_and_get_access_port() { + local yuming="$1" + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + read -e -p "デフォルトで 80 を使用するには、アクセス/リスニング ポートを入力し、Enter キーを押してください。" access_port + access_port=${access_port:-80} + fi +} + + + +update_nginx_listen_port() { + local yuming="$1" + local access_port="$2" + local conf="/home/web/conf.d/${yuming}.conf" + + # access_port が空の場合はスキップします + [ -z "$access_port" ] && return 0 + + # すべてのリッスン行を削除します + sed -i '/^[[:space:]]*listen[[:space:]]\+/d' "$conf" + + # サーバー { の後に新しいリッスンを挿入します + sed -i "/server {/a\\ + listen ${access_port};\\ + listen [::]:${access_port}; +" "$conf" +} + + + add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" @@ -1579,17 +1636,6 @@ add_db() { 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_ldnmp() { docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 @@ -2037,7 +2083,7 @@ web_security() { echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. インターセプトパラメータを設定します。 12. ブロックされた IP をすべてクリアします。" echo "------------------------" echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" @@ -2528,7 +2574,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8を確認して許可します。 + # ローカルネットワーク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 @@ -2545,7 +2591,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8を確認して許可します。 + # ローカルネットワーク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 @@ -2913,7 +2959,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3238,10 +3284,21 @@ ldnmp_web_on() { } nginx_web_on() { - clear - echo "あなたの$webname建てられました!" - echo "https://$yuming" + clear + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + echo "あなたの$webname建てられました!" + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf + echo "http://$yuming:$access_port" + elif grep -q '^[[:space:]]*#.*if (\$scheme = http)' "/home/web/conf.d/"$yuming".conf"; then + echo "http://$yuming" + else + echo "https://$yuming" + fi } @@ -3258,14 +3315,16 @@ ldnmp_wp() { fi repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + install_ssltls + certs_status + add_db + cd /home/web/html mkdir $yuming cd $yuming @@ -3287,6 +3346,7 @@ ldnmp_wp() { } + ldnmp_Proxy() { clear webname="反向代理-IP+端口" @@ -3299,6 +3359,9 @@ ldnmp_Proxy() { if [ -z "$yuming" ]; then add_yuming fi + + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy" ]; then read -e -p "アンチジェネレーション IP を入力してください (Enter キーを押すとデフォルトでローカル IP 127.0.0.1 になります):" reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} @@ -3308,13 +3371,31 @@ ldnmp_Proxy() { read -e -p "アンチジェネレーションポートを入力してください:" port fi nginx_install_status + + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf + wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + install_ssltls certs_status - wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf - wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.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 - 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 + + reverseproxy_port="$reverseproxy:$port" + 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 + sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3332,16 +3413,21 @@ ldnmp_Proxy_backend() { add_yuming fi + check_ip_and_get_access_port "$yuming" + 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/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + + install_ssltls + certs_status + 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 @@ -3355,6 +3441,8 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3596,6 +3684,25 @@ ldnmp_web_status() { fi done + for conf_file in /home/web/conf.d/*_*.conf; do + [ -e "$conf_file" ] || continue + basename "$conf_file" .conf + done + + for conf_file in /home/web/conf.d/*.conf; do + [ -e "$conf_file" ] || continue + + filename=$(basename "$conf_file") + + if [ "$filename" = "map.conf" ] || [ "$filename" = "default.conf" ]; then + continue + fi + + if ! grep -q "ssl_certificate" "$conf_file"; then + basename "$conf_file" .conf + fi + done + echo "------------------------" echo "" echo -e "データベース:${db_output}" @@ -3628,7 +3735,7 @@ ldnmp_web_status() { 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 + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status @@ -3727,7 +3834,7 @@ ldnmp_web_status() { 20) web_del - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) @@ -4162,7 +4269,7 @@ frps_panel() { 8) send_stats "IPアクセスをブロックする" - echo "ドメイン名アクセスを逆にしている場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全になります。" + echo "ドメイン名アクセスを反転している場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全です。" read -e -p "ブロックするポートを入力してください:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4738,7 +4845,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } @@ -5349,7 +5456,7 @@ clamav_scan() { > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # Dockerコマンドを実行する - docker run -it --rm \ + docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ @@ -6242,7 +6349,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6354,7 +6461,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -7152,7 +7259,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7925,7 +8032,7 @@ linux_Oracle() { local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # Dockerコンテナを実行する - docker run -itd --name=lookbusy --restart=always \ + docker run -d --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ @@ -8130,12 +8237,17 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8167,12 +8279,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8202,12 +8317,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8245,12 +8364,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8293,12 +8416,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini @@ -8348,12 +8474,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8386,13 +8516,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8422,12 +8555,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8556,12 +8692,15 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8593,12 +8732,14 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8614,9 +8755,6 @@ linux_ldnmp() { send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming - nginx_install_status - install_ssltls - certs_status docker run -d \ --name bitwarden \ @@ -8624,10 +8762,10 @@ linux_ldnmp() { -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server + duankou=3280 - reverse_proxy + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou - nginx_web_on ;; @@ -8637,15 +8775,11 @@ linux_ldnmp() { 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 + duankou=8010 + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou ;; @@ -8656,11 +8790,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -8695,11 +8831,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -9071,7 +9209,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9276,7 +9414,7 @@ while true; do local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" + local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" docker_app @@ -9547,7 +9685,7 @@ while true; do -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 - docker exec -it db mongosh --eval "printjson(rs.initiate())" + docker exec 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 @@ -10657,7 +10795,7 @@ while true; do docker_rum() { - docker run -it -d --name dpanel --restart=always \ + docker run -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 \ @@ -11056,7 +11194,7 @@ while true; do local docker_port=8068 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 + docker run -d --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 证书自动化管理平台" @@ -11819,7 +11957,7 @@ while true; do add_yuming if [ ! -d /home/docker/matrix/data ]; then - docker run -it --rm \ + docker run --rm \ -v /home/docker/matrix/data:/data \ -e SYNAPSE_SERVER_NAME=${yuming} \ -e SYNAPSE_REPORT_STATS=yes \ @@ -12169,7 +12307,7 @@ while true; do done ' - docker exec -it wireguard bash -c ' + docker exec wireguard bash -c ' for d in /config/peer_*; do cd "$d" || continue conf_file=$(ls *.conf) @@ -12183,7 +12321,7 @@ while true; do sleep 2 echo echo -e "${gl_huang}すべてのクライアント QR コード構成:${gl_bai}" - docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + docker exec wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}" @@ -12784,7 +12922,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12794,7 +12932,7 @@ linux_work() { 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}5. ${gl_bai}ワークスペースNo.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" @@ -13001,6 +13139,62 @@ switch_mirror() { } +fail2ban_panel() { + root_use + send_stats "SSH防御" + while true; do + + check_f2b_status + echo -e "SSH防御プログラム$check_f2b_status" + echo "failed2ban はブルート フォース クラッキングを防ぐ 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) + f2b_install_sshd + cd ~ + f2b_status + break_end + ;; + 2) + echo "------------------------" + f2b_sshd + echo "------------------------" + break_end + ;; + 3) + tail -f /var/log/fail2ban.log + break + ;; + 9) + remove fail2ban + rm -rf /etc/fail2ban + echo "Fail2Ban 防御プログラムがアンインストールされました" + break + ;; + *) + break + ;; + esac + done + +} + + + + + + linux_Settings() { @@ -13266,8 +13460,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -13480,7 +13674,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得する + # 現在のシステム時刻を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -13495,7 +13689,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13738,53 +13932,7 @@ EOF ;; 22) - root_use - send_stats "SSH防御" - while true; do - - check_f2b_status - echo -e "SSH防御プログラム$check_f2b_status" - echo "failed2ban はブルート フォース クラッキングを防ぐ 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) - f2b_install_sshd - cd ~ - f2b_status - break_end - ;; - 2) - echo "------------------------" - f2b_sshd - echo "------------------------" - break_end - ;; - 3) - tail -f /var/log/fail2ban.log - break - ;; - 9) - remove fail2ban - rm -rf /etc/fail2ban - echo "Fail2Ban 防御プログラムがアンインストールされました" - break - ;; - *) - break - ;; - esac - done + fail2ban_panel ;; @@ -14622,7 +14770,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS オファー${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14907,6 +15055,7 @@ echo "ブロック IP k zzip 177.5.25.36 |k ブロック IP 177.5.25.36" echo "コマンド お気に入り k お気に入り | k コマンドのお気に入り" echo "アプリケーションマーケット管理kアプリ" echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" +echo "フェイル 2 バン管理 k フェイル 2 バン | k f2b" echo "システム情報を表示 k info" } @@ -15139,8 +15288,14 @@ else linux_info ;; + fail2ban|f2b) + fail2ban_panel + ;; + *) k_info ;; esac fi + + diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 2fcfc8e66..b6ae7276f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.7" +sh_v="4.2.9" gl_hui='\e[37m' @@ -546,7 +546,7 @@ while true; do 11) send_stats "컨테이너를 입력하세요" read -e -p "컨테이너 이름을 입력하세요:" dockername - docker exec -it $dockername /bin/sh + docker exec $dockername /bin/sh break_end ;; 12) @@ -1197,7 +1197,7 @@ iptables_panel() { ;; 17) - read -e -p "삭제된 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code + read -e -p "지워진 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code manage_country_rules unblock $country_code send_stats "명확한 국가$country_codeIP" ;; @@ -1425,6 +1425,13 @@ install_certbot() { } + + + + + + + install_ssltls() { check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 @@ -1446,7 +1453,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi - docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ @@ -1483,7 +1490,7 @@ if [ -z "$yuming" ]; then fi install_docker install_certbot -docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null +docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text @@ -1538,16 +1545,32 @@ certs_status() { echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." echo -e "1. 도메인 이름이 잘못 입력되었습니다. ➠ 도메인 이름이 올바르게 입력되었는지 확인하세요." echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인" - echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." + echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하시기 바랍니다" echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." - break_end - clear - echo "다시 배포해 보세요.$webname" - add_yuming - install_ssltls - certs_status + echo "------------------------" + echo "1. 재적용 2. 인증서 없이 HTTP 접속으로 전환 0. 종료" + echo "------------------------" + read -e -p "선택사항을 입력하세요:" sub_choice + case $sub_choice in + 1) + send_stats "재신청" + echo "다시 배포해 보세요.$webname" + add_yuming + install_ssltls + certs_status + ;; + 2) + send_stats "인증서 없이 HTTP 액세스로 전환" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf + sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf + ;; + *) + exit + ;; + esac fi } @@ -1569,6 +1592,40 @@ add_yuming() { } +check_ip_and_get_access_port() { + local yuming="$1" + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + read -e -p "액세스/수신 포트를 입력하고 Enter를 눌러 기본적으로 80을 사용하십시오." access_port + access_port=${access_port:-80} + fi +} + + + +update_nginx_listen_port() { + local yuming="$1" + local access_port="$2" + local conf="/home/web/conf.d/${yuming}.conf" + + # access_port가 비어 있으면 건너뛰세요. + [ -z "$access_port" ] && return 0 + + # 모든 청취 라인 제거 + sed -i '/^[[:space:]]*listen[[:space:]]\+/d' "$conf" + + # 서버 { 뒤에 새 수신 대기 삽입 + sed -i "/server {/a\\ + listen ${access_port};\\ + listen [::]:${access_port}; +" "$conf" +} + + + add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" @@ -1579,17 +1636,6 @@ add_db() { 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_ldnmp() { docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 @@ -2153,7 +2199,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 고부하를 감지하면 자동으로 실드를 열고, 저부하를 감지하면 자동으로 5초 동안 실드를 닫습니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -3230,7 +3276,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" echo "------------------------" echo "$webname설치 정보는 다음과 같습니다." @@ -3238,10 +3284,21 @@ ldnmp_web_on() { } nginx_web_on() { - clear - echo "당신의$webname건설되었습니다!" - echo "https://$yuming" + clear + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + echo "당신의$webname건설되었습니다!" + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf + echo "http://$yuming:$access_port" + elif grep -q '^[[:space:]]*#.*if (\$scheme = http)' "/home/web/conf.d/"$yuming".conf"; then + echo "http://$yuming" + else + echo "https://$yuming" + fi } @@ -3258,14 +3315,16 @@ ldnmp_wp() { fi repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + install_ssltls + certs_status + add_db + cd /home/web/html mkdir $yuming cd $yuming @@ -3287,6 +3346,7 @@ ldnmp_wp() { } + ldnmp_Proxy() { clear webname="反向代理-IP+端口" @@ -3299,6 +3359,9 @@ ldnmp_Proxy() { if [ -z "$yuming" ]; then add_yuming fi + + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy" ]; then read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} @@ -3308,13 +3371,31 @@ ldnmp_Proxy() { read -e -p "안티 세대 포트를 입력하십시오:" port fi nginx_install_status + + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf + wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + install_ssltls certs_status - wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf - wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.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 - 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 + + reverseproxy_port="$reverseproxy:$port" + 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 + sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3332,16 +3413,21 @@ ldnmp_Proxy_backend() { add_yuming fi + check_ip_and_get_access_port "$yuming" + 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/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + + install_ssltls + certs_status + 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 @@ -3355,6 +3441,8 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3596,6 +3684,25 @@ ldnmp_web_status() { fi done + for conf_file in /home/web/conf.d/*_*.conf; do + [ -e "$conf_file" ] || continue + basename "$conf_file" .conf + done + + for conf_file in /home/web/conf.d/*.conf; do + [ -e "$conf_file" ] || continue + + filename=$(basename "$conf_file") + + if [ "$filename" = "map.conf" ] || [ "$filename" = "default.conf" ]; then + continue + fi + + if ! grep -q "ssl_certificate" "$conf_file"; then + basename "$conf_file" .conf + fi + done + echo "------------------------" echo "" echo -e "데이터 베이스:${db_output}" @@ -3628,7 +3735,7 @@ ldnmp_web_status() { 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 + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status @@ -3727,7 +3834,7 @@ ldnmp_web_status() { 20) web_del - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) @@ -5120,7 +5227,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" + echo "XanMod 커널이 업데이트되었습니다. 다시 시작한 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -5130,7 +5237,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" + echo "XanMod 커널이 제거되었습니다. 다시 시작한 후 적용" server_reboot ;; @@ -5184,7 +5291,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 다시 시작한 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -5273,7 +5380,7 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" + echo "elrepo 커널이 제거되었습니다. 다시 시작한 후 적용" send_stats "Red Hat 커널 제거" server_reboot @@ -5291,7 +5398,7 @@ elrepo() { echo "영상 소개: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat 시리즈 배포판 CentOS/RedHat/Alma/Rocky/oracle만 지원" - echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경을 주의해서 업그레이드하시는 것을 추천드립니다!" + echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경도 주의해서 업그레이드하시는 것을 추천드립니다!" echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5327,7 +5434,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5349,7 +5456,7 @@ clamav_scan() { > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # 도커 명령 실행 - docker run -it --rm \ + docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ @@ -6354,7 +6461,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -7202,7 +7309,7 @@ docker_ssh_migration() { # /home/docker 아래의 모든 파일을 백업합니다(하위 디렉터리 제외). if [ -d "/home/docker" ]; then - echo -e "${BLUE}/home/docker 아래의 파일을 백업합니다...${NC}" + echo -e "${BLUE}/home/docker 아래의 파일을 백업하세요...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 아래의 파일은 다음과 같이 패키지되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi @@ -7249,7 +7356,7 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]가 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7265,7 +7372,7 @@ docker_ssh_migration() { [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리 용기:$container${NC}" + echo -e "${GREEN}처리용기:$container${NC}" # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then @@ -7584,7 +7691,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7925,7 +8032,7 @@ linux_Oracle() { local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # Docker 컨테이너 실행 - docker run -itd --name=lookbusy --restart=always \ + docker run -d --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ @@ -8130,12 +8237,17 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8167,12 +8279,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8202,12 +8317,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8245,12 +8364,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8293,12 +8416,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini @@ -8348,12 +8474,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8386,13 +8516,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8422,12 +8555,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8556,12 +8692,15 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8591,14 +8730,16 @@ linux_ldnmp() { echo "배포 시작$webname" add_yuming echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" - read -e -p "역방향 프록시 도메인 이름을 입력하세요:" fandai_yuming + 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8614,9 +8755,6 @@ linux_ldnmp() { send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming - nginx_install_status - install_ssltls - certs_status docker run -d \ --name bitwarden \ @@ -8624,10 +8762,10 @@ linux_ldnmp() { -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server + duankou=3280 - reverse_proxy + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou - nginx_web_on ;; @@ -8637,15 +8775,11 @@ linux_ldnmp() { 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 + duankou=8010 + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou ;; @@ -8656,11 +8790,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -8695,11 +8831,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -9071,7 +9209,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9131,7 +9269,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" - echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawnix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" @@ -9276,7 +9414,7 @@ while true; do local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" + local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" docker_app @@ -9335,7 +9473,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "네자 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9415,7 +9553,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우정$check_docker $update_status" + echo -e "우편 서비스$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9547,7 +9685,7 @@ while true; do -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 - docker exec -it db mongosh --eval "printjson(rs.initiate())" + docker exec 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 @@ -10657,7 +10795,7 @@ while true; do docker_rum() { - docker run -it -d --name dpanel --restart=always \ + docker run -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 \ @@ -11056,7 +11194,7 @@ while true; do local docker_port=8068 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 + docker run -d --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 证书自动化管理平台" @@ -11819,7 +11957,7 @@ while true; do add_yuming if [ ! -d /home/docker/matrix/data ]; then - docker run -it --rm \ + docker run --rm \ -v /home/docker/matrix/data:/data \ -e SYNAPSE_SERVER_NAME=${yuming} \ -e SYNAPSE_REPORT_STATS=yes \ @@ -12169,7 +12307,7 @@ while true; do done ' - docker exec -it wireguard bash -c ' + docker exec wireguard bash -c ' for d in /config/peer_*; do cd "$d" || continue conf_file=$(ls *.conf) @@ -12183,7 +12321,7 @@ while true; do sleep 2 echo echo -e "${gl_huang}모든 클라이언트 QR 코드 구성:${gl_bai}" - docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + docker exec wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}모든 클라이언트 구성 코드:${gl_bai}" @@ -12794,7 +12932,7 @@ linux_work() { 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}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" @@ -13001,6 +13139,62 @@ switch_mirror() { } +fail2ban_panel() { + root_use + send_stats "SSH 방어" + while true; do + + check_f2b_status + echo -e "SSH 방어 프로그램$check_f2b_status" + echo "fall2ban은 무차별 대입 크래킹을 방지하는 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) + f2b_install_sshd + cd ~ + f2b_status + break_end + ;; + 2) + echo "------------------------" + f2b_sshd + echo "------------------------" + break_end + ;; + 3) + tail -f /var/log/fail2ban.log + break + ;; + 9) + remove fail2ban + rm -rf /etc/fail2ban + echo "Fail2Ban 방어 프로그램이 제거되었습니다." + break + ;; + *) + break + ;; + esac + done + +} + + + + + + linux_Settings() { @@ -13013,7 +13207,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -13266,8 +13460,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -13310,7 +13504,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "1G 가상 메모리가 설정되었습니다." add_swap 1024 ;; @@ -13568,7 +13762,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 + # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13738,53 +13932,7 @@ EOF ;; 22) - root_use - send_stats "SSH 방어" - while true; do - - check_f2b_status - echo -e "SSH 방어 프로그램$check_f2b_status" - echo "fall2ban은 무차별 대입 크래킹을 방지하는 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) - f2b_install_sshd - cd ~ - f2b_status - break_end - ;; - 2) - echo "------------------------" - f2b_sshd - echo "------------------------" - break_end - ;; - 3) - tail -f /var/log/fail2ban.log - break - ;; - 9) - remove fail2ban - rm -rf /etc/fail2ban - echo "Fail2Ban 방어 프로그램이 제거되었습니다." - break - ;; - *) - break - ;; - esac - done + fail2ban_panel ;; @@ -14622,7 +14770,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 혜택${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14907,6 +15055,7 @@ echo "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" echo "애플리케이션 시장 관리 k app" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" +echo "Fail2ban 관리 k Fail2ban | 케이 F2B" echo "시스템 정보 표시 k 정보" } @@ -15139,8 +15288,14 @@ else linux_info ;; + fail2ban|f2b) + fail2ban_panel + ;; + *) k_info ;; esac fi + + diff --git a/tw/kejilion.sh b/tw/kejilion.sh index c8f9f2a9e..de76654f6 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.7" +sh_v="4.2.9" gl_hui='\e[37m' @@ -546,7 +546,7 @@ while true; do 11) send_stats "進入容器" read -e -p "請輸入容器名:" dockername - docker exec -it $dockername /bin/sh + docker exec $dockername /bin/sh break_end ;; 12) @@ -1425,6 +1425,13 @@ install_certbot() { } + + + + + + + install_ssltls() { check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 @@ -1446,7 +1453,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi - docker run -it --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi mkdir -p /home/web/certs/ @@ -1483,7 +1490,7 @@ if [ -z "$yuming" ]; then fi install_docker install_certbot -docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null +docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status install_ssltls_text @@ -1542,12 +1549,28 @@ certs_status() { echo -e "4. 防火牆限制 ➠ 檢查80/443端口是否開放,確保驗證可訪問" echo -e "5. 申請次數超限 ➠ Let's Encrypt有每週限額(5次/域名/週)" echo -e "6. 國內備案限制 ➠ 中國大陸環境請確認域名是否備案" - break_end - clear - echo "請再次嘗試部署$webname" - add_yuming - install_ssltls - certs_status + echo "------------------------" + echo "1. 重新申請 2. 不帶證書改用HTTP訪問 0. 退出" + echo "------------------------" + read -e -p "請輸入你的選擇:" sub_choice + case $sub_choice in + 1) + send_stats "重新申請" + echo "請再次嘗試部署$webname" + add_yuming + install_ssltls + certs_status + ;; + 2) + send_stats "不帶證書改用HTTP訪問" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf + sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf + ;; + *) + exit + ;; + esac fi } @@ -1569,6 +1592,40 @@ add_yuming() { } +check_ip_and_get_access_port() { + local yuming="$1" + + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + read -e -p "請輸入訪問/監聽端口,回車默認使用 80:" access_port + access_port=${access_port:-80} + fi +} + + + +update_nginx_listen_port() { + local yuming="$1" + local access_port="$2" + local conf="/home/web/conf.d/${yuming}.conf" + + # 如果 access_port 為空,則跳過 + [ -z "$access_port" ] && return 0 + + # 刪除所有 listen 行 + sed -i '/^[[:space:]]*listen[[:space:]]\+/d' "$conf" + + # 在 server { 後插入新的 l​​isten + sed -i "/server {/a\\ + listen ${access_port};\\ + listen [::]:${access_port}; +" "$conf" +} + + + add_db() { dbname=$(echo "$yuming" | sed -e 's/[^A-Za-z0-9]/_/g') dbname="${dbname}" @@ -1579,17 +1636,6 @@ add_db() { 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_ldnmp() { docker exec nginx chown -R nginx:nginx /var/www/html > /dev/null 2>&1 @@ -3238,10 +3284,21 @@ ldnmp_web_on() { } nginx_web_on() { - clear - echo "您的$webname搭建好了!" - echo "https://$yuming" + clear + local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' + local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' + + echo "您的$webname搭建好了!" + + if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then + mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf + echo "http://$yuming:$access_port" + elif grep -q '^[[:space:]]*#.*if (\$scheme = http)' "/home/web/conf.d/"$yuming".conf"; then + echo "http://$yuming" + else + echo "https://$yuming" + fi } @@ -3258,14 +3315,16 @@ ldnmp_wp() { fi repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + install_ssltls + certs_status + add_db + cd /home/web/html mkdir $yuming cd $yuming @@ -3287,6 +3346,7 @@ ldnmp_wp() { } + ldnmp_Proxy() { clear webname="反向代理-IP+端口" @@ -3299,6 +3359,9 @@ ldnmp_Proxy() { if [ -z "$yuming" ]; then add_yuming fi + + check_ip_and_get_access_port "$yuming" + if [ -z "$reverseproxy" ]; then read -e -p "請輸入你的反代IP (回車默認本機IP 127.0.0.1):" reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} @@ -3308,13 +3371,31 @@ ldnmp_Proxy() { read -e -p "請輸入你的反代端口:" port fi nginx_install_status + + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf + wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + install_ssltls certs_status - wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf - wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy.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 - 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 + + reverseproxy_port="$reverseproxy:$port" + 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 + sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3332,16 +3413,21 @@ ldnmp_Proxy_backend() { add_yuming fi + check_ip_and_get_access_port "$yuming" + 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/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + + install_ssltls + certs_status + 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 @@ -3355,6 +3441,8 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + update_nginx_listen_port "$yuming" "$access_port" + nginx_http_on docker exec nginx nginx -s reload nginx_web_on @@ -3596,6 +3684,25 @@ ldnmp_web_status() { fi done + for conf_file in /home/web/conf.d/*_*.conf; do + [ -e "$conf_file" ] || continue + basename "$conf_file" .conf + done + + for conf_file in /home/web/conf.d/*.conf; do + [ -e "$conf_file" ] || continue + + filename=$(basename "$conf_file") + + if [ "$filename" = "map.conf" ] || [ "$filename" = "default.conf" ]; then + continue + fi + + if ! grep -q "ssl_certificate" "$conf_file"; then + basename "$conf_file" .conf + fi + done + echo "------------------------" echo "" echo -e "資料庫:${db_output}" @@ -3628,7 +3735,7 @@ ldnmp_web_status() { 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 + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null install_ssltls certs_status @@ -3727,7 +3834,7 @@ ldnmp_web_status() { 20) web_del - docker run -it --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n 2>/dev/null ;; *) @@ -5349,7 +5456,7 @@ clamav_scan() { > /home/docker/clamav/log/scan.log > /dev/null 2>&1 # 執行 Docker 命令 - docker run -it --rm \ + docker run --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ $MOUNT_PARAMS \ @@ -7925,7 +8032,7 @@ linux_Oracle() { local speedtest_interval=${speedtest_interval:-$DEFAULT_SPEEDTEST_INTERVAL} # 運行Docker容器 - docker run -itd --name=lookbusy --restart=always \ + docker run -d --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ -e CPU_CORE="$cpu_core" \ @@ -8130,12 +8237,17 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8167,12 +8279,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8202,12 +8317,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8245,12 +8364,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + + nginx_http_on cd /home/web/html @@ -8293,12 +8416,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on docker exec php rm -f /usr/local/etc/php/conf.d/optimized_php.ini @@ -8348,12 +8474,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8386,13 +8516,16 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8422,12 +8555,15 @@ linux_ldnmp() { add_yuming repeat_add_yuming ldnmp_install_status - install_ssltls - certs_status - add_db + wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf 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 + + install_ssltls + certs_status + add_db + nginx_http_on cd /home/web/html @@ -8556,12 +8692,15 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8593,12 +8732,14 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on docker exec nginx nginx -s reload @@ -8614,9 +8755,6 @@ linux_ldnmp() { send_stats "安裝$webname" echo "開始部署$webname" add_yuming - nginx_install_status - install_ssltls - certs_status docker run -d \ --name bitwarden \ @@ -8624,10 +8762,10 @@ linux_ldnmp() { -p 3280:80 \ -v /home/web/html/$yuming/bitwarden/data:/data \ vaultwarden/server + duankou=3280 - reverse_proxy + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou - nginx_web_on ;; @@ -8637,15 +8775,11 @@ linux_ldnmp() { 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 + duankou=8010 + ldnmp_Proxy ${yuming} 127.0.0.1 $duankou ;; @@ -8656,11 +8790,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -8695,11 +8831,13 @@ linux_ldnmp() { 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 + + install_ssltls + certs_status + nginx_http_on cd /home/web/html @@ -9276,7 +9414,7 @@ while true; do local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" - local docker_use="docker exec -it openlist ./openlist admin random" + local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" docker_app @@ -9547,7 +9685,7 @@ while true; do -v /home/docker/mongo/dump:/dump \ mongo:latest --replSet rs5 --oplogSize 256 sleep 1 - docker exec -it db mongosh --eval "printjson(rs.initiate())" + docker exec 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 @@ -10657,7 +10795,7 @@ while true; do docker_rum() { - docker run -it -d --name dpanel --restart=always \ + docker run -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 \ @@ -11056,7 +11194,7 @@ while true; do local docker_port=8068 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 + docker run -d --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 证书自动化管理平台" @@ -11819,7 +11957,7 @@ while true; do add_yuming if [ ! -d /home/docker/matrix/data ]; then - docker run -it --rm \ + docker run --rm \ -v /home/docker/matrix/data:/data \ -e SYNAPSE_SERVER_NAME=${yuming} \ -e SYNAPSE_REPORT_STATS=yes \ @@ -12169,7 +12307,7 @@ while true; do done ' - docker exec -it wireguard bash -c ' + docker exec wireguard bash -c ' for d in /config/peer_*; do cd "$d" || continue conf_file=$(ls *.conf) @@ -12183,7 +12321,7 @@ while true; do sleep 2 echo echo -e "${gl_huang}所有客戶端二維碼配置:${gl_bai}" - docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' + docker exec wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done' sleep 2 echo echo -e "${gl_huang}所有客戶端配置代碼:${gl_bai}" @@ -13001,6 +13139,62 @@ switch_mirror() { } +fail2ban_panel() { + root_use + send_stats "ssh防禦" + while true; do + + check_f2b_status + echo -e "SSH防禦程序$check_f2b_status" + 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) + f2b_install_sshd + cd ~ + f2b_status + break_end + ;; + 2) + echo "------------------------" + f2b_sshd + echo "------------------------" + break_end + ;; + 3) + tail -f /var/log/fail2ban.log + break + ;; + 9) + remove fail2ban + rm -rf /etc/fail2ban + echo "Fail2Ban防禦程序已卸載" + break + ;; + *) + break + ;; + esac + done + +} + + + + + + linux_Settings() { @@ -13738,53 +13932,7 @@ EOF ;; 22) - root_use - send_stats "ssh防禦" - while true; do - - check_f2b_status - echo -e "SSH防禦程序$check_f2b_status" - 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) - f2b_install_sshd - cd ~ - f2b_status - break_end - ;; - 2) - echo "------------------------" - f2b_sshd - echo "------------------------" - break_end - ;; - 3) - tail -f /var/log/fail2ban.log - break - ;; - 9) - remove fail2ban - rm -rf /etc/fail2ban - echo "Fail2Ban防禦程序已卸載" - break - ;; - *) - break - ;; - esac - done + fail2ban_panel ;; @@ -14907,6 +15055,7 @@ echo "阻止IP k zzip 177.5.25.36 |k 阻止IP 177.5.25.36" echo "命令收藏夾 k fav | k 命令收藏夾" echo "應用市場管理 k app" echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" +echo "fail2ban管理 k fail2ban | k f2b" echo "顯示系統信息 k info" } @@ -15139,8 +15288,14 @@ else linux_info ;; + fail2ban|f2b) + fail2ban_panel + ;; + *) k_info ;; esac fi + + From ac9eef3f2076e3c18e722d760b3a293f83bde8ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:14:23 +0800 Subject: [PATCH 441/553] Add ConvertX multi-format conversion tool --- cn/kejilion.sh | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8105a0cb3..0b5785cb4 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1568,7 +1568,8 @@ certs_status() { sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf ;; *) - exit + send_stats "退出申请" + exit ;; esac fi @@ -9273,6 +9274,8 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -12822,8 +12825,30 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 111|convertx) + + local app_id="111" + local docker_name="convertx" + local docker_img="ghcr.io/c4illin/convertx:latest" + local docker_port=8111 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:3000 \ + -v /home/docker/convertx:/app/data \ + ${docker_img} + + } + local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" + local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app + ;; From f38259d620489e4701fa21ffe3bf472941908438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:15:16 +0800 Subject: [PATCH 442/553] Add ConvertX multi-format conversion tool --- kejilion.sh | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index ee7500831..11ebad49b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1568,7 +1568,8 @@ certs_status() { sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf ;; *) - exit + send_stats "退出申请" + exit ;; esac fi @@ -9273,6 +9274,8 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -12822,8 +12825,30 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 111|convertx) + + local app_id="111" + local docker_name="convertx" + local docker_img="ghcr.io/c4illin/convertx:latest" + local docker_port=8111 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:3000 \ + -v /home/docker/convertx:/app/data \ + ${docker_img} + + } + local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" + local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app + ;; From 33b0df8e62947661b8329247b5a3cd60f2d511b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:17:19 +0800 Subject: [PATCH 443/553] Update changelog with ConvertX tool details Added information about ConvertX file conversion tool. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index de8ca8a1e..810ac1c41 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1382,6 +1382,7 @@ nginx反向代理优化,定义upstream和keepalive提升后端连接性能和 2025-12-19 v4.2.9 nginx反向代理和负载均衡支持IP自定义监听端口功能,可实现反代内部IP加端口到网关的效果, SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问或者中断申请。 +应用市场新增了ConvertX全能文件转换工具的安装及使用。 ------------------------ From 0148da2cba7cf8386d48eb6e0929925ef2a25ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:17:40 +0800 Subject: [PATCH 444/553] Update version and add certificate import option --- cn/kejilion.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0b5785cb4..2f77f95b8 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.9" +sh_v="4.2.10" gl_hui='\e[37m' @@ -1550,7 +1550,7 @@ certs_status() { echo -e "5. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" echo "------------------------" - echo "1. 重新申请 2. 不带证书改用HTTP访问 0. 退出" + echo "1. 重新申请 2. 导入已有证书 3. 不带证书改用HTTP访问 0. 退出" echo "------------------------" read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -1560,8 +1560,56 @@ certs_status() { add_yuming install_ssltls certs_status + ;; 2) + send_stats "导入已有证书" + + # 定义文件路径 + local cert_file="/home/web/certs/${yuming}_cert.pem" + local key_file="/home/web/certs/${yuming}_key.pem" + + mkdir -p /home/web/certs + + # 1. 输入证书 (ECC 和 RSA 证书开头都是 BEGIN CERTIFICATE) + echo "请粘贴 证书 (CRT/PEM) 内容 (按两次回车结束):" + local cert_content="" + while IFS= read -r line; do + [[ -z "$line" && "$cert_content" == *"-----BEGIN"* ]] && break + cert_content+="${line}"$'\n' + done + + # 2. 输入私钥 (兼容 RSA, ECC, PKCS#8) + echo "请粘贴 证书私钥 (Private Key) 内容 (按两次回车结束):" + local key_content="" + while IFS= read -r line; do + [[ -z "$line" && "$key_content" == *"-----BEGIN"* ]] && break + key_content+="${line}"$'\n' + done + + # 3. 智能校验 + # 只要包含 "BEGIN CERTIFICATE" 和 "PRIVATE KEY" 即可通过 + if [[ "$cert_content" == *"-----BEGIN CERTIFICATE-----"* && "$key_content" == *"PRIVATE KEY-----"* ]]; then + echo -n "$cert_content" > "$cert_file" + echo -n "$key_content" > "$key_file" + + chmod 644 "$cert_file" + chmod 600 "$key_file" + + # 识别当前证书类型并显示 + if [[ "$key_content" == *"EC PRIVATE KEY"* ]]; then + echo "检测到 ECC 证书已成功保存。" + else + echo "检测到 RSA 证书已成功保存。" + fi + auth_method="ssl_imported" + else + echo "错误:无效的证书或私钥格式!" + return 1 + fi + + ;; + 3) send_stats "不带证书改用HTTP访问" sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf From 8477fb1e1f3f0b1cc0ce711b1fd7adcff172f493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:21:28 +0800 Subject: [PATCH 445/553] Update error handling in kejilion.sh Replace return statement with certs_status call on error. --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2f77f95b8..2411ba2fa 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1605,7 +1605,7 @@ certs_status() { auth_method="ssl_imported" else echo "错误:无效的证书或私钥格式!" - return 1 + certs_status fi ;; From df836fbaaf024a6013b7472e759fab15eec8e2e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:22:05 +0800 Subject: [PATCH 446/553] Enhance SSL handling with certificate import option Added option to import existing SSL certificates and keys. --- kejilion.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 11ebad49b..e3c83a5ae 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.9" +sh_v="4.2.10" gl_hui='\e[37m' @@ -1550,7 +1550,7 @@ certs_status() { echo -e "5. 申请次数超限 ➠ Let's Encrypt有每周限额(5次/域名/周)" echo -e "6. 国内备案限制 ➠ 中国大陆环境请确认域名是否备案" echo "------------------------" - echo "1. 重新申请 2. 不带证书改用HTTP访问 0. 退出" + echo "1. 重新申请 2. 导入已有证书 3. 不带证书改用HTTP访问 0. 退出" echo "------------------------" read -e -p "请输入你的选择: " sub_choice case $sub_choice in @@ -1560,8 +1560,56 @@ certs_status() { add_yuming install_ssltls certs_status + ;; 2) + send_stats "导入已有证书" + + # 定义文件路径 + local cert_file="/home/web/certs/${yuming}_cert.pem" + local key_file="/home/web/certs/${yuming}_key.pem" + + mkdir -p /home/web/certs + + # 1. 输入证书 (ECC 和 RSA 证书开头都是 BEGIN CERTIFICATE) + echo "请粘贴 证书 (CRT/PEM) 内容 (按两次回车结束):" + local cert_content="" + while IFS= read -r line; do + [[ -z "$line" && "$cert_content" == *"-----BEGIN"* ]] && break + cert_content+="${line}"$'\n' + done + + # 2. 输入私钥 (兼容 RSA, ECC, PKCS#8) + echo "请粘贴 证书私钥 (Private Key) 内容 (按两次回车结束):" + local key_content="" + while IFS= read -r line; do + [[ -z "$line" && "$key_content" == *"-----BEGIN"* ]] && break + key_content+="${line}"$'\n' + done + + # 3. 智能校验 + # 只要包含 "BEGIN CERTIFICATE" 和 "PRIVATE KEY" 即可通过 + if [[ "$cert_content" == *"-----BEGIN CERTIFICATE-----"* && "$key_content" == *"PRIVATE KEY-----"* ]]; then + echo -n "$cert_content" > "$cert_file" + echo -n "$key_content" > "$key_file" + + chmod 644 "$cert_file" + chmod 600 "$key_file" + + # 识别当前证书类型并显示 + if [[ "$key_content" == *"EC PRIVATE KEY"* ]]; then + echo "检测到 ECC 证书已成功保存。" + else + echo "检测到 RSA 证书已成功保存。" + fi + auth_method="ssl_imported" + else + echo "错误:无效的证书或私钥格式!" + certs_status + fi + + ;; + 3) send_stats "不带证书改用HTTP访问" sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf From b12afa09d3b61211def5eb48a514598d9ba7d455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:24:25 +0800 Subject: [PATCH 447/553] Update kejilion_sh_log.txt --- kejilion_sh_log.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 810ac1c41..c02015e99 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1384,5 +1384,8 @@ nginx反向代理和负载均衡支持IP自定义监听端口功能,可实现 SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问或者中断申请。 应用市场新增了ConvertX全能文件转换工具的安装及使用。 ------------------------ +2025-12-24 v4.2.10 +SSL申请失败后追加已有证书导入选项,你可以导入域名有效证书如CF15年证书使用。 +------------------------ From e96eaf1302654edfadfeea392837c8bc729be902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:33:48 +0800 Subject: [PATCH 448/553] Update SSL certificate import option description --- kejilion_sh_log.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index c02015e99..2d2473b91 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1385,7 +1385,7 @@ SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问 应用市场新增了ConvertX全能文件转换工具的安装及使用。 ------------------------ 2025-12-24 v4.2.10 -SSL申请失败后追加已有证书导入选项,你可以导入域名有效证书如CF15年证书使用。 +SSL申请失败后追加导入已有证书选项,你可以导入域名有效证书使用了(如CF15年证书)。 ------------------------ From d579da10df52f735c06fbf4fb72b857c8cfed041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:59:33 +0800 Subject: [PATCH 449/553] Update kejilion.sh --- cn/kejilion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2411ba2fa..2edb9a057 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13196,6 +13196,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode else echo "使用官方镜像源..." @@ -13207,6 +13208,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode fi } From fcaa50edf4578ca6338f388a1b286fd1300af2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 11:00:17 +0800 Subject: [PATCH 450/553] Add --install-epel option to installation commands --- kejilion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index e3c83a5ae..33f670e46 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13196,6 +13196,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode else echo "使用官方镜像源..." @@ -13207,6 +13208,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode fi } From 80c4ba3017809e71e143ca936541028eb8fa1757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 11:12:54 +0800 Subject: [PATCH 451/553] Update translate.yml --- .github/workflows/translate.yml | 103 +++++++++++++++----------------- 1 file changed, 47 insertions(+), 56 deletions(-) diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml index a8f525880..6e2d6b7de 100644 --- a/.github/workflows/translate.yml +++ b/.github/workflows/translate.yml @@ -1,4 +1,3 @@ - name: Weekly Translation Workflow on: @@ -7,11 +6,9 @@ on: - cron: '0 2 * * 0' workflow_dispatch: # 允许手动触发 - permissions: contents: write - jobs: translate: runs-on: ubuntu-latest @@ -50,6 +47,8 @@ jobs: return bool(re.search(r'[\u4e00-\u9fff]', text)) def translate_text(text, target_lang): + if not text.strip() or not is_chinese(text): + return text try: return GoogleTranslator(source='zh-CN', target=target_lang).translate(text) except Exception as e: @@ -58,14 +57,13 @@ jobs: def translate_line_preserving_variables(line, target_lang): """ - Translate only Chinese parts in echo/read/send_stats commands, excluding shell variables + 处理 echo/read/send_stats 等命令中的中文,同时保护其中的 ${var} """ - # Match double or single quoted strings def repl(match): full_string = match.group(0) quote = full_string[0] content = full_string[1:-1] - # Split by variable expressions + # 分割出变量,只翻译非变量部分 parts = re.split(r'(\$\{?\w+\}?)', content) translated_parts = [ translate_text(p, target_lang) if is_chinese(p) else p @@ -74,6 +72,24 @@ jobs: return quote + ''.join(translated_parts) + quote return re.sub(r'(?:\'[^\']*\'|"[^"]*")', repl, line) + + def translate_assignment_value(line, target_lang): + """ + 专门处理变量赋值语句:VAR="中文内容" -> VAR="Translated Content" + """ + # 匹配 key="value" 或 key='value' 格式,且 value 包含中文 + match = re.match(r'^(\s*[a-zA-Z_][a-zA-Z0-9_]*\s*=\s*)([\'"])(.*)([\'"])(.*)$', line) + if match: + prefix, quote_open, value, quote_close, suffix = match.groups() + if is_chinese(value): + # 同样要保护赋值内容里的 ${var} + parts = re.split(r'(\$\{?\w+\}?)', value) + translated_value = "".join([ + translate_text(p, target_lang) if is_chinese(p) else p + for p in parts + ]) + return f"{prefix}{quote_open}{translated_value}{quote_close}{suffix}\n" + return line def translate_file(input_file, output_file, target_lang): print(f"Translating to {target_lang}...") @@ -82,70 +98,60 @@ jobs: print(f"Error: Input file {input_file} not found") return False - total_lines = sum(1 for _ in open(input_file, 'r', encoding='utf-8')) - processed_lines = 0 + with open(input_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + total_lines = len(lines) - with open(input_file, 'r', encoding='utf-8') as f_in, \ - open(output_file, 'w', encoding='utf-8') as f_out: - - for line in f_in: - processed_lines += 1 - progress = processed_lines / total_lines * 100 - print(f"\rProcessing: {progress:.1f}% ({processed_lines}/{total_lines})", end='') + with open(output_file, 'w', encoding='utf-8') as f_out: + for i, line in enumerate(lines): + progress = (i + 1) / total_lines * 100 + print(f"\rProcessing: {progress:.1f}% ({i+1}/{total_lines})", end='') leading_space = re.match(r'^(\s*)', line).group(1) stripped = line.strip() + # 1. 处理注释 if stripped.startswith('#') and is_chinese(stripped): - comment_mark = '#' comment_text = stripped[1:].strip() if comment_text: translated = translate_text(comment_text, target_lang) - f_out.write(f"{leading_space}{comment_mark} {translated}\n") + f_out.write(f"{leading_space}# {translated}\n") else: f_out.write(line) + + # 2. 处理常用交互命令 elif any(cmd in stripped for cmd in ['echo', 'read', 'send_stats']) and is_chinese(stripped): - translated_line = translate_line_preserving_variables(line, target_lang) - f_out.write(translated_line) + f_out.write(translate_line_preserving_variables(line, target_lang)) + + # 3. 处理变量赋值中的中文 (新增强化) + elif '=' in stripped and is_chinese(stripped): + f_out.write(translate_assignment_value(line, target_lang)) + + # 4. 其他行原样保留 else: f_out.write(line) print(f"\nTranslation to {target_lang} completed.") - print(f"Original file size: {os.path.getsize(input_file)} bytes") - print(f"Translated file size: {os.path.getsize(output_file)} bytes") return True if __name__ == "__main__": input_file = 'kejilion.sh' - - # 语言映射:目录名 -> Google翻译语言代码 - languages = { - 'en': 'en', # 英语 - 'tw': 'zh-TW', # 繁体中文 - 'kr': 'ko', # 韩语 - 'jp': 'ja' # 日语 - } + languages = {'en': 'en', 'tw': 'zh-TW', 'kr': 'ko', 'jp': 'ja'} success_count = 0 - for dir_name, lang_code in languages.items(): output_file = f'{dir_name}/kejilion.sh' if translate_file(input_file, output_file, lang_code): success_count += 1 - print(f"✓ Successfully translated to {dir_name}") - else: - print(f"✗ Failed to translate to {dir_name}") - print("-" * 50) - - print(f"\nTranslation summary: {success_count}/{len(languages)} languages completed") + print(f"✓ {dir_name} done") + print("-" * 30) - if success_count == 0: - sys.exit(1) + if success_count == 0: sys.exit(1) EOF - name: Run translation - run: | - python translate.py + run: python translate.py - name: Check for changes id: check_changes @@ -162,7 +168,6 @@ jobs: run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git add . git commit -m "🌐 Weekly translation update - $(date +'%Y-%m-%d %H:%M:%S')" git push env: @@ -172,26 +177,12 @@ jobs: if: always() run: | echo "## Translation Summary 📊" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY echo "| Language | Directory | Status |" >> $GITHUB_STEP_SUMMARY echo "|----------|-----------|--------|" >> $GITHUB_STEP_SUMMARY - for dir in en tw kr jp; do if [ -f "$dir/kejilion.sh" ]; then - size=$(stat -c%s "$dir/kejilion.sh") - echo "| $dir | /$dir/ | ✅ Success (${size} bytes) |" >> $GITHUB_STEP_SUMMARY + echo "| $dir | /$dir/ | ✅ Success |" >> $GITHUB_STEP_SUMMARY else echo "| $dir | /$dir/ | ❌ Failed |" >> $GITHUB_STEP_SUMMARY fi done - - echo "" >> $GITHUB_STEP_SUMMARY - echo "**Execution time:** $(date)" >> $GITHUB_STEP_SUMMARY - - if [ "${{ steps.check_changes.outputs.has_changes }}" == "true" ]; then - echo "**Changes:** New translations committed and pushed" >> $GITHUB_STEP_SUMMARY - else - echo "**Changes:** No changes detected" >> $GITHUB_STEP_SUMMARY - fi - - From 20c390fb2bec962bd25a16b2c4061c9fbb0c15b1 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 24 Dec 2025 04:53:06 +0000 Subject: [PATCH 452/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-12-24=2004:53:06?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 157 ++++++++++++++++++++-------- jp/kejilion.sh | 275 +++++++++++++++++++++++++++++++------------------ kr/kejilion.sh | 199 ++++++++++++++++++++++++----------- translate.py | 80 +++++++------- tw/kejilion.sh | 135 ++++++++++++++++++------ 5 files changed, 578 insertions(+), 268 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 807db858c..a6159b887 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.9" +sh_v="4.2.10" gl_hui='\e[37m' @@ -881,7 +881,7 @@ close_port() { iptables -D INPUT -p tcp --dport $port -j ACCEPT 2>/dev/null iptables -D INPUT -p udp --dport $port -j ACCEPT 2>/dev/null - # Add a shutdown rule + # Add shutdown rule 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 @@ -1550,7 +1550,7 @@ certs_status() { echo -e "5. The number of applications exceeds the limit ➠ Let's Encrypt has a weekly limit (5 times/domain name/week)" echo -e "6. Domestic registration restrictions ➠ For mainland China environment, please confirm whether the domain name is registered" echo "------------------------" - echo "1. Reapply 2. Switch to HTTP access without certificate 0. Exit" + echo "1. Apply again 2. Import the existing certificate 3. Use HTTP access without certificate 0. Exit" echo "------------------------" read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -1560,15 +1560,64 @@ certs_status() { add_yuming install_ssltls certs_status + ;; 2) + send_stats "Import existing certificate" + + # Define file path + local cert_file="/home/web/certs/${yuming}_cert.pem" + local key_file="/home/web/certs/${yuming}_key.pem" + + mkdir -p /home/web/certs + + # 1. Enter the certificate (both ECC and RSA certificates start with BEGIN CERTIFICATE) + echo "Please paste the certificate (CRT/PEM) content (press Enter twice to end):" + local cert_content="" + while IFS= read -r line; do + [[ -z "$line" && "$cert_content" == *"-----BEGIN"* ]] && break + cert_content+="${line}"$'\n' + done + + # 2. Enter the private key (compatible with RSA, ECC, PKCS#8) + echo "Please paste the certificate private key (Private Key) content (press Enter twice to end):" + local key_content="" + while IFS= read -r line; do + [[ -z "$line" && "$key_content" == *"-----BEGIN"* ]] && break + key_content+="${line}"$'\n' + done + + # 3. Intelligent verification + # Just include "BEGIN CERTIFICATE" and "PRIVATE KEY" to pass + if [[ "$cert_content" == *"-----BEGIN CERTIFICATE-----"* && "$key_content" == *"PRIVATE KEY-----"* ]]; then + echo -n "$cert_content" > "$cert_file" + echo -n "$key_content" > "$key_file" + + chmod 644 "$cert_file" + chmod 600 "$key_file" + + # Identify the current certificate type and display it + if [[ "$key_content" == *"EC PRIVATE KEY"* ]]; then + echo "Detected that the ECC certificate was saved successfully." + else + echo "Detected that the RSA certificate was saved successfully." + fi + auth_method="ssl_imported" + else + echo "Error: Invalid certificate or private key format!" + certs_status + fi + + ;; + 3) send_stats "Switch to HTTP access without a certificate" sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf ;; *) - exit + send_stats "Withdraw application" + exit ;; esac fi @@ -1813,7 +1862,7 @@ 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已开启" + waf_status="WAF is turned on" else waf_status="" fi @@ -1822,7 +1871,7 @@ check_waf_status() { check_cf_mode() { if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then - CFmessage=" cf模式已开启" + CFmessage="cf mode is on" else CFmessage="" fi @@ -2269,9 +2318,9 @@ check_ldnmp_mode() { # Check if MySQL configuration file contains 4096M if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then - mode_info=" 高性能模式" + mode_info="High performance mode" else - mode_info=" 标准模式" + mode_info="Standard mode" fi @@ -2285,21 +2334,21 @@ check_nginx_compression() { # Check whether zstd is on and uncommented (the whole line starts with zstd on;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status=" zstd压缩已开启" + zstd_status="zstd compression is on" else zstd_status="" fi # Check if brotli is enabled and uncommented if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then - br_status=" br压缩已开启" + br_status="brCompression is on" else br_status="" fi # Check if gzip is enabled and uncommented if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then - gzip_status=" gzip压缩已开启" + gzip_status="gzip compression is on" else gzip_status="" fi @@ -2452,9 +2501,9 @@ web_optimization() { check_docker_app() { if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then - check_docker="${gl_lv}已安装${gl_bai}" + check_docker="${gl_lv}Installed${gl_bai}" else - check_docker="${gl_hui}未安装${gl_bai}" + check_docker="${gl_hui}Not installed${gl_bai}" fi } @@ -2537,7 +2586,7 @@ check_docker_image_update() { # Compare timestamps if [[ $container_created_ts -lt $last_updated_ts ]]; then - update_status="${gl_huang}发现新版本!${gl_bai}" + update_status="${gl_huang}New version found!${gl_bai}" else update_status="" fi @@ -3112,9 +3161,9 @@ f2b_status_xxx() { check_f2b_status() { if command -v fail2ban-client >/dev/null 2>&1; then - check_f2b_status="${gl_lv}已安装${gl_bai}" + check_f2b_status="${gl_lv}Installed${gl_bai}" else - check_f2b_status="${gl_hui}未安装${gl_bai}" + check_f2b_status="${gl_hui}Not installed${gl_bai}" fi } @@ -3349,7 +3398,7 @@ ldnmp_wp() { ldnmp_Proxy() { clear - webname="反向代理-IP+端口" + webname="Reverse proxy-IP+port" yuming="${1:-}" reverseproxy="${2:-}" port="${3:-}" @@ -3405,7 +3454,7 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear - webname="反向代理-负载均衡" + webname="Reverse proxy-load balancing" send_stats "Install$webname" echo "Start deployment$webname" @@ -3579,7 +3628,7 @@ stream_panel() { ldnmp_Proxy_backend_stream() { clear - webname="Stream四层代理-负载均衡" + webname="Stream four-layer proxy-load balancing" send_stats "Install$webname" echo "Start deployment$webname" @@ -3849,7 +3898,7 @@ ldnmp_web_status() { check_panel_app() { if $lujing > /dev/null 2>&1; then - check_panel="${gl_lv}已安装${gl_bai}" + check_panel="${gl_lv}Installed${gl_bai}" else check_panel="" fi @@ -3910,9 +3959,9 @@ done check_frp_app() { if [ -d "/home/frp/" ]; then - check_frp="${gl_lv}已安装${gl_bai}" + check_frp="${gl_lv}Installed${gl_bai}" else - check_frp="${gl_hui}未安装${gl_bai}" + check_frp="${gl_hui}Not installed${gl_bai}" fi } @@ -4845,7 +4894,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -5933,9 +5982,9 @@ linux_trash() { local trash_status if ! grep -q "trash-put" "$bashrc_profile"; then - trash_status="${gl_hui}未启用${gl_bai}" + trash_status="${gl_hui}Not enabled${gl_bai}" else - trash_status="${gl_lv}已启用${gl_bai}" + trash_status="${gl_lv}Enabled${gl_bai}" fi clear @@ -7297,7 +7346,7 @@ docker_ssh_migration() { local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done - # Mirror + # mirror local IMAGE IMAGE=$(jq -r '.[0].Config.Image' "$inspect_file") @@ -8211,8 +8260,8 @@ linux_ldnmp() { echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up site-wide data" echo -e "${gl_huang}33. ${gl_bai}Scheduled remote backup${gl_huang}34. ${gl_bai}Restore whole site data" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}35. ${gl_bai}Protect LDNMP environments${gl_huang}36. ${gl_bai}Optimize LDNMP environment" - echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall the LDNMP environment" + echo -e "${gl_huang}35. ${gl_bai}防护LDNMP环境 ${gl_huang}36. ${gl_bai}Optimize LDNMP environment" + echo -e "${gl_huang}37. ${gl_bai}更新LDNMP环境 ${gl_huang}38. ${gl_bai}Uninstall the LDNMP environment" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}0. ${gl_bai}Return to main menu" echo -e "${gl_huang}------------------------${gl_bai}" @@ -8231,7 +8280,7 @@ linux_ldnmp() { 3) clear # Discuz Forum - webname="Discuz论坛" + webname="Discuz Forum" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8273,7 +8322,7 @@ linux_ldnmp() { 4) clear # Kedao cloud desktop - webname="可道云桌面" + webname="Kedao cloud desktop" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8311,7 +8360,7 @@ linux_ldnmp() { 5) clear # AppleCMS - webname="苹果CMS" + webname="AppleCMS" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8358,7 +8407,7 @@ linux_ldnmp() { 6) clear # One-legged number card - webname="独脚数卡" + webname="One-legged number card" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8410,7 +8459,7 @@ linux_ldnmp() { 7) clear # flarum forum - webname="flarum论坛" + webname="flarum forum" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8549,7 +8598,7 @@ linux_ldnmp() { 20) clear - webname="PHP动态站点" + webname="PHP dynamic site" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8686,7 +8735,7 @@ linux_ldnmp() { 22) clear - webname="站点重定向" + webname="site redirect" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8725,7 +8774,7 @@ linux_ldnmp() { 24) clear - webname="反向代理-域名" + webname="Reverse proxy-domain name" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8785,7 +8834,7 @@ linux_ldnmp() { 27) clear - webname="AI绘画提示词生成器" + webname="AI painting prompt word generator" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -8825,7 +8874,7 @@ linux_ldnmp() { 30) clear - webname="静态站点" + webname="static site" send_stats "Install$webname" echo "Start deployment$webname" add_yuming @@ -9273,6 +9322,8 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou network disk search${gl_kjlan}108. ${color108}LangBot chatbot" echo -e "${gl_kjlan}109. ${color109}ZFile online network disk${gl_kjlan}110. ${color110}Karakeep bookmark management" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}111. ${color111}Multi-format file conversion tool" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -9553,7 +9604,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal services$check_docker $update_status" + echo -e "postal service$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -12822,8 +12873,30 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 111|convertx) + local app_id="111" + local docker_name="convertx" + local docker_img="ghcr.io/c4illin/convertx:latest" + local docker_port=8111 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:3000 \ + -v /home/docker/convertx:/app/data \ + ${docker_img} + } + + local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" + local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app + + ;; @@ -13123,6 +13196,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode else echo "Use official mirror source..." @@ -13134,6 +13208,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode fi } @@ -13271,7 +13346,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by Python!" + echo "This function can seamlessly install any version officially supported by python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -14619,7 +14694,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}Connect to$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}connect to$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 4628b2dc2..12cc6266f 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.9" +sh_v="4.2.10" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 @@ -251,7 +251,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストール中$package...${gl_bai}" + 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 @@ -858,7 +858,7 @@ open_port() { 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" + echo "ポートがオープンしました$port" fi done @@ -921,12 +921,12 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリース済みIP$ip" + echo "リリースされたIP$ip" fi done save_iptables_rules - send_stats "リリース済みIP" + send_stats "リリースされたIP" } block_ip() { @@ -1186,7 +1186,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -1543,14 +1543,14 @@ certs_status() { else send_stats "ドメイン名証明書の申請に失敗しました" echo -e "${gl_hong}知らせ:${gl_bai}証明書の申請に失敗しました。次の考えられる理由を確認して、再試行してください。" - echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" + echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているか確認してください" echo -e "2. DNS 解決の問題 ➠ ドメイン名がサーバー IP に正しく解決されていることを確認します。" echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" echo -e "5. アプリケーション数が制限を超えている ➠ Let's Encrypt には週制限あり (5 回/ドメイン名/週)" echo -e "6. 国内登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかをご確認ください。" echo "------------------------" - echo "1. 再適用 2. 証明書なしの HTTP アクセスに切り替える 0. 終了" + echo "1. 再度適用します。 2. 既存の証明書をインポートします。 3. 証明書なしで HTTP アクセスを使用します。 0. 終了します。" echo "------------------------" read -e -p "選択肢を入力してください:" sub_choice case $sub_choice in @@ -1560,15 +1560,64 @@ certs_status() { add_yuming install_ssltls certs_status + ;; 2) + send_stats "既存の証明書をインポートする" + + # ファイルパスを定義する + local cert_file="/home/web/certs/${yuming}_cert.pem" + local key_file="/home/web/certs/${yuming}_key.pem" + + mkdir -p /home/web/certs + + # 1. 証明書を入力します (ECC 証明書と RSA 証明書はどちらも BEGIN CERTIFICATE で始まります) + echo "証明書 (CRT/PEM) の内容を貼り付けてください (Enter を 2 回押して終了します)。" + local cert_content="" + while IFS= read -r line; do + [[ -z "$line" && "$cert_content" == *"-----BEGIN"* ]] && break + cert_content+="${line}"$'\n' + done + + # 2. 秘密キーを入力します (RSA、ECC、PKCS#8 と互換性があります) + echo "証明書の秘密キー (Private Key) の内容を貼り付けてください (Enter を 2 回押して終了します)。" + local key_content="" + while IFS= read -r line; do + [[ -z "$line" && "$key_content" == *"-----BEGIN"* ]] && break + key_content+="${line}"$'\n' + done + + # 3. インテリジェントな検証 + # 「BEGIN CERTIFICATE」と「PRIVATE KEY」を含めるだけで渡されます + if [[ "$cert_content" == *"-----BEGIN CERTIFICATE-----"* && "$key_content" == *"PRIVATE KEY-----"* ]]; then + echo -n "$cert_content" > "$cert_file" + echo -n "$key_content" > "$key_file" + + chmod 644 "$cert_file" + chmod 600 "$key_file" + + # 現在の証明書の種類を特定して表示します。 + if [[ "$key_content" == *"EC PRIVATE KEY"* ]]; then + echo "ECC証明書が正常に保存されたことが検出されました。" + else + echo "RSA証明書が正常に保存されたことが検出されました。" + fi + auth_method="ssl_imported" + else + echo "エラー: 証明書または秘密キーの形式が無効です。" + certs_status + fi + + ;; + 3) send_stats "証明書なしの HTTP アクセスに切り替える" sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf ;; *) - exit + send_stats "申請を取り下げる" + exit ;; esac fi @@ -1711,7 +1760,7 @@ cf_purge_cache() { # キャッシュをクリアするかどうかをユーザーに確認する read -e -p "Cloudflareのキャッシュをクリアする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF情報は以下に保存されます。$CONFIG_FILECF 情報は後で変更できます。" + echo "CF 情報は次の場所に保存されます。$CONFIG_FILECF 情報は後で変更できます。" read -e -p "API_TOKEN を入力してください:" API_TOKEN read -e -p "CF ユーザー名を入力してください:" EMAIL read -e -p "zone_id を入力してください (複数の場合はスペースで区切ります):" -a ZONE_IDS @@ -1813,7 +1862,7 @@ 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已开启" + waf_status="WAFがオンになっている" else waf_status="" fi @@ -1822,7 +1871,7 @@ check_waf_status() { check_cf_mode() { if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then - CFmessage=" cf模式已开启" + CFmessage="cfモードがオンになっています" else CFmessage="" fi @@ -1952,7 +2001,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # Brotliを閉じる: コメントを追加 + # ブロトリを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -2201,8 +2250,8 @@ web_security() { send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" - echo "CFパラメータを取得します。" - echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" + echo "CF パラメータを取得します。" + echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側にある API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -2269,9 +2318,9 @@ check_ldnmp_mode() { # MySQL 設定ファイルに 4096M が含まれているかどうかを確認する if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then - mode_info=" 高性能模式" + mode_info="ハイパフォーマンスモード" else - mode_info=" 标准模式" + mode_info="標準モード" fi @@ -2285,21 +2334,21 @@ check_nginx_compression() { # zstd がオンでコメントが解除されているかどうかを確認します (行全体が zstd on で始まります)。 if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status=" zstd压缩已开启" + zstd_status="zstd圧縮がオンになっています" else zstd_status="" fi # Brotli が有効になっていてコメントが解除されているかどうかを確認します if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then - br_status=" br压缩已开启" + br_status="br圧縮がオンになっています" else br_status="" fi # gzip が有効になっていてコメントが解除されているかどうかを確認します if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then - gzip_status=" gzip压缩已开启" + gzip_status="gzip圧縮がオンになっています" else gzip_status="" fi @@ -2316,7 +2365,7 @@ web_optimization() { send_stats "LDNMP環境の最適化" echo -e "LDNMP環境の最適化${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" + echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" echo "------------------------" echo "3. gzip 圧縮をオンにする 4. gzip 圧縮をオフにする" echo "5. br 圧縮をオンにする 6. br 圧縮をオフにする" @@ -2452,9 +2501,9 @@ web_optimization() { check_docker_app() { if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then - check_docker="${gl_lv}已安装${gl_bai}" + check_docker="${gl_lv}インストール済み${gl_bai}" else - check_docker="${gl_hui}未安装${gl_bai}" + check_docker="${gl_hui}インストールされていません${gl_bai}" fi } @@ -2537,7 +2586,7 @@ check_docker_image_update() { # タイムスタンプを比較する if [[ $container_created_ts -lt $last_updated_ts ]]; then - update_status="${gl_huang}发现新版本!${gl_bai}" + update_status="${gl_huang}新しいバージョンが見つかりました!${gl_bai}" else update_status="" fi @@ -2574,7 +2623,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8をチェックして許可します。 + # ローカルネットワーク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 @@ -2591,7 +2640,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8をチェックして許可します。 + # ローカルネットワーク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 @@ -2846,7 +2895,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2959,7 +3008,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3112,9 +3161,9 @@ f2b_status_xxx() { check_f2b_status() { if command -v fail2ban-client >/dev/null 2>&1; then - check_f2b_status="${gl_lv}已安装${gl_bai}" + check_f2b_status="${gl_lv}インストール済み${gl_bai}" else - check_f2b_status="${gl_hui}未安装${gl_bai}" + check_f2b_status="${gl_hui}インストールされていません${gl_bai}" fi } @@ -3349,7 +3398,7 @@ ldnmp_wp() { ldnmp_Proxy() { clear - webname="反向代理-IP+端口" + webname="リバースプロキシ IP+ポート" yuming="${1:-}" reverseproxy="${2:-}" port="${3:-}" @@ -3405,7 +3454,7 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear - webname="反向代理-负载均衡" + webname="リバースプロキシ負荷分散" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -3535,7 +3584,7 @@ stream_panel() { send_stats "ストリームの 4 層プロキシを更新します" ;; 3) - read -e -p "nginx コンテナを削除してもよろしいですか?これはウェブサイトの機能に影響を与える可能性があります。 (y/N):" confirm + read -e -p "Are you sure you want to delete the nginx container?これはウェブサイトの機能に影響を与える可能性があります。 (y/N):" confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then docker rm -f nginx sed -i "/\b${app_id}\b/d" /home/docker/appno.txt @@ -3579,7 +3628,7 @@ stream_panel() { ldnmp_Proxy_backend_stream() { clear - webname="Stream四层代理-负载均衡" + webname="ストリーム 4 層プロキシ負荷分散" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -3783,7 +3832,7 @@ ldnmp_web_status() { ;; 4) send_stats "関連サイトの作成" - echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスする" + echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスします" read -e -p "既存のドメイン名を入力してください:" oddyuming read -e -p "新しいドメイン名を入力してください:" yuming install_certbot @@ -3817,7 +3866,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -3849,7 +3898,7 @@ ldnmp_web_status() { check_panel_app() { if $lujing > /dev/null 2>&1; then - check_panel="${gl_lv}已安装${gl_bai}" + check_panel="${gl_lv}インストール済み${gl_bai}" else check_panel="" fi @@ -3910,9 +3959,9 @@ done check_frp_app() { if [ -d "/home/frp/" ]; then - check_frp="${gl_lv}已安装${gl_bai}" + check_frp="${gl_lv}インストール済み${gl_bai}" else - check_frp="${gl_hui}未安装${gl_bai}" + check_frp="${gl_hui}インストールされていません${gl_bai}" fi } @@ -4007,7 +4056,7 @@ add_forwarding_service() { read -e -p "サービス名を入力してください:" service_name read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp を入力する]:" service_type local service_type=${service_type:-tcp} - read -e -p "イントラネット IP を入力してください [Enter キーを押すときのデフォルトは 127.0.0.1]:" local_ip + read -e -p "イントラネット IP を入力してください [Enter キーを押した場合のデフォルトは 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 @@ -4164,7 +4213,7 @@ generate_access_urls() { done fi - # HTTPS 構成を処理する + # HTTPS 構成の処理 for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -4684,7 +4733,7 @@ while true; do 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 "3. DNS 構成を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4845,7 +4894,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5064,7 +5113,7 @@ dd_xitong() { ;; 30) - send_stats "centos9を再インストールする" + send_stats "CentOS9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -5398,7 +5447,7 @@ elrepo() { echo "ビデオ紹介: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat シリーズのディストリビューション CentOS/RedHat/Alma/Rocky/oracle のみをサポートします" - echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試して、慎重に実稼働環境をアップグレードすることをお勧めします。" + echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice @@ -5446,7 +5495,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドパラメータを構築する + # clamscan コマンドのパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -5823,7 +5872,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えて" + send_stats "英語に切り替えてください" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -5933,9 +5982,9 @@ linux_trash() { local trash_status if ! grep -q "trash-put" "$bashrc_profile"; then - trash_status="${gl_hui}未启用${gl_bai}" + trash_status="${gl_hui}有効になっていません${gl_bai}" else - trash_status="${gl_lv}已启用${gl_bai}" + trash_status="${gl_lv}有効${gl_bai}" fi clear @@ -6328,9 +6377,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションのマウント +# パーティションをマウントする mount_partition() { - send_stats "パーティションのマウント" + send_stats "パーティションをマウントする" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6349,7 +6398,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6509,7 +6558,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port + read -e -p "SSH ポートを入力してください (デフォルトは 22):" port port=${port:-22} echo "認証方法を選択してください:" @@ -6677,7 +6726,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期スケジュールされたタスクを追加する" + send_stats "同期のスケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6955,7 +7004,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftopをインストールする" + send_stats "iftop をインストールする" ;; 7) clear @@ -7249,7 +7298,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" + echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7344,7 +7393,7 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりません。復元ディレクトリのパスを入力してください:" original_path - # 作成プロジェクトのコンテナがすでに実行されているかどうかを確認します + # 構成プロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then echo -e "${YELLOW}プロジェクトの作成 [$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" @@ -7426,7 +7475,7 @@ docker_ssh_migration() { [[ "$has_container" == false ]] && echo -e "${YELLOW}共通コンテナのバックアップ情報が見つかりません${NC}" - # /home/docker 下のファイルを復元します + # /home/docker 下のファイルを復元する if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker @@ -7451,7 +7500,7 @@ docker_ssh_migration() { read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" @@ -7675,7 +7724,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -8018,7 +8067,7 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 + # CPU コアの数と占有率を入力するようユーザーに求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 read -e -p "CPU コアの数を入力してください [デフォルト:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} @@ -8231,7 +8280,7 @@ linux_ldnmp() { 3) clear # ディスカスフォーラム - webname="Discuz论坛" + webname="ディスカスフォーラム" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8273,7 +8322,7 @@ linux_ldnmp() { 4) clear # Kedao クラウド デスクトップ - webname="可道云桌面" + webname="Kedao クラウド デスクトップ" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8311,7 +8360,7 @@ linux_ldnmp() { 5) clear # AppleCMS - webname="苹果CMS" + webname="AppleCMS" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8358,7 +8407,7 @@ linux_ldnmp() { 6) clear # 一本足のナンバーカード - webname="独脚数卡" + webname="一本足のナンバーカード" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8402,7 +8451,7 @@ linux_ldnmp() { echo "パスワード: 管理者" echo "------------------------" echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" - echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、問題が多いのか、とても腹が立っています。" + echo "私も、なぜユニコーンナンバーカードがこれほど面倒で問題が多いのか、非常に腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8410,7 +8459,7 @@ linux_ldnmp() { 7) clear # フララムフォーラム - webname="flarum论坛" + webname="フララムフォーラム" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8549,7 +8598,7 @@ linux_ldnmp() { 20) clear - webname="PHP动态站点" + webname="PHP動的サイト" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8686,7 +8735,7 @@ linux_ldnmp() { 22) clear - webname="站点重定向" + webname="サイトリダイレクト" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8725,7 +8774,7 @@ linux_ldnmp() { 24) clear - webname="反向代理-域名" + webname="リバースプロキシドメイン名" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8785,7 +8834,7 @@ linux_ldnmp() { 27) clear - webname="AI绘画提示词生成器" + webname="AI絵画プロンプトワードジェネレーター" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8825,7 +8874,7 @@ linux_ldnmp() { 30) clear - webname="静态站点" + webname="静的サイト" send_stats "インストール$webname" echo "導入を開始する$webname" add_yuming @@ -8902,7 +8951,7 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "エラー: リモート サーバーの IP を入力してください。" @@ -9231,7 +9280,7 @@ while true; do echo -e "${gl_kjlan}37. ${color37}MyIP ツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh Web版 SSH接続ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}Nexterm リモート接続ツール" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}Nextermリモート接続ツール" echo -e "${gl_kjlan}43. ${color43}RustDesk リモート デスクトップ (サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk リモート デスクトップ (リレー)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker アクセラレーション ステーション${gl_kjlan}46. ${color46}GitHub アクセラレーション ステーション${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}プロメテウスの監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" @@ -9257,7 +9306,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos の個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}イミッチピクチャービデオマネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}Owncast の自己ホスト型ライブ ストリーミング プラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBox ファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}------------------------" @@ -9273,6 +9322,8 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索${gl_kjlan}108. ${color108}LangBot チャットボット" echo -e "${gl_kjlan}109. ${color109}ZFileオンラインネットワークディスク${gl_kjlan}110. ${color110}カラオケのブックマーク管理" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}111. ${color111}マルチフォーマットファイル変換ツール" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" @@ -12822,8 +12873,30 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 111|convertx) + local app_id="111" + local docker_name="convertx" + local docker_img="ghcr.io/c4illin/convertx:latest" + local docker_port=8111 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:3000 \ + -v /home/docker/convertx:/app/data \ + ${docker_img} + } + + local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" + local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app + + ;; @@ -12844,7 +12917,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then @@ -12922,7 +12995,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -13123,6 +13196,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode else echo "公式ミラーソースを使用してください..." @@ -13134,6 +13208,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode fi } @@ -13205,7 +13280,7 @@ linux_Settings() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}スクリプト起動のショートカットキーを設定する${gl_kjlan}2. ${gl_bai}ログインパスワードを変更する" echo -e "${gl_kjlan}3. ${gl_bai}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" - echo -e "${gl_kjlan}5. ${gl_bai}すべてのポートを開く${gl_kjlan}6. ${gl_bai}SSH接続ポートを変更する" + 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}------------------------" @@ -13276,7 +13351,7 @@ linux_Settings() { echo -e "現在のPythonのバージョン番号:${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 "他のバージョンを確認する: https://www.python.org/downloads/" echo "------------" read -e -p "インストールする Python のバージョン番号を入力します (終了するには 0 を入力します)。" py_new_v @@ -13383,7 +13458,7 @@ EOF send_stats "SSHポートが変更されました" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSHポート変更の終了" + send_stats "SSH ポート変更の終了" break else echo "ポート番号が無効です。 1 ~ 65535 の数字を入力してください。" @@ -13674,7 +13749,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得します + # 現在のシステム時刻を取得する local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -13689,7 +13764,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -14431,7 +14506,7 @@ linux_file() { 4) # 重命名目录 read -e -p "現在のディレクトリ名を入力してください:" current_name read -e -p "新しいディレクトリ名を入力してください:" new_name - mv "$current_name" "$new_name" && echo "ディレクトリの名前が変更されました" || echo "名前の変更に失敗しました" + mv "$current_name" "$new_name" && echo "ディレクトリ名が変更されました" || echo "名前の変更に失敗しました" send_stats "ディレクトリの名前を変更する" ;; 5) # 删除目录 @@ -14492,7 +14567,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14512,7 +14587,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14619,7 +14694,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}に接続します$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}に接続する$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14648,10 +14723,10 @@ while true; do 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}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}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}" @@ -14693,7 +14768,7 @@ while true; do 5) clear - send_stats "クラスターを復元する" + send_stats "クラスタを復元する" echo "servers.py をアップロードし、任意のキーを押してアップロードを開始してください。" echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}ファイルに${gl_huang}/root/cluster/${gl_bai}復元完了!" break_end @@ -14767,7 +14842,7 @@ echo "------------------------" echo -e "${gl_lan}DMIT 四半期あたり 28 ドル 米国 CN2GIA 1 コア 2G メモリ 20G ハード ドライブ 1 か月あたり 800G トラフィック${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" +echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額トラフィック 1T${gl_bai}" echo -e "${gl_bai}URL:https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}さらに人気のある VPS オファー${gl_bai}" @@ -14976,7 +15051,7 @@ echo -e "${gl_kjlan}16. ${gl_bai}ゲームサーバー起動スクリプト集" 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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice @@ -15015,8 +15090,8 @@ echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" -echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" -echo "システム k アップデートを更新 | kアップデート" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | k nano wget をアンインストールする | nano wgetをアンインストールします" +echo "システム k 更新を更新します。 kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" @@ -15025,10 +15100,10 @@ echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" echo "システムごみ箱のゴミ箱 | k hz | k ごみ箱" echo "システムバックアップ機能 kバックアップ | k bf | k バックアップ" -echo "ssh リモート接続ツール k ssh | k リモート接続" +echo "ssh リモート接続ツール k ssh | kリモート接続" echo "rsync リモート同期ツール k rsync | k リモート同期" echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" -echo "イントラネット普及率 (サーバー) k frps" +echo "イントラネットの普及率 (サーバー) k frps" echo "イントラネット浸透率 (クライアント) k frpc" echo "ソフトウェア起動 k start sshd | sshdを起動します" echo "ソフトウェア停止 k 停止 sshd | k ストップ sshd" @@ -15044,11 +15119,11 @@ echo "docker イメージ管理 k docker img |k docker image" echo "LDNMP サイト管理 k Web" echo "LDNMP キャッシュのクリーニング k Web キャッシュ" echo "WordPress をインストールします。 kワードプレス | k wp xxx.com" -echo "リバース プロキシをインストールします k fd |k rp |k リバース プロキシ |k fd xxx.com" +echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" -echo "L4 ロード バランシング k ストリーム |k L4 ロード バランシングをインストールする" +echo "L4 ロード バランシングのインストール k ストリーム |k L4 ロード バランシング" echo "ファイアウォール パネル k fhq |k ファイアウォール" -echo "ポートを開きます k dkdk 8080 |k ポートを開きます 8080" +echo "ポートを開く 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 "ブロック IP k zzip 177.5.25.36 |k ブロック IP 177.5.25.36" @@ -15145,7 +15220,7 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "仮想メモリを素早く設定する" add_swap "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index b6ae7276f..d63ce1259 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.9" +sh_v="4.2.10" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -1197,7 +1197,7 @@ iptables_panel() { ;; 17) - read -e -p "지워진 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code + read -e -p "삭제된 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code manage_country_rules unblock $country_code send_stats "명확한 국가$country_codeIP" ;; @@ -1545,12 +1545,12 @@ certs_status() { echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." echo -e "1. 도메인 이름이 잘못 입력되었습니다. ➠ 도메인 이름이 올바르게 입력되었는지 확인하세요." echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인" - echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하시기 바랍니다" + echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." echo "------------------------" - echo "1. 재적용 2. 인증서 없이 HTTP 접속으로 전환 0. 종료" + echo "1. 다시 적용 2. 기존 인증서 가져오기 3. 인증서 없이 HTTP 액세스 사용 0. 종료" echo "------------------------" read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -1560,15 +1560,64 @@ certs_status() { add_yuming install_ssltls certs_status + ;; 2) + send_stats "기존 인증서 가져오기" + + # 파일 경로 정의 + local cert_file="/home/web/certs/${yuming}_cert.pem" + local key_file="/home/web/certs/${yuming}_key.pem" + + mkdir -p /home/web/certs + + # 1. 인증서를 입력합니다(ECC 및 RSA 인증서 모두 BEGIN CERTIFICATE로 시작함). + echo "인증서(CRT/PEM) 콘텐츠를 붙여넣으세요(종료하려면 Enter를 두 번 누르세요)." + local cert_content="" + while IFS= read -r line; do + [[ -z "$line" && "$cert_content" == *"-----BEGIN"* ]] && break + cert_content+="${line}"$'\n' + done + + # 2. 개인 키를 입력하세요. (RSA, ECC, PKCS#8과 호환 가능) + echo "인증서 개인 키(개인 키) 내용을 붙여넣으세요(종료하려면 Enter를 두 번 누르세요)." + local key_content="" + while IFS= read -r line; do + [[ -z "$line" && "$key_content" == *"-----BEGIN"* ]] && break + key_content+="${line}"$'\n' + done + + # 3. 지능형 검증 + # 통과하려면 "BEGIN CERTIFICATE" 및 "PRIVATE KEY"만 포함하면 됩니다. + if [[ "$cert_content" == *"-----BEGIN CERTIFICATE-----"* && "$key_content" == *"PRIVATE KEY-----"* ]]; then + echo -n "$cert_content" > "$cert_file" + echo -n "$key_content" > "$key_file" + + chmod 644 "$cert_file" + chmod 600 "$key_file" + + # 현재 인증서 유형을 식별하고 표시합니다. + if [[ "$key_content" == *"EC PRIVATE KEY"* ]]; then + echo "ECC 인증서가 성공적으로 저장되었음을 감지했습니다." + else + echo "RSA 인증서가 성공적으로 저장되었음을 감지했습니다." + fi + auth_method="ssl_imported" + else + echo "오류: 잘못된 인증서 또는 개인 키 형식입니다!" + certs_status + fi + + ;; + 3) send_stats "인증서 없이 HTTP 액세스로 전환" sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf ;; *) - exit + send_stats "신청철회" + exit ;; esac fi @@ -1813,7 +1862,7 @@ 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已开启" + waf_status="WAF가 켜져 있습니다" else waf_status="" fi @@ -1822,7 +1871,7 @@ check_waf_status() { check_cf_mode() { if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then - CFmessage=" cf模式已开启" + CFmessage="cf 모드가 켜져 있습니다" else CFmessage="" fi @@ -2199,7 +2248,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 고부하를 감지하면 자동으로 실드를 열고, 저부하를 감지하면 자동으로 5초 동안 실드를 닫습니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -2269,9 +2318,9 @@ check_ldnmp_mode() { # MySQL 구성 파일에 4096M이 포함되어 있는지 확인하세요. if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then - mode_info=" 高性能模式" + mode_info="고성능 모드" else - mode_info=" 标准模式" + mode_info="표준 모드" fi @@ -2285,21 +2334,21 @@ check_nginx_compression() { # zstd가 켜져 있고 주석 처리가 해제되어 있는지 확인하세요. (전체 줄은 zstd on으로 시작됩니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status=" zstd压缩已开启" + zstd_status="zstd 압축이 켜져 있습니다" else zstd_status="" fi # brotli가 활성화되어 있고 주석 처리가 해제되어 있는지 확인하세요. if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then - br_status=" br压缩已开启" + br_status="br압축이 켜져 있습니다" else br_status="" fi # gzip이 활성화되어 있고 주석 처리가 해제되어 있는지 확인하세요. if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then - gzip_status=" gzip压缩已开启" + gzip_status="gzip 압축이 켜져 있습니다" else gzip_status="" fi @@ -2452,9 +2501,9 @@ web_optimization() { check_docker_app() { if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then - check_docker="${gl_lv}已安装${gl_bai}" + check_docker="${gl_lv}설치됨${gl_bai}" else - check_docker="${gl_hui}未安装${gl_bai}" + check_docker="${gl_hui}설치되지 않음${gl_bai}" fi } @@ -2537,7 +2586,7 @@ check_docker_image_update() { # 타임스탬프 비교 if [[ $container_created_ts -lt $last_updated_ts ]]; then - update_status="${gl_huang}发现新版本!${gl_bai}" + update_status="${gl_huang}새 버전이 발견되었습니다!${gl_bai}" else update_status="" fi @@ -3112,9 +3161,9 @@ f2b_status_xxx() { check_f2b_status() { if command -v fail2ban-client >/dev/null 2>&1; then - check_f2b_status="${gl_lv}已安装${gl_bai}" + check_f2b_status="${gl_lv}설치됨${gl_bai}" else - check_f2b_status="${gl_hui}未安装${gl_bai}" + check_f2b_status="${gl_hui}설치되지 않음${gl_bai}" fi } @@ -3276,10 +3325,10 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치 정보는 다음과 같습니다." + echo "$webname설치정보는 다음과 같습니다." } @@ -3289,7 +3338,7 @@ nginx_web_on() { local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf @@ -3349,7 +3398,7 @@ ldnmp_wp() { ldnmp_Proxy() { clear - webname="反向代理-IP+端口" + webname="역방향 프록시-IP+포트" yuming="${1:-}" reverseproxy="${2:-}" port="${3:-}" @@ -3363,7 +3412,7 @@ ldnmp_Proxy() { check_ip_and_get_access_port "$yuming" if [ -z "$reverseproxy" ]; then - read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3405,7 +3454,7 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear - webname="反向代理-负载均衡" + webname="역방향 프록시-로드 밸런싱" send_stats "설치하다$webname" echo "배포 시작$webname" @@ -3579,7 +3628,7 @@ stream_panel() { ldnmp_Proxy_backend_stream() { clear - webname="Stream四层代理-负载均衡" + webname="스트리밍 4계층 프록시-로드 밸런싱" send_stats "설치하다$webname" echo "배포 시작$webname" @@ -3627,7 +3676,7 @@ ldnmp_Proxy_backend_stream() { docker exec nginx nginx -s reload clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "------------------------" echo "방문 주소:" ip_address @@ -3849,7 +3898,7 @@ ldnmp_web_status() { check_panel_app() { if $lujing > /dev/null 2>&1; then - check_panel="${gl_lv}已安装${gl_bai}" + check_panel="${gl_lv}설치됨${gl_bai}" else check_panel="" fi @@ -3910,9 +3959,9 @@ done check_frp_app() { if [ -d "/home/frp/" ]; then - check_frp="${gl_lv}已安装${gl_bai}" + check_frp="${gl_lv}설치됨${gl_bai}" else - check_frp="${gl_hui}未安装${gl_bai}" + check_frp="${gl_hui}설치되지 않음${gl_bai}" fi } @@ -3960,7 +4009,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -4022,7 +4071,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -5933,9 +5982,9 @@ linux_trash() { local trash_status if ! grep -q "trash-put" "$bashrc_profile"; then - trash_status="${gl_hui}未启用${gl_bai}" + trash_status="${gl_hui}활성화되지 않음${gl_bai}" else - trash_status="${gl_lv}已启用${gl_bai}" + trash_status="${gl_lv}활성화됨${gl_bai}" fi clear @@ -7309,7 +7358,7 @@ docker_ssh_migration() { # /home/docker 아래의 모든 파일을 백업합니다(하위 디렉터리 제외). if [ -d "/home/docker" ]; then - echo -e "${BLUE}/home/docker 아래의 파일을 백업하세요...${NC}" + echo -e "${BLUE}/home/docker 아래의 파일을 백업합니다...${NC}" find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T - echo -e "${GREEN}/home/docker 아래의 파일은 다음과 같이 패키지되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}" fi @@ -7356,7 +7405,7 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name]가 다음 위치로 추출되었습니다.$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7491,7 +7540,7 @@ docker_ssh_migration() { echo -e "1. 도커 프로젝트 백업" echo -e "2. 도커 프로젝트 마이그레이션" echo -e "3. 도커 프로젝트 복원" - echo -e "4. Docker 프로젝트의 백업 파일을 삭제합니다." + echo -e "4. docker 프로젝트 백업 파일 삭제" echo "------------------------" echo -e "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -8006,7 +8055,7 @@ linux_Oracle() { 1) clear echo "활성 스크립트: CPU 사용량 10-20% 메모리 사용량 20%" - read -e -p "설치하시겠습니까? (예/아니요):" choice + read -e -p "정말로 설치하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -8231,7 +8280,7 @@ linux_ldnmp() { 3) clear # 토론 포럼 - webname="Discuz论坛" + webname="토론 포럼" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8273,7 +8322,7 @@ linux_ldnmp() { 4) clear # Kedao 클라우드 데스크탑 - webname="可道云桌面" + webname="Kedao 클라우드 데스크탑" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8311,7 +8360,7 @@ linux_ldnmp() { 5) clear # AppleCMS - webname="苹果CMS" + webname="AppleCMS" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8358,7 +8407,7 @@ linux_ldnmp() { 6) clear # 한쪽다리 숫자카드 - webname="独脚数卡" + webname="한쪽다리 숫자카드" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8410,7 +8459,7 @@ linux_ldnmp() { 7) clear # 플라럼 포럼 - webname="flarum论坛" + webname="플라럼 포럼" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8549,7 +8598,7 @@ linux_ldnmp() { 20) clear - webname="PHP动态站点" + webname="PHP 동적 사이트" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8686,7 +8735,7 @@ linux_ldnmp() { 22) clear - webname="站点重定向" + webname="사이트 리디렉션" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8725,12 +8774,12 @@ linux_ldnmp() { 24) clear - webname="反向代理-域名" + webname="역방향 프록시 도메인 이름" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" - read -e -p "역방향 프록시 도메인 이름을 입력하세요." fandai_yuming + read -e -p "역방향 프록시 도메인 이름을 입력하세요:" fandai_yuming nginx_install_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-domain.conf @@ -8785,7 +8834,7 @@ linux_ldnmp() { 27) clear - webname="AI绘画提示词生成器" + webname="AI 그림 프롬프트 단어 생성기" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -8825,7 +8874,7 @@ linux_ldnmp() { 30) clear - webname="静态站点" + webname="정적 사이트" send_stats "설치하다$webname" echo "배포 시작$webname" add_yuming @@ -9221,7 +9270,7 @@ while true; do echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${color21}VScode 웹 버전${gl_kjlan}22. ${color22}UptimeKuma 모니터링 도구" echo -e "${gl_kjlan}23. ${color23}메모 웹 메모${gl_kjlan}24. ${color24}Webtop 원격 데스크톱 웹 버전${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}25. ${color25}Nextcloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-Today 예약된 작업 관리 프레임워크" + echo -e "${gl_kjlan}25. ${color25}Nextcloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-오늘 예약된 작업 관리 프레임워크" echo -e "${gl_kjlan}27. ${color27}Dockge 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}LibreSpeed ​​​​속도 테스트 도구" echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 스테이션${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism 개인 앨범 시스템" echo -e "${gl_kjlan}------------------------" @@ -9249,7 +9298,7 @@ while true; do echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}AstrBot 챗봇 프레임워크" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워든 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워드 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 마법사${gl_kjlan}76. ${color76}온라인 DOS 오래된 게임" echo -e "${gl_kjlan}77. ${color77}Thunder 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" @@ -9273,6 +9322,8 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}111. ${color111}다중 형식 파일 변환 도구" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" @@ -9473,7 +9524,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "나타 모니터링$check_docker $update_status" + echo -e "네자 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9553,7 +9604,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우편 서비스$check_docker $update_status" + echo -e "우정$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -12822,8 +12873,30 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 111|convertx) + local app_id="111" + local docker_name="convertx" + local docker_img="ghcr.io/c4illin/convertx:latest" + local docker_port=8111 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:3000 \ + -v /home/docker/convertx:/app/data \ + ${docker_img} + } + + local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" + local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app + + ;; @@ -13034,7 +13107,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13123,6 +13196,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode else echo "공식 미러 소스를 사용하세요..." @@ -13134,6 +13208,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode fi } @@ -13504,7 +13579,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다." + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; @@ -13694,7 +13769,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13762,7 +13837,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 + # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -13857,7 +13932,7 @@ EOF case $dingshi in 1) - read -e -p "작업을 실행하기로 선택한 달의 날짜는 무엇입니까? (1-30):" day + read -e -p "작업을 실행하기로 선택한 날은 언제입니까? (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) @@ -14619,7 +14694,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}연결 대상$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}연결하다$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -15014,7 +15089,7 @@ echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." echo "시작 스크립트 k" -echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 nano wget을 설치합니다." +echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 나노 wget을 설치합니다." echo "패키지 제거 k 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" echo "시스템 k 업데이트 업데이트 | k 업데이트" echo "클린 시스템 정크 k 클린 | 케이 깨끗하다" @@ -15043,7 +15118,7 @@ echo "도커 컨테이너 관리 k 도커 ps |k 도커 컨테이너" echo "도커 이미지 관리 k docker img |k 도커 이미지" echo "LDNMP 사이트 관리 k web" echo "LDNMP 캐시 정리 k 웹 캐시" -echo "WordPress k wp 설치 | k 워드프레스 | k wp xxx.com" +echo "WordPress k wp 설치 | k 워드프레스 | kwp xxx.com" echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "L4 로드 밸런싱 설치 k 스트림 |k L4 로드 밸런싱" @@ -15053,7 +15128,7 @@ echo "k 포트 닫기 gbdk 7800 |k 포트 7800 닫기" echo "릴리스 IP k fxip 127.0.0.0/8 |k 릴리스 IP 127.0.0.0/8" echo "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" +echo "애플리케이션 시장관리 kapp" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "Fail2ban 관리 k Fail2ban | 케이 F2B" echo "시스템 정보 표시 k 정보" diff --git a/translate.py b/translate.py index 08fa7e575..496df5347 100644 --- a/translate.py +++ b/translate.py @@ -9,6 +9,8 @@ def is_chinese(text): return bool(re.search(r'[\u4e00-\u9fff]', text)) def translate_text(text, target_lang): + if not text.strip() or not is_chinese(text): + return text try: return GoogleTranslator(source='zh-CN', target=target_lang).translate(text) except Exception as e: @@ -17,14 +19,13 @@ def translate_text(text, target_lang): def translate_line_preserving_variables(line, target_lang): """ - Translate only Chinese parts in echo/read/send_stats commands, excluding shell variables + 处理 echo/read/send_stats 等命令中的中文,同时保护其中的 ${var} """ - # Match double or single quoted strings def repl(match): full_string = match.group(0) quote = full_string[0] content = full_string[1:-1] - # Split by variable expressions + # 分割出变量,只翻译非变量部分 parts = re.split(r'(\$\{?\w+\}?)', content) translated_parts = [ translate_text(p, target_lang) if is_chinese(p) else p @@ -34,6 +35,24 @@ def repl(match): return re.sub(r'(?:\'[^\']*\'|"[^"]*")', repl, line) +def translate_assignment_value(line, target_lang): + """ + 专门处理变量赋值语句:VAR="中文内容" -> VAR="Translated Content" + """ + # 匹配 key="value" 或 key='value' 格式,且 value 包含中文 + match = re.match(r'^(\s*[a-zA-Z_][a-zA-Z0-9_]*\s*=\s*)([\'"])(.*)([\'"])(.*)$', line) + if match: + prefix, quote_open, value, quote_close, suffix = match.groups() + if is_chinese(value): + # 同样要保护赋值内容里的 ${var} + parts = re.split(r'(\$\{?\w+\}?)', value) + translated_value = "".join([ + translate_text(p, target_lang) if is_chinese(p) else p + for p in parts + ]) + return f"{prefix}{quote_open}{translated_value}{quote_close}{suffix}\n" + return line + def translate_file(input_file, output_file, target_lang): print(f"Translating to {target_lang}...") @@ -41,62 +60,53 @@ def translate_file(input_file, output_file, target_lang): print(f"Error: Input file {input_file} not found") return False - total_lines = sum(1 for _ in open(input_file, 'r', encoding='utf-8')) - processed_lines = 0 + with open(input_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + total_lines = len(lines) - with open(input_file, 'r', encoding='utf-8') as f_in, \ - open(output_file, 'w', encoding='utf-8') as f_out: - - for line in f_in: - processed_lines += 1 - progress = processed_lines / total_lines * 100 - print(f"\rProcessing: {progress:.1f}% ({processed_lines}/{total_lines})", end='') + with open(output_file, 'w', encoding='utf-8') as f_out: + for i, line in enumerate(lines): + progress = (i + 1) / total_lines * 100 + print(f"\rProcessing: {progress:.1f}% ({i+1}/{total_lines})", end='') leading_space = re.match(r'^(\s*)', line).group(1) stripped = line.strip() + # 1. 处理注释 if stripped.startswith('#') and is_chinese(stripped): - comment_mark = '#' comment_text = stripped[1:].strip() if comment_text: translated = translate_text(comment_text, target_lang) - f_out.write(f"{leading_space}{comment_mark} {translated}\n") + f_out.write(f"{leading_space}# {translated}\n") else: f_out.write(line) + + # 2. 处理常用交互命令 elif any(cmd in stripped for cmd in ['echo', 'read', 'send_stats']) and is_chinese(stripped): - translated_line = translate_line_preserving_variables(line, target_lang) - f_out.write(translated_line) + f_out.write(translate_line_preserving_variables(line, target_lang)) + + # 3. 处理变量赋值中的中文 (新增强化) + elif '=' in stripped and is_chinese(stripped): + f_out.write(translate_assignment_value(line, target_lang)) + + # 4. 其他行原样保留 else: f_out.write(line) print(f"\nTranslation to {target_lang} completed.") - print(f"Original file size: {os.path.getsize(input_file)} bytes") - print(f"Translated file size: {os.path.getsize(output_file)} bytes") return True if __name__ == "__main__": input_file = 'kejilion.sh' - - # 语言映射:目录名 -> Google翻译语言代码 - languages = { - 'en': 'en', # 英语 - 'tw': 'zh-TW', # 繁体中文 - 'kr': 'ko', # 韩语 - 'jp': 'ja' # 日语 - } + languages = {'en': 'en', 'tw': 'zh-TW', 'kr': 'ko', 'jp': 'ja'} success_count = 0 - for dir_name, lang_code in languages.items(): output_file = f'{dir_name}/kejilion.sh' if translate_file(input_file, output_file, lang_code): success_count += 1 - print(f"✓ Successfully translated to {dir_name}") - else: - print(f"✗ Failed to translate to {dir_name}") - print("-" * 50) - - print(f"\nTranslation summary: {success_count}/{len(languages)} languages completed") + print(f"✓ {dir_name} done") + print("-" * 30) - if success_count == 0: - sys.exit(1) + if success_count == 0: sys.exit(1) diff --git a/tw/kejilion.sh b/tw/kejilion.sh index de76654f6..e9fc50a50 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.9" +sh_v="4.2.10" gl_hui='\e[37m' @@ -1550,7 +1550,7 @@ certs_status() { echo -e "5. 申請次數超限 ➠ Let's Encrypt有每週限額(5次/域名/週)" echo -e "6. 國內備案限制 ➠ 中國大陸環境請確認域名是否備案" echo "------------------------" - echo "1. 重新申請 2. 不帶證書改用HTTP訪問 0. 退出" + echo "1. 重新申請 2. 導入已有證書 3. 不帶證書改用HTTP訪問 0. 退出" echo "------------------------" read -e -p "請輸入你的選擇:" sub_choice case $sub_choice in @@ -1560,15 +1560,64 @@ certs_status() { add_yuming install_ssltls certs_status + ;; 2) + send_stats "導入已有證書" + + # 定義文件路徑 + local cert_file="/home/web/certs/${yuming}_cert.pem" + local key_file="/home/web/certs/${yuming}_key.pem" + + mkdir -p /home/web/certs + + # 1. 輸入證書 (ECC 和 RSA 證書開頭都是 BEGIN CERTIFICATE) + echo "請粘貼 證書 (CRT/PEM) 內容 (按兩次回車結束):" + local cert_content="" + while IFS= read -r line; do + [[ -z "$line" && "$cert_content" == *"-----BEGIN"* ]] && break + cert_content+="${line}"$'\n' + done + + # 2. 輸入私鑰 (兼容 RSA, ECC, PKCS#8) + echo "請粘貼 證書私鑰 (Private Key) 內容 (按兩次回車結束):" + local key_content="" + while IFS= read -r line; do + [[ -z "$line" && "$key_content" == *"-----BEGIN"* ]] && break + key_content+="${line}"$'\n' + done + + # 3. 智能校驗 + # 只要包含 "BEGIN CERTIFICATE" 和 "PRIVATE KEY" 即可通過 + if [[ "$cert_content" == *"-----BEGIN CERTIFICATE-----"* && "$key_content" == *"PRIVATE KEY-----"* ]]; then + echo -n "$cert_content" > "$cert_file" + echo -n "$key_content" > "$key_file" + + chmod 644 "$cert_file" + chmod 600 "$key_file" + + # 識別當前證書類型並顯示 + if [[ "$key_content" == *"EC PRIVATE KEY"* ]]; then + echo "檢測到 ECC 證書已成功保存。" + else + echo "檢測到 RSA 證書已成功保存。" + fi + auth_method="ssl_imported" + else + echo "錯誤:無效的證書或私鑰格式!" + certs_status + fi + + ;; + 3) send_stats "不帶證書改用HTTP訪問" sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf ;; *) - exit + send_stats "退出申請" + exit ;; esac fi @@ -1813,7 +1862,7 @@ 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已开启" + waf_status="WAF已開啟" else waf_status="" fi @@ -1822,7 +1871,7 @@ check_waf_status() { check_cf_mode() { if [ -f "/etc/fail2ban/action.d/cloudflare-docker.conf" ]; then - CFmessage=" cf模式已开启" + CFmessage="cf模式已開啟" else CFmessage="" fi @@ -2269,9 +2318,9 @@ check_ldnmp_mode() { # 檢查 MySQL 配置文件中是否包含 4096M if docker exec "$MYSQL_CONTAINER" grep -q "4096M" "$MYSQL_CONF" 2>/dev/null; then - mode_info=" 高性能模式" + mode_info="高性能模式" else - mode_info=" 标准模式" + mode_info="標準模式" fi @@ -2285,21 +2334,21 @@ check_nginx_compression() { # 檢查 zstd 是否開啟且未被註釋(整行以 zstd on; 開頭) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status=" zstd压缩已开启" + zstd_status="zstd壓縮已開啟" else zstd_status="" fi # 檢查 brotli 是否開啟且未被註釋 if grep -qE '^\s*brotli\s+on;' "$CONFIG_FILE"; then - br_status=" br压缩已开启" + br_status="br壓縮已開啟" else br_status="" fi # 檢查 gzip 是否開啟且未被註釋 if grep -qE '^\s*gzip\s+on;' "$CONFIG_FILE"; then - gzip_status=" gzip压缩已开启" + gzip_status="gzip壓縮已開啟" else gzip_status="" fi @@ -2452,9 +2501,9 @@ web_optimization() { check_docker_app() { if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name" ; then - check_docker="${gl_lv}已安装${gl_bai}" + check_docker="${gl_lv}已安裝${gl_bai}" else - check_docker="${gl_hui}未安装${gl_bai}" + check_docker="${gl_hui}未安裝${gl_bai}" fi } @@ -2537,7 +2586,7 @@ check_docker_image_update() { # 比較時間戳 if [[ $container_created_ts -lt $last_updated_ts ]]; then - update_status="${gl_huang}发现新版本!${gl_bai}" + update_status="${gl_huang}發現新版本!${gl_bai}" else update_status="" fi @@ -3112,9 +3161,9 @@ f2b_status_xxx() { check_f2b_status() { if command -v fail2ban-client >/dev/null 2>&1; then - check_f2b_status="${gl_lv}已安装${gl_bai}" + check_f2b_status="${gl_lv}已安裝${gl_bai}" else - check_f2b_status="${gl_hui}未安装${gl_bai}" + check_f2b_status="${gl_hui}未安裝${gl_bai}" fi } @@ -3405,7 +3454,7 @@ ldnmp_Proxy() { ldnmp_Proxy_backend() { clear - webname="反向代理-负载均衡" + webname="反向代理-負載均衡" send_stats "安裝$webname" echo "開始部署$webname" @@ -3579,7 +3628,7 @@ stream_panel() { ldnmp_Proxy_backend_stream() { clear - webname="Stream四层代理-负载均衡" + webname="Stream四層代理-負載均衡" send_stats "安裝$webname" echo "開始部署$webname" @@ -3849,7 +3898,7 @@ ldnmp_web_status() { check_panel_app() { if $lujing > /dev/null 2>&1; then - check_panel="${gl_lv}已安装${gl_bai}" + check_panel="${gl_lv}已安裝${gl_bai}" else check_panel="" fi @@ -3910,9 +3959,9 @@ done check_frp_app() { if [ -d "/home/frp/" ]; then - check_frp="${gl_lv}已安装${gl_bai}" + check_frp="${gl_lv}已安裝${gl_bai}" else - check_frp="${gl_hui}未安装${gl_bai}" + check_frp="${gl_hui}未安裝${gl_bai}" fi } @@ -5933,9 +5982,9 @@ linux_trash() { local trash_status if ! grep -q "trash-put" "$bashrc_profile"; then - trash_status="${gl_hui}未启用${gl_bai}" + trash_status="${gl_hui}未啟用${gl_bai}" else - trash_status="${gl_lv}已启用${gl_bai}" + trash_status="${gl_lv}已啟用${gl_bai}" fi clear @@ -8231,7 +8280,7 @@ linux_ldnmp() { 3) clear # Discuz論壇 - webname="Discuz论坛" + webname="Discuz論壇" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8311,7 +8360,7 @@ linux_ldnmp() { 5) clear # 蘋果CMS - webname="苹果CMS" + webname="蘋果CMS" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8358,7 +8407,7 @@ linux_ldnmp() { 6) clear # 獨腳數卡 - webname="独脚数卡" + webname="獨腳數卡" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8410,7 +8459,7 @@ linux_ldnmp() { 7) clear # flarum論壇 - webname="flarum论坛" + webname="flarum論壇" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8549,7 +8598,7 @@ linux_ldnmp() { 20) clear - webname="PHP动态站点" + webname="PHP動態站點" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8686,7 +8735,7 @@ linux_ldnmp() { 22) clear - webname="站点重定向" + webname="站點重定向" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8785,7 +8834,7 @@ linux_ldnmp() { 27) clear - webname="AI绘画提示词生成器" + webname="AI繪畫提示詞生成器" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -8825,7 +8874,7 @@ linux_ldnmp() { 30) clear - webname="静态站点" + webname="靜態站點" send_stats "安裝$webname" echo "開始部署$webname" add_yuming @@ -9273,6 +9322,8 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索${gl_kjlan}108. ${color108}LangBot聊天機器人" echo -e "${gl_kjlan}109. ${color109}ZFile在線網盤${gl_kjlan}110. ${color110}Karakeep書籤管理" echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}111. ${color111}多格式文件轉換工具" + echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" @@ -12822,8 +12873,30 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ + 111|convertx) + local app_id="111" + local docker_name="convertx" + local docker_img="ghcr.io/c4illin/convertx:latest" + local docker_port=8111 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:3000 \ + -v /home/docker/convertx:/app/data \ + ${docker_img} + } + + local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" + local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_use="" + local docker_passwd="" + local app_size="2" + docker_app + + ;; @@ -13123,6 +13196,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode else echo "使用官方鏡像源..." @@ -13134,6 +13208,7 @@ switch_mirror() { --upgrade-software "$upgrade_software" \ --clean-cache "$clean_cache" \ --ignore-backup-tips \ + --install-epel true \ --pure-mode fi } From 83863e4887880d39d88e25846eb7116bcfc7af99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 13:21:57 +0800 Subject: [PATCH 453/553] Update translate.yml --- .github/workflows/translate.yml | 126 +++++++++++--------------------- 1 file changed, 44 insertions(+), 82 deletions(-) diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml index 6e2d6b7de..215b3fef9 100644 --- a/.github/workflows/translate.yml +++ b/.github/workflows/translate.yml @@ -2,9 +2,8 @@ name: Weekly Translation Workflow on: schedule: - # 每周日 UTC 02:00 执行 (北京时间周日 10:00) - cron: '0 2 * * 0' - workflow_dispatch: # 允许手动触发 + workflow_dispatch: permissions: contents: write @@ -47,106 +46,72 @@ jobs: return bool(re.search(r'[\u4e00-\u9fff]', text)) def translate_text(text, target_lang): - if not text.strip() or not is_chinese(text): + if not text or not text.strip() or not is_chinese(text): return text try: + # 过滤掉仅由符号组成的文本 + if not re.search(r'[a-zA-Z\u4e00-\u9fff]', text): + return text return GoogleTranslator(source='zh-CN', target=target_lang).translate(text) except Exception as e: print(f"\nTranslation error: {e}") return text - def translate_line_preserving_variables(line, target_lang): + def process_content_with_vars(content, target_lang): """ - 处理 echo/read/send_stats 等命令中的中文,同时保护其中的 ${var} + 保护 ${var} 和 $var 不被翻译 """ - def repl(match): - full_string = match.group(0) - quote = full_string[0] - content = full_string[1:-1] - # 分割出变量,只翻译非变量部分 - parts = re.split(r'(\$\{?\w+\}?)', content) - translated_parts = [ - translate_text(p, target_lang) if is_chinese(p) else p - for p in parts - ] - return quote + ''.join(translated_parts) + quote - - return re.sub(r'(?:\'[^\']*\'|"[^"]*")', repl, line) + # 匹配 ${var} 或 $var (简单变量名) + parts = re.split(r'(\$\{?\w+\}?)', content) + translated_parts = [ + translate_text(p, target_lang) if is_chinese(p) else p + for p in parts + ] + return ''.join(translated_parts) - def translate_assignment_value(line, target_lang): - """ - 专门处理变量赋值语句:VAR="中文内容" -> VAR="Translated Content" - """ - # 匹配 key="value" 或 key='value' 格式,且 value 包含中文 - match = re.match(r'^(\s*[a-zA-Z_][a-zA-Z0-9_]*\s*=\s*)([\'"])(.*)([\'"])(.*)$', line) - if match: - prefix, quote_open, value, quote_close, suffix = match.groups() - if is_chinese(value): - # 同样要保护赋值内容里的 ${var} - parts = re.split(r'(\$\{?\w+\}?)', value) - translated_value = "".join([ - translate_text(p, target_lang) if is_chinese(p) else p - for p in parts - ]) - return f"{prefix}{quote_open}{translated_value}{quote_close}{suffix}\n" - return line + def translate_line(line, target_lang): + stripped = line.strip() + if not is_chinese(stripped): + return line + + # 1. 处理注释 (# 开头) + if stripped.startswith('#'): + comment_part = line.split('#', 1) + return comment_part[0] + '#' + translate_text(comment_part[1], target_lang) + '\n' + + # 2. 处理包含引号的内容 (适用于变量赋值 local var="..." 或 echo "...") + # 这个正则会寻找所有被单引号或双引号包裹的部分 + def quote_replacer(match): + quote = match.group(1) # ' 或 " + content = match.group(2) + return f"{quote}{process_content_with_vars(content, target_lang)}{quote}" + + # 匹配 '...' 或 "..." + new_line = re.sub(r'([\'"])(.*?)\1', quote_replacer, line) + return new_line def translate_file(input_file, output_file, target_lang): print(f"Translating to {target_lang}...") - - if not os.path.exists(input_file): - print(f"Error: Input file {input_file} not found") - return False + if not os.path.exists(input_file): return False with open(input_file, 'r', encoding='utf-8') as f: lines = f.readlines() - total_lines = len(lines) - with open(output_file, 'w', encoding='utf-8') as f_out: for i, line in enumerate(lines): - progress = (i + 1) / total_lines * 100 - print(f"\rProcessing: {progress:.1f}% ({i+1}/{total_lines})", end='') - - leading_space = re.match(r'^(\s*)', line).group(1) - stripped = line.strip() - - # 1. 处理注释 - if stripped.startswith('#') and is_chinese(stripped): - comment_text = stripped[1:].strip() - if comment_text: - translated = translate_text(comment_text, target_lang) - f_out.write(f"{leading_space}# {translated}\n") - else: - f_out.write(line) - - # 2. 处理常用交互命令 - elif any(cmd in stripped for cmd in ['echo', 'read', 'send_stats']) and is_chinese(stripped): - f_out.write(translate_line_preserving_variables(line, target_lang)) - - # 3. 处理变量赋值中的中文 (新增强化) - elif '=' in stripped and is_chinese(stripped): - f_out.write(translate_assignment_value(line, target_lang)) - - # 4. 其他行原样保留 - else: - f_out.write(line) + # 直接处理每一行,translate_line 内部会判断是否有中文 + f_out.write(translate_line(line, target_lang)) - print(f"\nTranslation to {target_lang} completed.") + print(f"Done: {target_lang}") return True if __name__ == "__main__": input_file = 'kejilion.sh' languages = {'en': 'en', 'tw': 'zh-TW', 'kr': 'ko', 'jp': 'ja'} - success_count = 0 for dir_name, lang_code in languages.items(): - output_file = f'{dir_name}/kejilion.sh' - if translate_file(input_file, output_file, lang_code): + if translate_file(input_file, f'{dir_name}/kejilion.sh', lang_code): success_count += 1 - print(f"✓ {dir_name} done") - print("-" * 30) - if success_count == 0: sys.exit(1) EOF @@ -172,17 +137,14 @@ jobs: git push env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + - name: Create summary if: always() run: | echo "## Translation Summary 📊" >> $GITHUB_STEP_SUMMARY - echo "| Language | Directory | Status |" >> $GITHUB_STEP_SUMMARY - echo "|----------|-----------|--------|" >> $GITHUB_STEP_SUMMARY + echo "| Language | Status |" >> $GITHUB_STEP_SUMMARY + echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY for dir in en tw kr jp; do - if [ -f "$dir/kejilion.sh" ]; then - echo "| $dir | /$dir/ | ✅ Success |" >> $GITHUB_STEP_SUMMARY - else - echo "| $dir | /$dir/ | ❌ Failed |" >> $GITHUB_STEP_SUMMARY - fi + [ -f "$dir/kejilion.sh" ] && status="✅ Success" || status="❌ Failed" + echo "| $dir | $status |" >> $GITHUB_STEP_SUMMARY done From 7c20ff0d2e7836f65a25e67e7b76f45e65140264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 13:26:27 +0800 Subject: [PATCH 454/553] Update translate.yml --- .github/workflows/translate.yml | 100 ++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml index 215b3fef9..01c152fc9 100644 --- a/.github/workflows/translate.yml +++ b/.github/workflows/translate.yml @@ -46,48 +46,59 @@ jobs: return bool(re.search(r'[\u4e00-\u9fff]', text)) def translate_text(text, target_lang): - if not text or not text.strip() or not is_chinese(text): + if not text.strip() or not is_chinese(text): return text try: - # 过滤掉仅由符号组成的文本 - if not re.search(r'[a-zA-Z\u4e00-\u9fff]', text): - return text - return GoogleTranslator(source='zh-CN', target=target_lang).translate(text) + # 过滤掉一些不该翻译的特殊符号 + clean_text = text.strip() + result = GoogleTranslator(source='zh-CN', target=target_lang).translate(clean_text) + return result except Exception as e: - print(f"\nTranslation error: {e}") + print(f"\n[Error] {e}") return text - + def process_content_with_vars(content, target_lang): """ - 保护 ${var} 和 $var 不被翻译 + 核心逻辑:保护 ${var} 和 $var,翻译其中的中文部分 """ - # 匹配 ${var} 或 $var (简单变量名) - parts = re.split(r'(\$\{?\w+\}?)', content) - translated_parts = [ - translate_text(p, target_lang) if is_chinese(p) else p - for p in parts - ] - return ''.join(translated_parts) + # 匹配 ${var} 或 $var (字母数字下划线) + parts = re.split(r'(\$\{\w+\}|\$\w+)', content) + translated_parts = [] + for p in parts: + if p.startswith('$'): # 变量部分,保持原样 + translated_parts.append(p) + elif is_chinese(p): # 中文部分,翻译 + translated_parts.append(translate_text(p, target_lang)) + else: # 其他英文/符号,保持原样 + translated_parts.append(p) + return "".join(translated_parts) - def translate_line(line, target_lang): + def universal_translator(line, target_lang): + """ + 通用翻译引擎:识别行内所有引号内容并翻译 + """ + # 1. 保护注释行 + leading_space = re.match(r'^(\s*)', line).group(1) stripped = line.strip() - if not is_chinese(stripped): - return line - - # 1. 处理注释 (# 开头) if stripped.startswith('#'): - comment_part = line.split('#', 1) - return comment_part[0] + '#' + translate_text(comment_part[1], target_lang) + '\n' + comment_content = stripped[1:].strip() + if is_chinese(comment_content): + return f"{leading_space}# {translate_text(comment_content, target_lang)}\n" + return line - # 2. 处理包含引号的内容 (适用于变量赋值 local var="..." 或 echo "...") - # 这个正则会寻找所有被单引号或双引号包裹的部分 - def quote_replacer(match): - quote = match.group(1) # ' 或 " - content = match.group(2) - return f"{quote}{process_content_with_vars(content, target_lang)}{quote}" + # 2. 识别所有引号内的内容 (双引号或单引号) + # 使用正则匹配引号对,同时处理转义引号 \" + def replacer(match): + quote_type = match.group(1) # ' 或 " + content = match.group(2) # 引号内的文本内容 + if is_chinese(content): + # 翻译内容,但保护里面的变量 + translated = process_content_with_vars(content, target_lang) + return f"{quote_type}{translated}{quote_type}" + return match.group(0) - # 匹配 '...' 或 "..." - new_line = re.sub(r'([\'"])(.*?)\1', quote_replacer, line) + # 匹配 "content" 或 'content' + new_line = re.sub(r'([\'"])(.*?)(?> $GITHUB_OUTPUT - else - echo "has_changes=true" >> $GITHUB_OUTPUT - fi + git diff --staged --quiet || echo "has_changes=true" >> $GITHUB_OUTPUT - name: Commit and push changes if: steps.check_changes.outputs.has_changes == 'true' From 96f21b8a2118318f24fee60966eba7ee3860739b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 24 Dec 2025 07:43:31 +0000 Subject: [PATCH 455/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-12-24=2007:43:31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 608 +++++++++++++++++++++++----------------------- jp/kejilion.sh | 648 ++++++++++++++++++++++++------------------------- kr/kejilion.sh | 618 +++++++++++++++++++++++----------------------- translate.py | 128 +++++----- tw/kejilion.sh | 506 +++++++++++++++++++------------------- 5 files changed, 1244 insertions(+), 1264 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index a6159b887..916de7124 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -560,7 +560,7 @@ while true; do echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + printf "%-25s %-25s %-25s\n" "Container name" "network name" "IP address" 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}') @@ -2248,10 +2248,10 @@ web_security() { 22) send_stats "High load enables 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When it detects high load, it will automatically open the shield, and when it detects low load, it will automatically close the shield for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When it detects high load, it will automatically open the shield. If the load is low, it will automatically close the shield for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" - echo -e "Go to my profile in the upper right corner of the cf backend, select the API token on the left, and get${gl_huang}Global API Key${gl_bai}" + echo -e "Go to my profile in the upper right corner of the cf backend, select the API token on the left, and obtain${gl_huang}Global API Key${gl_bai}" echo -e "Go to the bottom right of the cf backend domain name summary page to get it${gl_huang}Area ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -2334,7 +2334,7 @@ check_nginx_compression() { # Check whether zstd is on and uncommented (the whole line starts with zstd on;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status="zstd compression is on" + zstd_status="zstd compression is enabled" else zstd_status="" fi @@ -2936,7 +2936,7 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3440,7 +3440,7 @@ ldnmp_Proxy() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + sed -i "s/# dynamically add/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf update_nginx_listen_port "$yuming" "$access_port" @@ -3488,7 +3488,7 @@ ldnmp_Proxy_backend() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + sed -i "s/# dynamically add/$upstream_servers/g" /home/web/conf.d/$yuming.conf update_nginx_listen_port "$yuming" "$access_port" @@ -3505,7 +3505,7 @@ ldnmp_Proxy_backend() { list_stream_services() { STREAM_DIR="/home/web/stream.d" - printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + printf "%-25s %-18s %-25s %-20s\n" "Service name" "Communication type" "local address" "Backend address" if [ -z "$(ls -A "$STREAM_DIR")" ]; then return @@ -3672,7 +3672,7 @@ ldnmp_Proxy_backend_stream() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/stream.d/$proxy_name.conf + sed -i "s/# dynamically add/$upstream_servers/g" /home/web/stream.d/$proxy_name.conf docker exec nginx nginx -s reload clear @@ -4099,7 +4099,7 @@ list_forwarding_services() { local config_file="$1" # Print header - printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" + printf "%-20s %-25s %-30s %-10s\n" "Service name" "Intranet address" "External network address" "protocol" awk ' BEGIN { @@ -4295,7 +4295,7 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" ;; 5) echo "Reverse intranet penetration service into domain name access" @@ -4392,7 +4392,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" ;; 4) @@ -4432,9 +4432,9 @@ yt_menu_pro() { while true; do if [ -x "/usr/local/bin/yt-dlp" ]; then - local YTDLP_STATUS="${gl_lv}已安装${gl_bai}" + local YTDLP_STATUS="${gl_lv}Installed${gl_bai}" else - local YTDLP_STATUS="${gl_hui}未安装${gl_bai}" + local YTDLP_STATUS="${gl_hui}Not installed${gl_bai}" fi clear @@ -5513,7 +5513,7 @@ clamav_scan() { clamav/clamav-debian:latest \ clamscan -r --log=/var/log/clamav/scan.log $SCAN_PARAMS - echo -e "${gl_lv}$@ The scan is completed and the virus report is stored in${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" + echo -e "${gl_lv}$@ 扫描完成,病毒报告存放在${gl_huang}/home/docker/clamav/log/scan.log${gl_bai}" echo -e "${gl_lv}If there is a virus please${gl_huang}scan.log${gl_lv}Search the file for the FOUND keyword to confirm the location of the virus${gl_bai}" } @@ -5703,7 +5703,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -5768,7 +5768,7 @@ Kernel_optimize() { 1) cd ~ clear - local tiaoyou_moshi="高性能优化模式" + local tiaoyou_moshi="High performance optimization mode" optimize_high_performance send_stats "High performance mode optimization" ;; @@ -5782,19 +5782,19 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ clear - local tiaoyou_moshi="直播优化模式" + local tiaoyou_moshi="Live broadcast optimization mode" optimize_high_performance send_stats "Live streaming optimization" ;; 5) cd ~ clear - local tiaoyou_moshi="游戏服优化模式" + local tiaoyou_moshi="Game server optimization mode" optimize_high_performance send_stats "Game server optimization" ;; @@ -6232,7 +6232,7 @@ add_connection() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started entering the key content, continue adding + # If it is the first line or you have already started to enter the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi @@ -6580,7 +6580,7 @@ add_task() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started entering the key content, continue adding + # If it is the first line or you have already started to enter the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi @@ -6717,7 +6717,7 @@ run_task() { else echo "Sync failed! Please check the following:" echo "1. Is the network connection normal?" - echo "2. Whether the remote host is accessible" + echo "2. Is the remote host accessible?" echo "3. Is the authentication information correct?" echo "4. Do the local and remote directories have correct access permissions?" fi @@ -6875,7 +6875,7 @@ linux_info() { 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 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 day ", run_days); if (run_hours > 0) printf("%d hour ", run_hours); printf("%d minute\n", run_minutes)}') local timezone=$(current_timezone) @@ -6932,7 +6932,7 @@ linux_tools() { while true; do clear - # send_stats "Basic tools" + # send_stats "Basic Tools" echo -e "basic tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" @@ -7342,7 +7342,7 @@ docker_ssh_migration() { mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # volume mapping + # Volume mapping local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done @@ -7507,7 +7507,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in using key + # Log in with key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7648,7 +7648,7 @@ linux_docker() { echo "------------------------------------------------------------" container_ids=$(docker ps -q) - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + printf "%-25s %-25s %-25s\n" "Container name" "network name" "IP address" 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") @@ -7734,7 +7734,7 @@ linux_docker() { case $sub_choice in 1) - send_stats "Create new volume" + send_stats "Create a new volume" read -e -p "Set new volume name:" dockerjuan docker volume create $dockerjuan @@ -7874,7 +7874,7 @@ linux_test() { echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" echo -e "${gl_kjlan}15. ${gl_bai}nxtrace specifies IP backhaul test script" echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three network line test" - echo -e "${gl_kjlan}17. ${gl_bai}i-abc multi-function speed test script" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunctional speed test script" echo -e "${gl_kjlan}18. ${gl_bai}NetQuality network quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" @@ -8260,8 +8260,8 @@ linux_ldnmp() { echo -e "${gl_huang}31. ${gl_bai}Site data management${gl_huang}★${gl_bai} ${gl_huang}32. ${gl_bai}Back up site-wide data" echo -e "${gl_huang}33. ${gl_bai}Scheduled remote backup${gl_huang}34. ${gl_bai}Restore whole site data" echo -e "${gl_huang}------------------------" - echo -e "${gl_huang}35. ${gl_bai}防护LDNMP环境 ${gl_huang}36. ${gl_bai}Optimize LDNMP environment" - echo -e "${gl_huang}37. ${gl_bai}更新LDNMP环境 ${gl_huang}38. ${gl_bai}Uninstall the LDNMP environment" + echo -e "${gl_huang}35. ${gl_bai}Protect LDNMP environments${gl_huang}36. ${gl_bai}Optimize LDNMP environment" + echo -e "${gl_huang}37. ${gl_bai}Update LDNMP environment${gl_huang}38. ${gl_bai}Uninstall the LDNMP environment" echo -e "${gl_huang}------------------------" echo -e "${gl_huang}0. ${gl_bai}Return to main menu" echo -e "${gl_huang}------------------------${gl_bai}" @@ -9258,7 +9258,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}------------------------" @@ -9335,7 +9335,7 @@ while true; do 1|bt|baota) local app_id="1" local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" + local panelname="pagoda panel" local panelurl="https://www.bt.cn/new/index.html" panel_app_install() { @@ -9428,10 +9428,10 @@ while true; do } - local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" + local docker_describe="An Nginx reverse proxy tool panel that does not support adding domain name access." + local docker_url="Official website introduction: https://nginxproxymanager.com/" + local docker_use="echo \"Initial username: admin@example.com\"" + local docker_passwd="echo \"Initial password: changeme\"" local app_size="1" docker_app @@ -9463,8 +9463,8 @@ while true; do } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_describe="A file listing program that supports multiple storages, web browsing and WebDAV, powered by gin and Solidjs" + local docker_url="Official website introduction: https://github.com/OpenListTeam/OpenList" local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" @@ -9504,8 +9504,8 @@ while true; do } - local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="webtop is an Ubuntu-based container. If the IP cannot be accessed, please add a domain name for access." + local docker_url="Official website introduction: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -9584,8 +9584,8 @@ while true; do } - local docker_describe="qbittorrent离线BT磁力下载服务" - local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent" + local docker_describe="qbittorrent offline BT magnetic download service" + local docker_url="Official website introduction: https://hub.docker.com/r/linuxserver/qbittorrent" local docker_use="sleep 3" local docker_passwd="docker logs qbittorrent" local app_size="1" @@ -9708,7 +9708,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App has been uninstalled" + echo "App uninstalled" ;; *) @@ -9724,9 +9724,9 @@ while true; do 10|rocketchat) local app_id="10" - local app_name="Rocket.Chat聊天系统" - local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," - local app_url="官方介绍: https://www.rocket.chat/" + local app_name="Rocket.Chat chat system" + local app_text="Rocket.Chat is an open source team communication platform that supports real-time chat, audio and video calls, file sharing and other functions." + local app_url="Official introduction: https://www.rocket.chat/" local docker_name="rocketchat" local docker_port="3897" local app_size="2" @@ -9762,7 +9762,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -9792,10 +9792,10 @@ while true; do } - local docker_describe="禅道是通用的项目管理软件" - local docker_url="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" + local docker_describe="ZenTao is a universal project management software" + local docker_url="Official website introduction: https://www.zentao.net/" + local docker_use="echo \"Initial username: admin\"" + local docker_passwd="echo \"Initial password: 123456\"" local app_size="2" docker_app @@ -9821,8 +9821,8 @@ while true; do } - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_describe="Qinglong Panel is a scheduled task management platform" + local docker_url="Official website introduction:${gh_proxy}github.com/whyour/qinglong" local docker_use="" local docker_passwd="" local app_size="1" @@ -9832,9 +9832,9 @@ while true; do 13|cloudreve) local app_id="13" - local app_name="cloudreve网盘" - local app_text="cloudreve是一个支持多家云存储的网盘系统" - local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" + local app_name="cloudreve network disk" + local app_text="cloudreve is a network disk system that supports multiple cloud storages" + local app_url="Video introduction: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" local docker_name="cloudreve" local docker_port="5212" local app_size="2" @@ -9860,7 +9860,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -9886,8 +9886,8 @@ while true; do } - local docker_describe="简单图床是一个简单的图床程序" - local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0" + local docker_describe="Simple drawing bed is a simple drawing bed program" + local docker_url="Official website introduction:${gh_proxy}github.com/icret/EasyImages2.0" local docker_use="" local docker_passwd="" local app_size="1" @@ -9914,8 +9914,8 @@ while true; do } - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" + local docker_describe="emby is a master-slave architecture media server software that can be used to organize video and audio on the server and stream audio and video to client devices" + local docker_url="Official website introduction: https://emby.media/" local docker_use="" local docker_passwd="" local app_size="1" @@ -9935,8 +9935,8 @@ while true; do } - local docker_describe="Speedtest测速面板是一个VPS网速测试工具,多项测试功能,还可以实时监控VPS进出站流量" - local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als" + local docker_describe="Speedtest speed measurement panel is a VPS network speed test tool with multiple test functions and can also monitor VPS inbound and outbound traffic in real time." + local docker_url="Official website introduction:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" local app_size="1" @@ -9966,8 +9966,8 @@ while true; do } - local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/adguard/adguardhome" + local docker_describe="AdGuardHome is a network-wide ad blocking and anti-tracking software that will be more than just a DNS server in the future." + local docker_url="Official website introduction: https://hub.docker.com/r/adguard/adguardhome" local docker_use="" local docker_passwd="" local app_size="1" @@ -9995,8 +9995,8 @@ while true; do } - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" + local docker_describe="onlyoffice is an open source online office tool, so powerful!" + local docker_url="Official website introduction: https://www.onlyoffice.com/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10092,8 +10092,8 @@ while true; do } - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" + local docker_describe="portainer is a lightweight docker container management panel" + local docker_url="Official website introduction: https://www.portainer.io/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10115,8 +10115,8 @@ while true; do } - local docker_describe="VScode是一款强大的在线代码编写工具" - local docker_url="官网介绍: ${gh_proxy}github.com/coder/code-server" + local docker_describe="VScode is a powerful online code writing tool" + local docker_url="Official website introduction:${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" @@ -10143,8 +10143,8 @@ while true; do } - local docker_describe="Uptime Kuma 易于使用的自托管监控工具" - local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_describe="Uptime Kuma Easy-to-use self-hosted monitoring tool" + local docker_url="Official website introduction:${gh_proxy}github.com/louislam/uptime-kuma" local docker_use="" local docker_passwd="" local app_size="1" @@ -10163,8 +10163,8 @@ while true; do } - local docker_describe="Memos是一款轻量级、自托管的备忘录中心" - local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_describe="Memos is a lightweight, self-hosted memo center" + local docker_url="Official website introduction:${gh_proxy}github.com/usememos/memos" local docker_use="" local docker_passwd="" local app_size="1" @@ -10204,8 +10204,8 @@ while true; do } - local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="webtop is based on the Chinese version of Alpine container. If the IP cannot be accessed, please add a domain name for access." + local docker_url="Official website introduction: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10225,9 +10225,9 @@ while true; do } - local docker_describe="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" + local docker_describe="With over 400,000 deployments, Nextcloud is the most popular local content collaboration platform you can download" + local docker_url="Official website introduction: https://nextcloud.com/" + local docker_use="echo \"Account: nextcloud Password:$rootpasswd\"" local docker_passwd="" local app_size="3" docker_app @@ -10245,8 +10245,8 @@ while true; do } - local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架" - local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/" + local docker_describe="QD-Today is an HTTP request scheduled task automatic execution framework" + local docker_url="Official website introduction: https://qd-today.github.io/qd/zh_CN/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10265,8 +10265,8 @@ while true; do } - local docker_describe="dockge是一个可视化的docker-compose容器管理面板" - local docker_url="官网介绍: ${gh_proxy}github.com/louislam/dockge" + local docker_describe="dockge is a visual docker-compose container management panel" + local docker_url="Official website introduction:${gh_proxy}github.com/louislam/dockge" local docker_use="" local docker_passwd="" local app_size="1" @@ -10285,8 +10285,8 @@ while true; do } - local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具,即开即用" - local docker_url="官网介绍: ${gh_proxy}github.com/librespeed/speedtest" + local docker_describe="librespeed is a lightweight speed testing tool implemented in Javascript that can be used out of the box" + local docker_url="Official website introduction:${gh_proxy}github.com/librespeed/speedtest" local docker_use="" local docker_passwd="" local app_size="1" @@ -10310,8 +10310,8 @@ while true; do } - local docker_describe="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" + local docker_describe="searxng is a private and private search engine site" + local docker_url="Official website introduction: https://hub.docker.com/r/alandoyle/searxng" local docker_use="" local docker_passwd="" local app_size="1" @@ -10342,9 +10342,9 @@ while true; do } - local docker_describe="photoprism非常强大的私有相册系统" - local docker_url="官网介绍: https://www.photoprism.app/" - local docker_use="echo \"账号: admin 密码: $rootpasswd\"" + local docker_describe="Photoprism is a very powerful private photo album system" + local docker_url="Official website introduction: https://www.photoprism.app/" + local docker_use="echo \"Account: admin Password:$rootpasswd\"" local docker_passwd="" local app_size="1" docker_app @@ -10370,8 +10370,8 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。" - local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" + local docker_describe="This is a powerful locally hosted web-based PDF manipulation tool using docker that allows you to perform various operations on PDF files such as split merge, convert, reorganize, add images, rotate, compress, etc." + local docker_url="Official website introduction:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" local app_size="1" @@ -10391,8 +10391,8 @@ while true; do } - local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" - local docker_url="官网介绍: https://www.drawio.com/" + local docker_describe="This is a powerful charting software. You can draw mind maps, topology diagrams, and flow charts." + local docker_url="Official website introduction: https://www.drawio.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10416,9 +10416,9 @@ while true; do } - 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_describe="Sun-Panel server, NAS navigation panel, Homepage, browser homepage" + local docker_url="Official website introduction: https://doc.sun-panel.top/zh_cn/" + local docker_use="echo \"Account: admin@sun.cc Password: 12345678\"" local docker_passwd="" local app_size="1" docker_app @@ -10440,8 +10440,8 @@ while true; do stonith404/pingvin-share } - local docker_describe="Pingvin Share 是一个可自建的文件分享平台,是 WeTransfer 的一个替代品" - local docker_url="官网介绍: ${gh_proxy}github.com/stonith404/pingvin-share" + local docker_describe="Pingvin Share is a self-buildable file sharing platform and an alternative to WeTransfer" + local docker_url="Official website introduction:${gh_proxy}github.com/stonith404/pingvin-share" local docker_use="" local docker_passwd="" local app_size="1" @@ -10467,9 +10467,9 @@ while true; do } - local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" + local docker_describe="Minimalist Moments, high imitation WeChat Moments, record your wonderful life" local docker_url="Official website introduction:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" - local docker_use="echo \"账号: admin 密码: a123456\"" + local docker_use="echo \"Account: admin Password: a123456\"" local docker_passwd="" local app_size="1" docker_app @@ -10491,8 +10491,8 @@ while true; do 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_describe="LobeChat aggregates the mainstream AI large models on the market, ChatGPT/Claude/Gemini/Groq/Ollama" + local docker_url="Official website introduction:${gh_proxy}github.com/lobehub/lobe-chat" local docker_use="" local docker_passwd="" local app_size="2" @@ -10512,8 +10512,8 @@ while true; do } - local docker_describe="是一个多功能IP工具箱,可以查看自己IP信息及连通性,用网页面板呈现" - local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md" + local docker_describe="It is a multifunctional IP toolbox that allows you to view your own IP information and connectivity, and displays it using a web panel." + local docker_url="Official website introduction:${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md" local docker_use="" local docker_passwd="" local app_size="1" @@ -10546,8 +10546,8 @@ while true; do } - local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具" - local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/bililive-go" + local docker_describe="Bililive-go is a live broadcast recording tool that supports multiple live broadcast platforms" + local docker_url="Official website introduction:${gh_proxy}github.com/hr3lxphr6j/bililive-go" local docker_use="" local docker_passwd="" local app_size="1" @@ -10563,8 +10563,8 @@ while true; do 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_describe="Simple online ssh connection tool and sftp tool" + local docker_url="Official website introduction:${gh_proxy}github.com/Jrohy/webssh" local docker_use="" local docker_passwd="" local app_size="1" @@ -10575,8 +10575,8 @@ while true; do local app_id="41" local lujing="[ -d "/www/server/panel" ]" - local panelname="耗子面板" - local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/panel" + local panelname="mouse panel" + local panelurl="Official address:${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 @@ -10616,8 +10616,8 @@ while true; do } - local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。" - local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm" + local docker_describe="nexterm is a powerful online SSH/VNC/RDP connection tool." + local docker_url="Official website introduction:${gh_proxy}github.com/gnmyt/Nexterm" local docker_use="" local docker_passwd="" local app_size="1" @@ -10637,10 +10637,10 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(服务端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" + local docker_describe="Rustdesk's open source remote desktop (server) is similar to its own Sunflower private server." + local docker_url="Official website introduction: https://rustdesk.com/zh-cn/" local docker_use="docker logs hbbs" - local docker_passwd="echo \"把你的IP和key记录下,会在远程桌面客户端中用到。去44选项装中继端吧!\"" + local docker_passwd="echo \"Record your IP and key, which will be used in the remote desktop client. Go to option 44 to install the relay!\"" local app_size="1" docker_app ;; @@ -10657,9 +10657,9 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(中继端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" - local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\"" + local docker_describe="Rustdesk's open source remote desktop (relay) is similar to its own Sunflower private server." + local docker_url="Official website introduction: https://rustdesk.com/zh-cn/" + local docker_use="echo \"Go to the official website to download the remote desktop client: https://rustdesk.com/zh-cn/\"" local docker_passwd="" local app_size="1" docker_app @@ -10683,8 +10683,8 @@ while true; do } - local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。" - local docker_url="官网介绍: https://hub.docker.com/_/registry" + local docker_describe="Docker Registry is a service for storing and distributing Docker images." + local docker_url="Official website introduction: https://hub.docker.com/_/registry" local docker_use="" local docker_passwd="" local app_size="2" @@ -10703,8 +10703,8 @@ while true; do } - local docker_describe="使用Go实现的GHProxy,用于加速部分地区Github仓库的拉取。" - local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy" + local docker_describe="GHProxy implemented using Go is used to accelerate the pulling of Github repositories in some areas." + local docker_url="Official website introduction: https://github.com/WJQSERVER-STUDIO/ghproxy" local docker_use="" local docker_passwd="" local app_size="1" @@ -10714,9 +10714,9 @@ while true; do 47|prometheus|grafana) local app_id="47" - local app_name="普罗米修斯监控" - local app_text="Prometheus+Grafana企业级监控系统" - local app_url="官网介绍: https://prometheus.io" + local app_name="Prometheus monitoring" + local app_text="Prometheus+Grafana enterprise-level monitoring system" + local app_url="Official website introduction: https://prometheus.io" local docker_name="grafana" local docker_port="8047" local app_size="2" @@ -10745,7 +10745,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10768,8 +10768,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_describe="This is a Prometheus host data collection component, please deploy it on the monitored host." + local docker_url="Official website introduction: https://github.com/prometheus/node_exporter" local docker_use="" local docker_passwd="" local app_size="1" @@ -10798,8 +10798,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_describe="This is a Prometheus container data collection component, please deploy it on the monitored host." + local docker_url="Official website introduction: https://github.com/google/cadvisor" local docker_use="" local docker_passwd="" local app_size="1" @@ -10821,8 +10821,8 @@ while true; do } - local docker_describe="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" + local docker_describe="This is a small tool for website change detection, replenishment monitoring and notification" + local docker_url="Official website introduction: https://github.com/dgtlmoon/changedetection.io" local docker_use="" local docker_passwd="" local app_size="1" @@ -10854,8 +10854,8 @@ while true; do } - local docker_describe="Docker可视化面板系统,提供完善的docker管理功能。" - local docker_url="官网介绍: https://github.com/donknap/dpanel" + local docker_describe="Docker visual panel system provides complete docker management functions." + local docker_url="Official website introduction: https://github.com/donknap/dpanel" local docker_use="" local docker_passwd="" local app_size="1" @@ -10874,8 +10874,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的llama3大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + local docker_describe="OpenWebUI is a large language model web page framework that is connected to the new llama3 large language model." + local docker_url="Official website introduction: 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" @@ -10886,8 +10886,8 @@ while true; do local app_id="54" local lujing="[ -d "/www/server/panel" ]" - local panelname="AMH面板" - local panelurl="官方地址: https://amh.sh/index.htm?amh" + local panelname="AMH panel" + local panelurl="Official address: https://amh.sh/index.htm?amh" panel_app_install() { cd ~ @@ -10926,8 +10926,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的DeepSeek R1大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + local docker_describe="OpenWebUI is a large language model web page framework that is connected to the new DeepSeek R1 large language model." + local docker_url="Official website introduction: 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" @@ -10937,9 +10937,9 @@ while true; do 58|dify) local app_id="58" - local app_name="Dify知识库" - local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" - local app_url="官方网站: https://docs.dify.ai/zh-hans" + local app_name="DifyKnowledge Base" + local app_text="It is an open source large language model (LLM) application development platform. Self-hosted training data for AI generation" + local app_url="Official website: https://docs.dify.ai/zh-hans" local docker_name="docker-nginx-1" local docker_port="8058" local app_size="3" @@ -10972,7 +10972,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10982,8 +10982,8 @@ while true; do 59|new-api) local app_id="59" local app_name="NewAPI" - local app_text="新一代大模型网关与AI资产管理系统" - local app_url="官方网站: https://github.com/Calcium-Ion/new-api" + local app_text="New generation of large model gateway and AI asset management system" + local app_url="Official website: https://github.com/Calcium-Ion/new-api" local docker_name="new-api" local docker_port="8059" local app_size="3" @@ -11023,7 +11023,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11034,9 +11034,9 @@ while true; do 60|jms) local app_id="60" - local app_name="JumpServer开源堡垒机" - local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" - local app_url="官方介绍: https://github.com/jumpserver/jumpserver" + local app_name="JumpServer open source bastion machine" + local app_text="It is an open source privileged access management (PAM) tool. This program occupies port 80 and does not support adding domain names for access." + local app_url="Official introduction: https://github.com/jumpserver/jumpserver" local docker_name="jms_web" local docker_port="80" local app_size="2" @@ -11064,7 +11064,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11086,8 +11086,8 @@ while true; do } - local docker_describe="免费开源机器翻译 API,完全自托管,它的翻译引擎由开源Argos Translate库提供支持。" - local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate" + local docker_describe="Free open source machine translation API, fully self-hosted, and its translation engine is powered by the open source Argos Translate library." + local docker_url="Official website introduction: https://github.com/LibreTranslate/LibreTranslate" local docker_use="" local docker_passwd="" local app_size="5" @@ -11098,9 +11098,9 @@ while true; do 62|ragflow) local app_id="62" - local app_name="RAGFlow知识库" - local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" - local app_url="官方网站: https://github.com/infiniflow/ragflow" + local app_name="RAGFlow knowledge base" + local app_text="Open source RAG (Retrieval Augmented Generation) engine based on deep document understanding" + local app_url="Official website: https://github.com/infiniflow/ragflow" local docker_name="ragflow-server" local docker_port="8062" local app_size="8" @@ -11127,7 +11127,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11147,8 +11147,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,官方精简版本,支持各大模型API接入" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + local docker_describe="OpenWebUI is a large language model web page framework, the official simplified version supports API access to all major models." + local docker_url="Official website introduction: https://github.com/open-webui/open-webui" local docker_use="" local docker_passwd="" local app_size="3" @@ -11165,8 +11165,8 @@ while true; do docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } - local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" - local docker_url="官网介绍: https://github.com/CorentinTh/it-tools" + local docker_describe="Very useful tool for developers and IT workers" + local docker_url="Official website introduction: https://github.com/CorentinTh/it-tools" local docker_use="" local docker_passwd="" local app_size="1" @@ -11201,8 +11201,8 @@ while true; do } - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_describe="It is a powerful automated workflow platform" + local docker_url="Official website introduction: https://github.com/n8n-io/n8n" local docker_use="" local docker_passwd="" local app_size="1" @@ -11230,8 +11230,8 @@ while true; do } - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_describe="Automatically update your public IP (IPv4/IPv6) to major DNS service providers in real time to achieve dynamic domain name resolution." + local docker_url="Official website introduction: https://github.com/jeessy2/ddns-go" local docker_use="" local docker_passwd="" local app_size="1" @@ -11248,10 +11248,10 @@ while true; do docker run -d --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 \"用户名: allinssl 密码: allinssldocker\"" + local docker_describe="Open source free SSL certificate automation management platform" + local docker_url="Official website introduction: https://allinssl.com" + local docker_use="echo \"Security entrance: /allinssl\"" + local docker_passwd="echo \"Username: allinssl Password: allinssldocker\"" local app_size="1" docker_app ;; @@ -11280,8 +11280,8 @@ while true; do } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" + local docker_describe="Open source free anytime, anywhere SFTP FTP WebDAV file transfer tool" + local docker_url="Official website introduction: https://sftpgo.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11312,9 +11312,9 @@ while true; do } - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_describe="Open source AI chatbot framework, supporting WeChat, QQ, and TG access to large AI models" + local docker_url="Official website introduction: https://astrbot.app/" + local docker_use="echo \"Username: astrbot Password: astrbot\"" local docker_passwd="" local app_size="1" docker_app @@ -11341,8 +11341,8 @@ while true; do } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" + local docker_describe="Is a lightweight, high-performance music streaming server" + local docker_url="Official website introduction: https://www.navidrome.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11368,8 +11368,8 @@ while true; do } - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" + local docker_describe="A password manager that puts you in control of your data" + local docker_url="Official website introduction: https://bitwarden.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11400,8 +11400,8 @@ while true; do } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_describe="Free online video search and viewing platform" + local docker_url="Official website introduction: https://github.com/LibreSpark/LibreTV" local docker_use="" local docker_passwd="" local app_size="1" @@ -11415,9 +11415,9 @@ while true; do local app_id="74" - local app_name="moontv私有影视" - local app_text="免费在线视频搜索与观看平台" - local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local app_name="moontv private film and television" + local app_text="Free online video search and viewing platform" + local app_url="Video introduction: https://github.com/MoonTechLab/LunaTV" local docker_name="moontv-core" local docker_port="8074" local app_size="2" @@ -11455,7 +11455,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11482,8 +11482,8 @@ while true; do } - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_describe="Your music wizard, designed to help you better manage your music." + local docker_url="Official website introduction: https://github.com/foamzou/melody" local docker_use="" local docker_passwd="" local app_size="1" @@ -11509,8 +11509,8 @@ while true; do } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_describe="It is a Chinese DOS game collection website" + local docker_url="Official website introduction: https://github.com/rwv/chinese-dos-games" local docker_use="" local docker_passwd="" local app_size="2" @@ -11544,9 +11544,9 @@ while true; do } - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_describe="Xunlei, your offline high-speed BT magnetic download tool" + local docker_url="Official website introduction: https://github.com/cnk3x/xunlei" + local docker_use="echo \"Log in to Xunlei with your mobile phone, and then enter the invitation code. Invitation code: Xunlei Niutong\"" local docker_passwd="" local app_size="1" docker_app @@ -11559,8 +11559,8 @@ while true; do local app_id="78" local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local app_text="PandaWiki is an open source intelligent document management system driven by AI large models. It is strongly recommended not to customize port deployment." + local app_url="Official introduction: https://github.com/chaitin/PandaWiki" local docker_name="panda-wiki-nginx" local docker_port="2443" local app_size="2" @@ -11602,8 +11602,8 @@ while true; do } - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_describe="Beszel is lightweight and easy-to-use server monitoring" + local docker_url="Official website introduction: https://beszel.dev/zh/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11615,9 +11615,9 @@ while true; do 80|linkwarden) local app_id="80" - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" + local app_name="linkwarden bookmark management" + local app_text="An open source, self-hosted bookmark management platform that supports tagging, search, and team collaboration." + local app_url="Official website: https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -11676,7 +11676,7 @@ while true; do docker_app_uninstall() { cd /home/docker/linkwarden && docker compose down --rmi all rm -rf /home/docker/linkwarden - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11687,9 +11687,9 @@ while true; do 81|jitsi) local app_id="81" - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" + local app_name="JitsiMeet video conference" + local app_text="An open source secure video conferencing solution that supports multi-person online conferencing, screen sharing and encrypted communication." + local app_url="Official website: https://jitsi.org/" local docker_name="jitsi" local docker_port="8081" local app_size="3" @@ -11726,7 +11726,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11755,8 +11755,8 @@ while true; do } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_describe="High-performance AI interface transparent proxy service" + local docker_url="Official website introduction: https://www.gpt-load.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11788,9 +11788,9 @@ while true; do } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_describe="Lightweight self-hosted server monitoring tool" + local docker_url="Official website introduction: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"Default account: admin Default password: 1212156\"" local docker_passwd="" local app_size="1" docker_app @@ -11819,8 +11819,8 @@ while true; do } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_describe="Open source personal subscription tracker for financial management" + local docker_url="Official website introduction: https://github.com/ellite/Wallos" local docker_use="" local docker_passwd="" local app_size="1" @@ -11831,9 +11831,9 @@ while true; do 85|immich) local app_id="85" - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" + local app_name="immich picture video manager" + local app_text="High-performance self-hosted photo and video management solution." + local app_url="Official website introduction: https://github.com/immich-app/immich" local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -11862,7 +11862,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -11897,8 +11897,8 @@ while true; do } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" + local docker_describe="Is an open source media server software" + local docker_url="Official website introduction: https://jellyfin.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11925,9 +11925,9 @@ while true; do } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_describe="A program to watch movies and live broadcasts together remotely. It provides simultaneous viewing, live broadcast, chat and other functions" + local docker_url="Official website introduction: https://github.com/synctv-org/synctv" + local docker_use="echo \"Initial account and password: root. Please change the login password in time after logging in\"" local docker_passwd="" local app_size="1" docker_app @@ -11955,10 +11955,10 @@ while true; do } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local docker_describe="Open source, free self-built live broadcast platform" + local docker_url="Official website introduction: https://owncast.online" + local docker_use="echo \"The access address is followed by /admin to access the administrator page\"" + local docker_passwd="echo \"Initial account: admin Initial password: abc123 Please change the login password in time after logging in\"" local app_size="1" docker_app @@ -11984,10 +11984,10 @@ while true; do } - local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" - local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" - local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" + local docker_describe="Share texts and files with anonymous passwords, and pick up files like express delivery" + local docker_url="Official website introduction: https://github.com/vastsa/FileCodeBox" + local docker_use="echo \"The access address is followed by /#/admin to access the administrator page\"" + local docker_passwd="echo \"Administrator password: FileCodeBox2023\"" local app_size="1" docker_app @@ -12040,8 +12040,8 @@ while true; do } - local docker_describe="Matrix是一个去中心化的聊天协议" - local docker_url="官网介绍: https://matrix.org/" + local docker_describe="Matrix is ​​a decentralized chat protocol" + local docker_url="Official website introduction: https://matrix.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12055,9 +12055,9 @@ while true; do local app_id="91" - local app_name="gitea私有代码仓库" - local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" - local app_url="视频介绍: https://github.com/go-gitea/gitea" + local app_name="gitea private code repository" + local app_text="A free new generation code hosting platform that provides an experience close to GitHub." + local app_url="Video introduction: https://github.com/go-gitea/gitea" local docker_name="gitea" local docker_port="8091" local app_size="2" @@ -12089,7 +12089,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12119,8 +12119,8 @@ while true; do } - local docker_describe="是一个基于Web的文件管理器" - local docker_url="官网介绍: https://filebrowser.org/" + local docker_describe="Is a web-based file manager" + local docker_url="Official website introduction: https://filebrowser.org/" local docker_use="docker logs filebrowser" local docker_passwd="" local app_size="1" @@ -12146,8 +12146,8 @@ while true; do } - local docker_describe="极简静态文件服务器,支持上传下载" - local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_describe="Minimalist static file server, supports upload and download" + local docker_url="Official website introduction: https://github.com/sigoden/dufs" local docker_use="" local docker_passwd="" local app_size="1" @@ -12177,8 +12177,8 @@ while true; do } - local docker_describe="分布式高速下载工具,支持多种协议" - local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_describe="Distributed high-speed download tool, supporting multiple protocols" + local docker_url="Official website introduction: https://github.com/GopeedLab/gopeed" local docker_use="" local docker_passwd="" local app_size="1" @@ -12192,9 +12192,9 @@ while true; do local app_id="95" - local app_name="paperless文档管理平台" - local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" - local app_url="视频介绍: https://docs.paperless-ngx.com/" + local app_name="paperless document management platform" + local app_text="An open source electronic document management system, its main purpose is to digitize and manage your paper documents." + local app_url="Video introduction: https://docs.paperless-ngx.com/" local docker_name="paperless-webserver-1" local docker_port="8095" local app_size="2" @@ -12227,7 +12227,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12240,9 +12240,9 @@ while true; do local app_id="96" - local app_name="2FAuth自托管二步验证器" - local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" - local app_url="官网: https://github.com/Bubka/2FAuth" + local app_name="2FAuth self-hosted two-step authenticator" + local app_text="Self-hosted two-factor authentication (2FA) account management and verification code generation tool." + local app_url="Official website: https://github.com/Bubka/2FAuth" local docker_name="2fauth" local docker_port="8096" local app_size="1" @@ -12281,7 +12281,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12387,8 +12387,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="Modern, high-performance virtual private network tools" + local docker_url="Official website introduction: https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12457,8 +12457,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="Modern, high-performance virtual private network tools" + local docker_url="Official website introduction: https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12471,9 +12471,9 @@ while true; do local app_id="99" - local app_name="dsm群晖虚拟机" - local app_text="Docker容器中的虚拟DSM" - local app_url="官网: https://github.com/vdsm/virtual-dsm" + local app_name="dsm Synology virtual machine" + local app_text="Virtual DSM in Docker container" + local app_url="Official website: https://github.com/vdsm/virtual-dsm" local docker_name="dsm" local docker_port="8099" local app_size="16" @@ -12514,7 +12514,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12543,8 +12543,8 @@ while true; do syncthing/syncthing:latest } - local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" - local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_describe="An open source peer-to-peer file synchronization tool, similar to Dropbox and Resilio Sync, but completely decentralized." + local docker_url="Official website introduction: https://github.com/syncthing/syncthing" local docker_use="" local docker_passwd="" local app_size="1" @@ -12555,9 +12555,9 @@ while true; do 101|moneyprinterturbo) local app_id="101" - local app_name="AI视频生成工具" - local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" - local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local app_name="AI video generation tool" + local app_text="MoneyPrinterTurbo is a tool that uses AI large models to synthesize high-definition short videos" + local app_url="Official website: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" local app_size="3" @@ -12584,7 +12584,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12610,8 +12610,8 @@ while true; do } - local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" - local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_describe="It is a personal cloud social media chat service that supports independent deployment." + local docker_url="Official website introduction: https://github.com/Privoce/vocechat-web" local docker_use="" local docker_passwd="" local app_size="1" @@ -12622,9 +12622,9 @@ while true; do 103|umami) local app_id="103" - local app_name="Umami网站统计工具" - local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" - local app_url="官方网站: https://github.com/umami-software/umami" + local app_name="Umami website statistics tool" + local app_text="Open source, lightweight, privacy-friendly website analysis tool, similar to Google Analytics." + local app_url="Official website: https://github.com/umami-software/umami" local docker_name="umami-umami-1" local docker_port="8103" local app_size="1" @@ -12653,7 +12653,7 @@ while true; do docker_app_uninstall() { cd /home/docker/umami/ && docker compose down --rmi all rm -rf /home/docker/umami - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12689,8 +12689,8 @@ while true; do } - local docker_describe="思源笔记是一款隐私优先的知识管理系统" - local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_describe="Siyuan Notes is a privacy-first knowledge management system" + local docker_url="Official website introduction: https://github.com/siyuan-note/siyuan" local docker_use="" local docker_passwd="" local app_size="1" @@ -12716,8 +12716,8 @@ while true; do } - local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" - local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_describe="It is a powerful open source whiteboard tool that integrates mind maps, flow charts, etc." + local docker_url="Official website introduction: https://github.com/plait-board/drawnix" local docker_use="" local docker_passwd="" local app_size="1" @@ -12751,8 +12751,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" - local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_describe="PanSou is a high-performance network disk resource search API service." + local docker_url="Official website introduction: https://github.com/fish2018/pansou" local docker_use="" local docker_passwd="" local app_size="1" @@ -12765,9 +12765,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 108|langbot) local app_id="108" - local app_name="LangBot聊天机器人" - local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" - local app_url="官方网站: https://github.com/langbot-app/LangBot" + local app_name="LangBot chatbot" + local app_text="It is an open source large language model native instant messaging robot development platform." + local app_url="Official website: https://github.com/langbot-app/LangBot" local docker_name="langbot_plugin_runtime" local docker_port="8108" local app_size="1" @@ -12794,7 +12794,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_uninstall() { cd /home/docker/LangBot/docker/ && docker compose down --rmi all rm -rf /home/docker/LangBot - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12823,8 +12823,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个适用于个人或小团队的在线网盘程序。" - local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_describe="It is an online network disk program suitable for individuals or small teams." + local docker_url="Official website introduction: https://github.com/zfile-dev/zfile" local docker_use="" local docker_passwd="" local app_size="1" @@ -12835,9 +12835,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 110|karakeep) local app_id="110" - local app_name="karakeep书签管理" - local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" - local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local app_name="karakeep bookmark management" + local app_text="is a self-hosted bookmarking app with artificial intelligence capabilities designed for data hoarders." + local app_url="Official website: https://github.com/karakeep-app/karakeep" local docker_name="docker-web-1" local docker_port="8110" local app_size="1" @@ -12864,7 +12864,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_uninstall() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all rm -rf /home/docker/karakeep - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -12889,8 +12889,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" - local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_describe="It is a powerful multi-format file conversion tool (supports documents, images, audio and video, etc.) It is strongly recommended to add domain name access" + local docker_url="Project address: https://github.com/c4illin/ConvertX" local docker_use="" local docker_passwd="" local app_size="2" @@ -12947,7 +12947,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ r) root_use send_stats "Restore all apps" - echo "Available application backups" + echo "Available app backups" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -13005,12 +13005,12 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" + echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}Workspace 10" + echo -e "${gl_kjlan}10. ${gl_bai}Workspace No. 10" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}SSH resident mode${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}22. ${gl_bai}Create/enter workspace" @@ -13099,9 +13099,9 @@ linux_work() { 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}" + local tmux_sshd_status="${gl_lv}turn on${gl_bai}" else - local tmux_sshd_status="${gl_hui}关闭${gl_bai}" + local tmux_sshd_status="${gl_hui}closure${gl_bai}" fi send_stats "SSH resident mode" echo -e "SSH resident mode${tmux_sshd_status}" @@ -13122,7 +13122,7 @@ linux_work() { tmux_run ;; 2) - sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc + sed -i '/# Automatically enter tmux session/,+4d' ~/.bashrc tmux kill-window -t sshd ;; *) @@ -13282,7 +13282,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify SSH connection port" echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}Reinstall the system with one click${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account and create new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" + echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account and create new account${gl_kjlan}10. ${gl_bai}Switch priority to ipv4/ipv6" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}Check port occupation status${gl_kjlan}12. ${gl_bai}Modify virtual memory size" echo -e "${gl_kjlan}13. ${gl_bai}User management${gl_kjlan}14. ${gl_bai}User/password generator" @@ -13346,7 +13346,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by python!" + echo "This function can seamlessly install any version officially supported by Python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13613,7 +13613,7 @@ EOF send_stats "User management" echo "User list" echo "----------------------------------------------------------------------------" - printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" + printf "%-24s %-34s %-20s %-10s\n" "username" "User permissions" "User group" "sudo permissions" 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") @@ -14283,7 +14283,7 @@ EOF echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" + echo -e "10. Set the network to${gl_huang}ipv4 priority${gl_bai}" echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" @@ -14332,7 +14332,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" prefer_ipv4 - echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}ipv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker @@ -14366,11 +14366,11 @@ EOF 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}" + local status_message="${gl_lv}Collecting data${gl_bai}" elif grep -q '^ENABLE_STATS="false"' /usr/local/bin/k > /dev/null 2>&1; then - local status_message="${gl_hui}采集已关闭${gl_bai}" + local status_message="${gl_hui}Collection is closed${gl_bai}" else - local status_message="无法确定的状态" + local status_message="Uncertain status" fi echo "Privacy and security" @@ -15084,7 +15084,7 @@ done k_info() { -send_stats "k command reference examples" +send_stats "k command reference use case" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "The following is a reference use case for the k command:" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 12cc6266f..06129920e 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -251,7 +251,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストールする$package...${gl_bai}" + 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 @@ -560,7 +560,7 @@ while true; do echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + 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}') @@ -797,7 +797,7 @@ docker_ipv6_off() { # 元の構成と新しい構成を比較する if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}IPv6アクセスは現在停止中です${gl_bai}" + echo -e "${gl_huang}現在IPv6アクセスは停止中です${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -858,7 +858,7 @@ open_port() { 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" + echo "ポートがオープンされました$port" fi done @@ -921,12 +921,12 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリースされたIP$ip" + echo "リリース済みIP$ip" fi done save_iptables_rules - send_stats "リリースされたIP" + send_stats "リリース済みIP" } block_ip() { @@ -1548,7 +1548,7 @@ certs_status() { echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" echo -e "5. アプリケーション数が制限を超えている ➠ Let's Encrypt には週制限あり (5 回/ドメイン名/週)" - echo -e "6. 国内登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかをご確認ください。" + echo -e "6. 国内の登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかどうかを確認してください" echo "------------------------" echo "1. 再度適用します。 2. 既存の証明書をインポートします。 3. 証明書なしで HTTP アクセスを使用します。 0. 終了します。" echo "------------------------" @@ -2001,7 +2001,7 @@ nginx_br() { sed -i '/brotli_types/,+6 s/^\(\s*\)#\s*/\1/' /home/web/nginx.conf elif [ "$mode" == "off" ]; then - # ブロトリを閉じる: コメントを追加 + # Brotliを閉じる: コメントを追加 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_filter_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 sed -i 's|^load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|# load_module /etc/nginx/modules/ngx_http_brotli_static_module.so;|' /home/web/nginx.conf > /dev/null 2>&1 @@ -2132,7 +2132,7 @@ web_security() { echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされた IP をすべてクリアします。" + echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" echo "------------------------" echo "21. クラウドフレア モード 22. 高負荷時に 5 秒間のシールドを有効にする" echo "------------------------" @@ -2248,10 +2248,10 @@ web_security() { 22) send_stats "高負荷により5秒シールドが可能" - echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" + echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検知すると自動的にシールドが開きます。負荷が低い場合は、シールドが 5 秒間自動的に閉じます。${gl_bai}" echo "--------------" echo "CF パラメータを取得します。" - echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側にある API トークンを選択して、${gl_huang}Global API Key${gl_bai}" + echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -2334,7 +2334,7 @@ check_nginx_compression() { # zstd がオンでコメントが解除されているかどうかを確認します (行全体が zstd on で始まります)。 if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status="zstd圧縮がオンになっています" + zstd_status="zstd圧縮が有効になっています" else zstd_status="" fi @@ -2575,7 +2575,7 @@ check_docker_image_update() { # 公式画像のサポートを追加 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIからイメージのリリース時刻を取得する + # 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) @@ -2623,7 +2623,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8を確認して許可します。 + # ローカルネットワーク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 @@ -2640,7 +2640,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8を確認して許可します。 + # ローカルネットワーク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 @@ -2681,7 +2681,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク 127.0.0.0/8 を許可するルールをクリアします + # ローカルネットワーク 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 @@ -2700,7 +2700,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク 127.0.0.0/8 を許可するルールをクリアします + # ローカルネットワーク 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 @@ -2895,7 +2895,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -3008,7 +3008,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3440,7 +3440,7 @@ ldnmp_Proxy() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + sed -i "s/# 動的に追加/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf update_nginx_listen_port "$yuming" "$access_port" @@ -3488,7 +3488,7 @@ ldnmp_Proxy_backend() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + sed -i "s/# 動的に追加/$upstream_servers/g" /home/web/conf.d/$yuming.conf update_nginx_listen_port "$yuming" "$access_port" @@ -3505,7 +3505,7 @@ ldnmp_Proxy_backend() { list_stream_services() { STREAM_DIR="/home/web/stream.d" - printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + printf "%-25s %-18s %-25s %-20s\n" "サービス名" "通信タイプ" "ローカルアドレス" "バックエンドアドレス" if [ -z "$(ls -A "$STREAM_DIR")" ]; then return @@ -3584,7 +3584,7 @@ stream_panel() { send_stats "ストリームの 4 層プロキシを更新します" ;; 3) - read -e -p "Are you sure you want to delete the nginx container?これはウェブサイトの機能に影響を与える可能性があります。 (y/N):" confirm + read -e -p "nginx コンテナを削除してもよろしいですか?これはウェブサイトの機能に影響を与える可能性があります。 (y/N):" confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then docker rm -f nginx sed -i "/\b${app_id}\b/d" /home/docker/appno.txt @@ -3639,7 +3639,7 @@ ldnmp_Proxy_backend_stream() { echo "名前を空にすることはできません"; return 1 fi - # リスニングポートの取得 + # リスニングポートを取得する read -rp "ローカルのリスニング ポート (3306 など) を入力してください。" listen_port if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then echo "ポートは数値である必要があります"; return 1 @@ -3672,7 +3672,7 @@ ldnmp_Proxy_backend_stream() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/stream.d/$proxy_name.conf + sed -i "s/# 動的に追加/$upstream_servers/g" /home/web/stream.d/$proxy_name.conf docker exec nginx nginx -s reload clear @@ -3768,7 +3768,7 @@ ldnmp_web_status() { echo "" echo "操作する" echo "------------------------" - echo "1. ドメイン名証明書の適用/更新 2. サイトのドメイン名の複製" + echo "1. ドメイン名証明書の適用/更新 2. サイトドメイン名の複製" echo "3. サイトのキャッシュをクリアします。 4. 関連するサイトを作成します。" echo "5. アクセスログの表示 6. エラーログの表示" echo "7. グローバル構成の編集 8. サイト構成の編集" @@ -3866,7 +3866,7 @@ ldnmp_web_status() { 8) send_stats "サイト構成を編集する" - read -e -p "サイト設定を編集するには、編集するドメイン名を入力してください:" yuming + read -e -p "サイト構成を編集するには、編集するドメイン名を入力してください:" yuming install nano nano /home/web/conf.d/$yuming.conf docker exec nginx nginx -s reload @@ -4098,8 +4098,8 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します - printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" + # ヘッダーの印刷 + printf "%-20s %-25s %-30s %-10s\n" "サービス名" "イントラネットアドレス" "外部ネットワークアドレス" "プロトコル" awk ' BEGIN { @@ -4213,7 +4213,7 @@ generate_access_urls() { done fi - # HTTPS 構成の処理 + # HTTPS 構成を処理する for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then local frps_search_pattern="${ipv4_address}:${port}" @@ -4318,7 +4318,7 @@ frps_panel() { 8) send_stats "IPアクセスをブロックする" - echo "ドメイン名アクセスを反転している場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全です。" + echo "ドメイン名アクセスを逆にしている場合は、この機能を使用して IP+ポート アクセスをブロックすることができ、より安全になります。" read -e -p "ブロックするポートを入力してください:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4432,9 +4432,9 @@ yt_menu_pro() { while true; do if [ -x "/usr/local/bin/yt-dlp" ]; then - local YTDLP_STATUS="${gl_lv}已安装${gl_bai}" + local YTDLP_STATUS="${gl_lv}インストール済み${gl_bai}" else - local YTDLP_STATUS="${gl_hui}未安装${gl_bai}" + local YTDLP_STATUS="${gl_hui}インストールされていません${gl_bai}" fi clear @@ -5513,7 +5513,7 @@ clamav_scan() { 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}/home/docker/clamav/log/scan.log${gl_bai}" echo -e "${gl_lv}ウイルスがある場合はお願いします${gl_huang}scan.log${gl_lv}ファイル内で FOUND キーワードを検索して、ウイルスの場所を確認します。${gl_bai}" } @@ -5768,7 +5768,7 @@ Kernel_optimize() { 1) cd ~ clear - local tiaoyou_moshi="高性能优化模式" + local tiaoyou_moshi="高性能最適化モード" optimize_high_performance send_stats "ハイパフォーマンスモードの最適化" ;; @@ -5782,19 +5782,19 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モード" + send_stats "ウェブサイト最適化モデル" ;; 4) cd ~ clear - local tiaoyou_moshi="直播优化模式" + local tiaoyou_moshi="ライブブロードキャスト最適化モード" optimize_high_performance send_stats "ライブストリーミングの最適化" ;; 5) cd ~ clear - local tiaoyou_moshi="游戏服优化模式" + local tiaoyou_moshi="ゲームサーバー最適化モード" optimize_high_performance send_stats "ゲームサーバーの最適化" ;; @@ -5872,7 +5872,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えてください" + send_stats "英語に切り替えて" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -6177,7 +6177,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter キーを押して続行します..." done } @@ -6529,7 +6529,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter キーを押して続行します..." done } @@ -6717,7 +6717,7 @@ run_task() { else echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2. リモートホストにアクセスできるかどうか" + echo "2. リモート ホストにアクセスできますか?" echo "3. 認証情報は正しいですか?" echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi @@ -6816,7 +6816,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter キーを押して続行します..." done } @@ -6875,7 +6875,7 @@ linux_info() { 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 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 day ", run_days); if (run_hours > 0) printf("%d 時間 ", run_hours); printf("%d 分\n", run_ minutes)}') local timezone=$(current_timezone) @@ -6932,7 +6932,7 @@ linux_tools() { while true; do clear - # send_stats "基本ツール" + # 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}" @@ -7298,7 +7298,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" + echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7393,7 +7393,7 @@ docker_ssh_migration() { [[ -f "$path_file" ]] && original_path=$(cat "$path_file") || original_path="" [[ -z "$original_path" ]] && read -e -p "元のパスが見つかりません。復元ディレクトリのパスを入力してください:" original_path - # 構成プロジェクトのコンテナがすでに実行されているかどうかを確認します + # 作成プロジェクトのコンテナがすでに実行されているかどうかを確認します running_count=$(docker ps --filter "label=com.docker.compose.project=$project_name" --format '{{.Names}}' | wc -l) if [[ "$running_count" -gt 0 ]]; then echo -e "${YELLOW}プロジェクトの作成 [$project_name] コンテナはすでに実行されているため、復元をスキップします...${NC}" @@ -7500,14 +7500,14 @@ docker_ssh_migration() { read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER - read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーを使用してログインする + # キーでログイン scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7581,7 +7581,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -7648,7 +7648,7 @@ linux_docker() { echo "------------------------------------------------------------" container_ids=$(docker ps -q) - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + 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") @@ -8067,7 +8067,7 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # CPU コアの数と占有率を入力するようユーザーに求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 + # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 read -e -p "CPU コアの数を入力してください [デフォルト:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} @@ -8451,7 +8451,7 @@ linux_ldnmp() { echo "パスワード: 管理者" echo "------------------------" echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" - echo "私も、なぜユニコーンナンバーカードがこれほど面倒で問題が多いのか、非常に腹が立っています。" + echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、問題が多いのか、とても腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -8938,10 +8938,10 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP環境のバックアップ" + send_stats "LDNMP环境备份" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}バックアップ中$backup_filename ...${gl_bai}" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do @@ -8951,7 +8951,7 @@ linux_ldnmp() { case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then echo "エラー: リモート サーバーの IP を入力してください。" @@ -9258,7 +9258,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}------------------------" @@ -9280,7 +9280,7 @@ while true; do echo -e "${gl_kjlan}37. ${color37}MyIP ツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh Web版 SSH接続ツール" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}Nextermリモート接続ツール" + echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}Nexterm リモート接続ツール" echo -e "${gl_kjlan}43. ${color43}RustDesk リモート デスクトップ (サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk リモート デスクトップ (リレー)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker アクセラレーション ステーション${gl_kjlan}46. ${color46}GitHub アクセラレーション ステーション${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}プロメテウスの監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" @@ -9296,7 +9296,7 @@ while true; do echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}ITツールツールボックス" echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstBot チャットボット フレームワーク" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstrBot チャットボット フレームワーク" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV プライベートムービー${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" @@ -9335,7 +9335,7 @@ while true; do 1|bt|baota) local app_id="1" local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" + local panelname="パゴダパネル" local panelurl="https://www.bt.cn/new/index.html" panel_app_install() { @@ -9428,10 +9428,10 @@ while true; do } - local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" + local docker_describe="ドメイン名アクセスの追加をサポートしていない Nginx リバース プロキシ ツール パネル。" + local docker_url="公式サイト紹介:https://nginxproxymanager.com/" + local docker_use="echo \"初期ユーザー名: admin@example.com\"" + local docker_passwd="echo \"初期パスワード:changeme\"" local app_size="1" docker_app @@ -9463,8 +9463,8 @@ while true; do } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_describe="gin と Solidjs を利用した、複数のストレージ、Web ブラウジング、WebDAV をサポートするファイル一覧プログラム" + local docker_url="公式サイト紹介:https://github.com/OpenListTeam/OpenList" local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" @@ -9504,8 +9504,8 @@ while true; do } - local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="webtop は Ubuntu ベースのコンテナです。 IP にアクセスできない場合は、アクセス用のドメイン名を追加してください。" + local docker_url="公式Webサイトの紹介:https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -9584,8 +9584,8 @@ while true; do } - local docker_describe="qbittorrent离线BT磁力下载服务" - local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent" + 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" @@ -9724,9 +9724,9 @@ while true; do 10|rocketchat) local app_id="10" - local app_name="Rocket.Chat聊天系统" - local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," - local app_url="官方介绍: https://www.rocket.chat/" + 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" @@ -9792,10 +9792,10 @@ while true; do } - local docker_describe="禅道是通用的项目管理软件" - local docker_url="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" + local docker_describe="ZenTao はユニバーサルなプロジェクト管理ソフトウェアです" + local docker_url="公式サイト紹介:https://www.zentao.net/" + local docker_use="echo \"初期ユーザー名: admin\"" + local docker_passwd="echo 「初期パスワード: 123456」" local app_size="2" docker_app @@ -9821,8 +9821,8 @@ while true; do } - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_describe="Qinglong Panel はスケジュールされたタスク管理プラットフォームです" + local docker_url="公式サイト紹介:${gh_proxy}github.com/whyour/qinglong" local docker_use="" local docker_passwd="" local app_size="1" @@ -9832,9 +9832,9 @@ while true; do 13|cloudreve) local app_id="13" - local app_name="cloudreve网盘" - local app_text="cloudreve是一个支持多家云存储的网盘系统" - local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" + local app_name="クラウドリーブネットワークディスク" + 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" @@ -9886,8 +9886,8 @@ while true; do } - local docker_describe="简单图床是一个简单的图床程序" - local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0" + local docker_describe="シンプルドローイングベッドはシンプルなドローイングベッドプログラムです" + local docker_url="公式サイト紹介:${gh_proxy}github.com/icret/EasyImages2.0" local docker_use="" local docker_passwd="" local app_size="1" @@ -9914,8 +9914,8 @@ while true; do } - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" + local docker_describe="emby は、サーバー上でビデオとオーディオを整理し、クライアント デバイスにオーディオとビデオをストリーミングするために使用できるマスター/スレーブ アーキテクチャのメディア サーバー ソフトウェアです。" + local docker_url="公式サイト紹介:https://emby.media/" local docker_use="" local docker_passwd="" local app_size="1" @@ -9935,8 +9935,8 @@ while true; do } - local docker_describe="Speedtest测速面板是一个VPS网速测试工具,多项测试功能,还可以实时监控VPS进出站流量" - local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als" + 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" @@ -9966,8 +9966,8 @@ while true; do } - local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/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" @@ -9995,8 +9995,8 @@ while true; do } - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" + local docker_describe="Onlyoffice はオープンソースのオンライン オフィス ツールで、非常に強力です。" + local docker_url="公式サイト紹介:https://www.onlyoffice.com/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10092,8 +10092,8 @@ while true; do } - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" + local docker_describe="portainer は軽量の Docker コンテナ管理パネルです" + local docker_url="公式サイト紹介:https://www.porttainer.io/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10115,8 +10115,8 @@ while true; do } - local docker_describe="VScode是一款强大的在线代码编写工具" - local docker_url="官网介绍: ${gh_proxy}github.com/coder/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" @@ -10143,8 +10143,8 @@ while true; do } - local docker_describe="Uptime Kuma 易于使用的自托管监控工具" - local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + 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" @@ -10163,8 +10163,8 @@ while true; do } - local docker_describe="Memos是一款轻量级、自托管的备忘录中心" - local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_describe="Memos は軽量の自己ホスト型メモ センターです" + local docker_url="公式サイト紹介:${gh_proxy}github.com/usememos/memos" local docker_use="" local docker_passwd="" local app_size="1" @@ -10204,8 +10204,8 @@ while true; do } - local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="Webtop は、Alpine コンテナの中国語版に基づいています。 IP にアクセスできない場合は、アクセス用のドメイン名を追加してください。" + local docker_url="公式Webサイトの紹介:https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10225,9 +10225,9 @@ while true; do } - local docker_describe="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" + local docker_describe="400,000 を超える導入実績を持つ Nextcloud は、ダウンロードできる最も人気のあるローカル コンテンツ コラボレーション プラットフォームです。" + local docker_url="公式サイト紹介:https://nextcloud.com/" + local docker_use="echo \"アカウント: nextcloud パスワード:$rootpasswd\"" local docker_passwd="" local app_size="3" docker_app @@ -10245,8 +10245,8 @@ while true; do } - local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架" - local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/" + 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" @@ -10265,8 +10265,8 @@ while true; do } - local docker_describe="dockge是一个可视化的docker-compose容器管理面板" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10285,8 +10285,8 @@ while true; do } - local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具,即开即用" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10310,8 +10310,8 @@ while true; do } - local docker_describe="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" + local docker_describe="searxng は非公開の検索エンジン サイトです。" + local docker_url="公式サイト紹介:https://hub.docker.com/r/alandoyle/searxng" local docker_use="" local docker_passwd="" local app_size="1" @@ -10342,9 +10342,9 @@ while true; do } - local docker_describe="photoprism非常强大的私有相册系统" - local docker_url="官网介绍: https://www.photoprism.app/" - local docker_use="echo \"账号: admin 密码: $rootpasswd\"" + 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 @@ -10370,8 +10370,8 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。" - local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" + local docker_describe="これは、Docker を使用してローカルでホストされる強力な Web ベースの PDF 操作ツールで、分割マージ、変換、再編成、画像の追加、回転、圧縮など、PDF ファイルに対してさまざまな操作を実行できます。" + local docker_url="公式サイト紹介:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" local app_size="1" @@ -10391,8 +10391,8 @@ while true; do } - local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" - local docker_url="官网介绍: https://www.drawio.com/" + local docker_describe="これは強力なグラフ作成ソフトウェアです。マインド マップ、トポロジ図、フローチャートを描画できます。" + local docker_url="公式サイト紹介:https://www.drawio.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10416,9 +10416,9 @@ while true; do } - 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_describe="Sun-Panel サーバー、NAS ナビゲーション パネル、ホームページ、ブラウザー ホームページ" + 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 @@ -10440,8 +10440,8 @@ while true; do stonith404/pingvin-share } - local docker_describe="Pingvin Share 是一个可自建的文件分享平台,是 WeTransfer 的一个替代品" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10467,9 +10467,9 @@ while true; do } - local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" + local docker_describe="ミニマリストの瞬間、模倣性の高いWeChatの瞬間、あなたの素晴らしい人生を記録してください" local docker_url="公式サイト紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" - local docker_use="echo \"账号: admin 密码: a123456\"" + local docker_use="echo 「アカウント: admin パスワード: a123456」" local docker_passwd="" local app_size="1" docker_app @@ -10491,8 +10491,8 @@ while true; do 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_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" @@ -10512,8 +10512,8 @@ while true; do } - local docker_describe="是一个多功能IP工具箱,可以查看自己IP信息及连通性,用网页面板呈现" - local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md" + local docker_describe="独自の IP 情報と接続性を表示し、Web パネルを使用して表示できる多機能 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" @@ -10546,8 +10546,8 @@ while true; do } - local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具" - local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/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" @@ -10563,8 +10563,8 @@ while true; do 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_describe="シンプルなオンライン SSH 接続ツールと SFTP ツール" + local docker_url="公式サイト紹介:${gh_proxy}github.com/Jrohy/webssh" local docker_use="" local docker_passwd="" local app_size="1" @@ -10575,8 +10575,8 @@ while true; do local app_id="41" local lujing="[ -d "/www/server/panel" ]" - local panelname="耗子面板" - local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/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 @@ -10616,8 +10616,8 @@ while true; do } - local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。" - local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm" + 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" @@ -10637,10 +10637,10 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(服务端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" + local docker_describe="Rustdesk のオープンソース リモート デスクトップ (サーバー) は、自社の Sunflower プライベート サーバーに似ています。" + local docker_url="公式サイト紹介:https://rustdesk.com/zh-cn/" local docker_use="docker logs hbbs" - local docker_passwd="echo \"把你的IP和key记录下,会在远程桌面客户端中用到。去44选项装中继端吧!\"" + local docker_passwd="echo \"リモート デスクトップ クライアントで使用される IP とキーを記録します。オプション 44 に進んでリレーをインストールしてください!\"" local app_size="1" docker_app ;; @@ -10657,9 +10657,9 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(中继端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" - local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\"" + local docker_describe="Rustdesk のオープンソース リモート デスクトップ (リレー) は、独自の Sunflower プライベート サーバーに似ています。" + local docker_url="公式サイト紹介:https://rustdesk.com/zh-cn/" + local docker_use="echo \"公式 Web サイトにアクセスして、リモート デスクトップ クライアントをダウンロードします: https://rustdesk.com/zh-cn/\"" local docker_passwd="" local app_size="1" docker_app @@ -10683,8 +10683,8 @@ while true; do } - local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。" - local docker_url="官网介绍: https://hub.docker.com/_/registry" + local docker_describe="Docker Registry は、Docker イメージを保存および配布するためのサービスです。" + local docker_url="公式サイト紹介:https://hub.docker.com/_/registry" local docker_use="" local docker_passwd="" local app_size="2" @@ -10703,8 +10703,8 @@ while true; do } - local docker_describe="使用Go实现的GHProxy,用于加速部分地区Github仓库的拉取。" - local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy" + 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" @@ -10714,9 +10714,9 @@ while true; do 47|prometheus|grafana) local app_id="47" - local app_name="普罗米修斯监控" - local app_text="Prometheus+Grafana企业级监控系统" - local app_url="官网介绍: https://prometheus.io" + 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" @@ -10768,8 +10768,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_describe="これは Prometheus ホスト データ収集コンポーネントです。監視対象ホストにデプロイしてください。" + local docker_url="公式サイト紹介:https://github.com/prometheus/node_exporter" local docker_use="" local docker_passwd="" local app_size="1" @@ -10798,8 +10798,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_describe="これは Prometheus コンテナーのデータ収集コンポーネントです。監視対象ホストにデプロイしてください。" + local docker_url="公式サイト紹介:https://github.com/google/cadvisor" local docker_use="" local docker_passwd="" local app_size="1" @@ -10821,8 +10821,8 @@ while true; do } - local docker_describe="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" + local docker_describe="これは、Web サイトの変更の検出、補充の監視、通知を行うための小さなツールです。" + local docker_url="公式サイト紹介:https://github.com/dgtlmoon/changedetection.io" local docker_use="" local docker_passwd="" local app_size="1" @@ -10854,8 +10854,8 @@ while true; do } - local docker_describe="Docker可视化面板系统,提供完善的docker管理功能。" - local docker_url="官网介绍: https://github.com/donknap/dpanel" + local docker_describe="Docker ビジュアル パネル システムは、完全な Docker 管理機能を提供します。" + local docker_url="公式サイト紹介:https://github.com/donknap/dpanel" local docker_use="" local docker_passwd="" local app_size="1" @@ -10874,8 +10874,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的llama3大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + local docker_describe="OpenWebUI は、新しい llama3 ラージ言語モデルに接続されているラージ言語モデル Web ページ フレームワークです。" + 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" @@ -10886,8 +10886,8 @@ while true; do local app_id="54" local lujing="[ -d "/www/server/panel" ]" - local panelname="AMH面板" - local panelurl="官方地址: https://amh.sh/index.htm?amh" + local panelname="AMHパネル" + local panelurl="公式アドレス:https://amh.sh/index.htm?amh" panel_app_install() { cd ~ @@ -10926,8 +10926,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的DeepSeek R1大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + local docker_describe="OpenWebUI は、新しい DeepSeek R1 大規模言語モデルに接続されている大規模言語モデル Web ページ フレームワークです。" + 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" @@ -10937,9 +10937,9 @@ while true; do 58|dify) local app_id="58" - local app_name="Dify知识库" - local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" - local app_url="官方网站: https://docs.dify.ai/zh-hans" + 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" @@ -10982,8 +10982,8 @@ while true; do 59|new-api) local app_id="59" local app_name="NewAPI" - local app_text="新一代大模型网关与AI资产管理系统" - local app_url="官方网站: https://github.com/Calcium-Ion/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" @@ -11034,9 +11034,9 @@ while true; do 60|jms) local app_id="60" - local app_name="JumpServer开源堡垒机" - local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" - local app_url="官方介绍: https://github.com/jumpserver/jumpserver" + 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" @@ -11086,8 +11086,8 @@ while true; do } - local docker_describe="免费开源机器翻译 API,完全自托管,它的翻译引擎由开源Argos Translate库提供支持。" - local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate" + local docker_describe="無料のオープンソース機械翻訳 API は完全に自己ホストされており、その翻訳エンジンはオープンソースの Argos Translate ライブラリを利用しています。" + local docker_url="公式サイト紹介:https://github.com/LibreTranslate/LibreTranslate" local docker_use="" local docker_passwd="" local app_size="5" @@ -11098,9 +11098,9 @@ while true; do 62|ragflow) local app_id="62" - local app_name="RAGFlow知识库" - local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" - local app_url="官方网站: https://github.com/infiniflow/ragflow" + local app_name="RAGFlow ナレッジベース" + local app_text="ドキュメントの深い理解に基づいたオープンソース RAG (Retrieval Augmented Generation) エンジン" + local app_url="公式サイト:https://github.com/infiniflow/ragflow" local docker_name="ragflow-server" local docker_port="8062" local app_size="8" @@ -11147,8 +11147,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,官方精简版本,支持各大模型API接入" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + local docker_describe="OpenWebUI は大規模な言語モデルの Web ページ フレームワークであり、公式の簡易バージョンではすべての主要モデルへの API アクセスがサポートされています。" + local docker_url="公式サイト紹介:https://github.com/open-webui/open-webui" local docker_use="" local docker_passwd="" local app_size="3" @@ -11165,8 +11165,8 @@ while true; do docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } - local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" - local docker_url="官网介绍: https://github.com/CorentinTh/it-tools" + local docker_describe="開発者と IT ワーカーにとって非常に便利なツール" + local docker_url="公式サイト紹介:https://github.com/CorentinTh/it-tools" local docker_use="" local docker_passwd="" local app_size="1" @@ -11201,8 +11201,8 @@ while true; do } - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_describe="強力な自動ワークフロー プラットフォームです" + local docker_url="公式サイト紹介:https://github.com/n8n-io/n8n" local docker_use="" local docker_passwd="" local app_size="1" @@ -11230,8 +11230,8 @@ while true; do } - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_describe="パブリック IP (IPv4/IPv6) を主要な DNS サービス プロバイダーにリアルタイムで自動的に更新し、動的なドメイン名解決を実現します。" + local docker_url="公式サイト紹介:https://github.com/jeessy2/ddns-go" local docker_use="" local docker_passwd="" local app_size="1" @@ -11248,10 +11248,10 @@ while true; do docker run -d --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 \"用户名: allinssl 密码: allinssldocker\"" + local docker_describe="オープンソースの無料 SSL 証明書自動化管理プラットフォーム" + local docker_url="公式サイト紹介:https://allinssl.com" + local docker_use="echo \"セキュリティの入り口: /allinssl\"" + local docker_passwd="echo \"ユーザー名: allinssl パスワード: allinssldocker\"" local app_size="1" docker_app ;; @@ -11280,8 +11280,8 @@ while true; do } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" + local docker_describe="オープンソースでいつでもどこでも無料の SFTP FTP WebDAV ファイル転送ツール" + local docker_url="公式サイト紹介:https://sftpgo.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11312,9 +11312,9 @@ while true; do } - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_describe="オープンソース AI チャットボット フレームワーク。WeChat、QQ、TG による大規模 AI モデルへのアクセスをサポート" + local docker_url="公式サイト紹介:https://astrbot.app/" + local docker_use="echo \"ユーザー名: astrbot パスワード: astrbot\"" local docker_passwd="" local app_size="1" docker_app @@ -11341,8 +11341,8 @@ while true; do } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" + local docker_describe="軽量で高性能な音楽ストリーミングサーバーです" + local docker_url="公式サイト紹介:https://www.navidrome.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11368,8 +11368,8 @@ while true; do } - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" + local docker_describe="データを管理できるパスワード マネージャー" + local docker_url="公式サイト紹介:https://bitwarden.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11400,8 +11400,8 @@ while true; do } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_describe="無料のオンラインビデオ検索および視聴プラットフォーム" + local docker_url="公式サイト紹介:https://github.com/LibreSpark/LibreTV" local docker_use="" local docker_passwd="" local app_size="1" @@ -11415,9 +11415,9 @@ while true; do local app_id="74" - local app_name="moontv私有影视" - local app_text="免费在线视频搜索与观看平台" - local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local app_name="MoonTV プライベート映画とテレビ" + local app_text="無料のオンラインビデオ検索および視聴プラットフォーム" + local app_url="ビデオ紹介: https://github.com/MoonTechLab/LunaTV" local docker_name="moontv-core" local docker_port="8074" local app_size="2" @@ -11482,8 +11482,8 @@ while true; do } - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_describe="音楽をより適切に管理できるように設計された音楽ウィザード。" + local docker_url="公式サイト紹介:https://github.com/foamzou/melody" local docker_use="" local docker_passwd="" local app_size="1" @@ -11509,8 +11509,8 @@ while true; do } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_describe="中華DOSゲームまとめサイトです" + local docker_url="公式サイト紹介:https://github.com/rwv/chinese-dos-games" local docker_use="" local docker_passwd="" local app_size="2" @@ -11544,9 +11544,9 @@ while true; do } - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_describe="Xunlei、オフライン高速 BT 磁気ダウンロード ツール" + local docker_url="公式サイト紹介:https://github.com/cnk3x/xunlei" + local docker_use="echo \"携帯電話で Xunlei にログインし、招待コードを入力します。招待コード: Xunlei Niutong\"" local docker_passwd="" local app_size="1" docker_app @@ -11559,8 +11559,8 @@ while true; do local app_id="78" local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local app_text="PandaWiki は、AI 大型モデルによって駆動されるオープンソースのインテリジェントな文書管理システムです。ポートの展開をカスタマイズしないことを強くお勧めします。" + local app_url="公式紹介: https://github.com/chaitin/PandaWiki" local docker_name="panda-wiki-nginx" local docker_port="2443" local app_size="2" @@ -11602,8 +11602,8 @@ while true; do } - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_describe="Beszel は軽量で使いやすいサーバー監視です" + local docker_url="公式サイト紹介:https://beszel.dev/zh/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11615,9 +11615,9 @@ while true; do 80|linkwarden) local app_id="80" - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" + local app_name="リンクワーデンのブックマーク管理" + local app_text="タグ付け、検索、チーム コラボレーションをサポートする、オープン ソースの自己ホスト型ブックマーク管理プラットフォーム。" + local app_url="公式サイト:https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -11687,9 +11687,9 @@ while true; do 81|jitsi) local app_id="81" - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" + local app_name="JitsiMeet ビデオ会議" + local app_text="複数人でのオンライン会議、画面共有、暗号化通信をサポートするオープンソースの安全なビデオ会議ソリューション。" + local app_url="公式サイト:https://jitsi.org/" local docker_name="jitsi" local docker_port="8081" local app_size="3" @@ -11755,8 +11755,8 @@ while true; do } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_describe="高性能AIインターフェース透過プロキシサービス" + local docker_url="公式サイト紹介:https://www.gpt-load.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11788,9 +11788,9 @@ while true; do } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_describe="軽量のセルフホスト型サーバー監視ツール" + local docker_url="公式サイト紹介:https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"デフォルトのアカウント: admin デフォルトのパスワード: 1212156\"" local docker_passwd="" local app_size="1" docker_app @@ -11819,8 +11819,8 @@ while true; do } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_describe="財務管理用のオープンソースの個人サブスクリプション トラッカー" + local docker_url="公式サイト紹介:https://github.com/ellite/Wallos" local docker_use="" local docker_passwd="" local app_size="1" @@ -11831,9 +11831,9 @@ while true; do 85|immich) local app_id="85" - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" + local app_name="イミッチ・ピクチャー・ビデオ・マネージャー" + local app_text="高性能の自己ホスト型写真およびビデオ管理ソリューション。" + local app_url="公式サイト紹介:https://github.com/immich-app/immich" local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -11897,8 +11897,8 @@ while true; do } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" + local docker_describe="オープンソースのメディアサーバーソフトウェアです" + local docker_url="公式サイト紹介:https://jellyfin.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11925,9 +11925,9 @@ while true; do } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_describe="リモートで映画や生放送を一緒に見るプログラム。同時視聴、ライブブロードキャスト、チャットなどの機能を提供します" + local docker_url="公式サイト紹介:https://github.com/synctv-org/synctv" + local docker_use="echo \"初期アカウントとパスワード: root。ログイン後、時間内にログイン パスワードを変更してください\"" local docker_passwd="" local app_size="1" docker_app @@ -11955,10 +11955,10 @@ while true; do } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local docker_describe="オープンソース、無料の自社構築ライブ ブロードキャスト プラットフォーム" + local docker_url="公式サイト紹介:https://owncast.online" + local docker_use="echo \"管理者ページにアクセスするには、アクセス アドレスの後に /admin を続けます\"" + local docker_passwd="echo \"初期アカウント: admin 初期パスワード: abc123 ログイン後、時間内にログイン パスワードを変更してください\"" local app_size="1" docker_app @@ -11984,10 +11984,10 @@ while true; do } - local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" - local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" - local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" + local docker_describe="匿名のパスワードでテキストやファイルを共有し、速達のようにファイルを受け取ります" + local docker_url="公式サイト紹介:https://github.com/vastsa/FileCodeBox" + local docker_use="echo \"管理者ページにアクセスするには、アクセス アドレスの後に /#/admin を続けます\"" + local docker_passwd="echo \"管理者パスワード: FileCodeBox2023\"" local app_size="1" docker_app @@ -12040,8 +12040,8 @@ while true; do } - local docker_describe="Matrix是一个去中心化的聊天协议" - local docker_url="官网介绍: https://matrix.org/" + local docker_describe="Matrix は分散型チャット プロトコルです" + local docker_url="公式サイト紹介:https://matrix.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12055,9 +12055,9 @@ while true; do local app_id="91" - local app_name="gitea私有代码仓库" - local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" - local app_url="视频介绍: https://github.com/go-gitea/gitea" + local app_name="gitea プライベート コード リポジトリ" + local app_text="GitHub に近いエクスペリエンスを提供する、無料の新世代コード ホスティング プラットフォーム。" + local app_url="ビデオ紹介: https://github.com/go-gitea/gitea" local docker_name="gitea" local docker_port="8091" local app_size="2" @@ -12119,8 +12119,8 @@ while true; do } - local docker_describe="是一个基于Web的文件管理器" - local docker_url="官网介绍: https://filebrowser.org/" + local docker_describe="Webベースのファイルマネージャーです" + local docker_url="公式サイト紹介:https://filebrowser.org/" local docker_use="docker logs filebrowser" local docker_passwd="" local app_size="1" @@ -12146,8 +12146,8 @@ while true; do } - local docker_describe="极简静态文件服务器,支持上传下载" - local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_describe="シンプルな静的ファイル サーバー、アップロードとダウンロードをサポート" + local docker_url="公式サイト紹介:https://github.com/sigoden/dufs" local docker_use="" local docker_passwd="" local app_size="1" @@ -12177,8 +12177,8 @@ while true; do } - local docker_describe="分布式高速下载工具,支持多种协议" - local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_describe="複数のプロトコルをサポートする分散型高速ダウンロード ツール" + local docker_url="公式サイト紹介:https://github.com/GopeedLab/gopeed" local docker_use="" local docker_passwd="" local app_size="1" @@ -12192,9 +12192,9 @@ while true; do local app_id="95" - local app_name="paperless文档管理平台" - local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" - local app_url="视频介绍: https://docs.paperless-ngx.com/" + local app_name="ペーパーレス文書管理プラットフォーム" + local app_text="オープンソースの電子文書管理システムであり、その主な目的は紙文書をデジタル化して管理することです。" + local app_url="ビデオ紹介: https://docs.paperless-ngx.com/" local docker_name="paperless-webserver-1" local docker_port="8095" local app_size="2" @@ -12240,9 +12240,9 @@ while true; do local app_id="96" - local app_name="2FAuth自托管二步验证器" - local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" - local app_url="官网: https://github.com/Bubka/2FAuth" + local app_name="2FAuth セルフホスト型 2 段階認証システム" + local app_text="セルフホスト型の 2 要素認証 (2FA) アカウント管理および検証コード生成ツール。" + local app_url="公式サイト:https://github.com/Bubka/2FAuth" local docker_name="2fauth" local docker_port="8096" local app_size="1" @@ -12387,8 +12387,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="最新の高性能仮想プライベート ネットワーク ツール" + local docker_url="公式サイト紹介:https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12457,8 +12457,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="最新の高性能仮想プライベート ネットワーク ツール" + local docker_url="公式サイト紹介:https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12471,9 +12471,9 @@ while true; do local app_id="99" - local app_name="dsm群晖虚拟机" - local app_text="Docker容器中的虚拟DSM" - local app_url="官网: https://github.com/vdsm/virtual-dsm" + local app_name="dsm Synology 仮想マシン" + local app_text="Dockerコンテナ内の仮想DSM" + local app_url="公式ウェブサイト:https://github.com/vdsm/virtual-dsm" local docker_name="dsm" local docker_port="8099" local app_size="16" @@ -12543,8 +12543,8 @@ while true; do syncthing/syncthing:latest } - local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" - local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_describe="オープンソースのピアツーピア ファイル同期ツール。Dropbox や Resilio Sync に似ていますが、完全に分散化されています。" + local docker_url="公式サイト紹介:https://github.com/syncthing/syncthing" local docker_use="" local docker_passwd="" local app_size="1" @@ -12555,9 +12555,9 @@ while true; do 101|moneyprinterturbo) local app_id="101" - local app_name="AI视频生成工具" - local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" - local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local app_name="AI動画生成ツール" + local app_text="MoneyPrinterTurbo は、AI ラージモデルを使用して高解像度のショートビデオを合成するツールです" + local app_url="公式ウェブサイト:https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" local app_size="3" @@ -12610,8 +12610,8 @@ while true; do } - local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" - local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_describe="独自導入をサポートするパーソナルクラウドソーシャルメディアチャットサービスです。" + local docker_url="公式サイト紹介:https://github.com/Privoce/vocechat-web" local docker_use="" local docker_passwd="" local app_size="1" @@ -12622,9 +12622,9 @@ while true; do 103|umami) local app_id="103" - local app_name="Umami网站统计工具" - local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" - local app_url="官方网站: https://github.com/umami-software/umami" + local app_name="Umami ウェブサイト統計ツール" + local app_text="Google Analytics に似た、オープンソースの軽量でプライバシーに配慮した Web サイト分析ツール。" + local app_url="公式サイト:https://github.com/umami-software/umami" local docker_name="umami-umami-1" local docker_port="8103" local app_size="1" @@ -12689,8 +12689,8 @@ while true; do } - local docker_describe="思源笔记是一款隐私优先的知识管理系统" - local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_describe="Siyuan Notes はプライバシーを最優先したナレッジ管理システムです" + local docker_url="公式サイト紹介:https://github.com/siyuan-note/siyuan" local docker_use="" local docker_passwd="" local app_size="1" @@ -12716,8 +12716,8 @@ while true; do } - local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" - local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_describe="これは、マインド マップ、フローチャートなどを統合する強力なオープンソース ホワイトボード ツールです。" + local docker_url="公式サイト紹介:https://github.com/plait-board/drawnix" local docker_use="" local docker_passwd="" local app_size="1" @@ -12751,8 +12751,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" - local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_describe="PanSou は、高パフォーマンスのネットワーク ディスク リソース検索 API サービスです。" + local docker_url="公式サイト紹介:https://github.com/fish2018/pansou" local docker_use="" local docker_passwd="" local app_size="1" @@ -12765,9 +12765,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 108|langbot) local app_id="108" - local app_name="LangBot聊天机器人" - local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" - local app_url="官方网站: https://github.com/langbot-app/LangBot" + local app_name="LangBot チャットボット" + local app_text="これは、オープンソースの大規模言語モデルのネイティブ インスタント メッセージング ロボット開発プラットフォームです。" + local app_url="公式ウェブサイト:https://github.com/langbot-app/LangBot" local docker_name="langbot_plugin_runtime" local docker_port="8108" local app_size="1" @@ -12823,8 +12823,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个适用于个人或小团队的在线网盘程序。" - local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_describe="これは、個人または小規模チームに適したオンライン ネットワーク ディスク プログラムです。" + local docker_url="公式サイト紹介:https://github.com/zfile-dev/zfile" local docker_use="" local docker_passwd="" local app_size="1" @@ -12835,9 +12835,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 110|karakeep) local app_id="110" - local app_name="karakeep书签管理" - local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" - local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local app_name="karakeepのブックマーク管理" + local app_text="は、データ蓄積者向けに設計された人工知能機能を備えた自己ホスト型ブックマーク アプリです。" + local app_url="公式サイト:https://github.com/karakeep-app/karakeep" local docker_name="docker-web-1" local docker_port="8110" local app_size="1" @@ -12889,8 +12889,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" - local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_describe="これは、強力なマルチフォーマット ファイル変換ツール (ドキュメント、画像、オーディオ、ビデオなどをサポート) です。ドメイン名アクセスを追加することを強くお勧めします。" + local docker_url="プロジェクトアドレス: https://github.com/c4illin/ConvertX" local docker_use="" local docker_passwd="" local app_size="2" @@ -12917,7 +12917,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ case "$choice" in [Yy]) read -e -p "リモートサーバーのIPを入力してください:" remote_ip - read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} if [ -z "$remote_ip" ]; then @@ -12947,7 +12947,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリケーションのバックアップ" + echo "利用可能なアプリのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -13005,12 +13005,12 @@ linux_work() { 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}ワークスペースNo.5" + 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}ワークスペースNo.9" - echo -e "${gl_kjlan}10. ${gl_bai}ワークスペース10" + echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo.10" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}SSH常駐モード${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}22. ${gl_bai}ワークスペースの作成/入力" @@ -13099,9 +13099,9 @@ linux_work() { 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}" + local tmux_sshd_status="${gl_lv}オンにする${gl_bai}" else - local tmux_sshd_status="${gl_hui}关闭${gl_bai}" + local tmux_sshd_status="${gl_hui}閉鎖${gl_bai}" fi send_stats "SSH常駐モード" echo -e "SSH常駐モード${tmux_sshd_status}" @@ -13122,7 +13122,7 @@ linux_work() { tmux_run ;; 2) - sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc + sed -i '/# 自動的に tmux セッションに入ります/,+4d' ~/.bashrc tmux kill-window -t sshd ;; *) @@ -13140,7 +13140,7 @@ linux_work() { 23) - read -e -p "バックグラウンドで実行するコマンドを入力してください。たとえば、curl -fsSL https://get.docker.com |し:" tmuxd + read -e -p "バックグラウンドで実行するコマンドを入力してください (例:curl -fsSL https://get.docker.com | )し:" tmuxd tmux_run_d send_stats "バックグラウンドワークスペースにコマンドを挿入する" ;; @@ -13282,7 +13282,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" 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}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}ユーザー/パスワード生成器" @@ -13351,7 +13351,7 @@ linux_Settings() { echo -e "現在のPythonのバージョン番号:${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 "他のバージョンを確認してください: https://www.python.org/downloads/" echo "------------" read -e -p "インストールする Python のバージョン番号を入力します (終了するには 0 を入力します)。" py_new_v @@ -13458,7 +13458,7 @@ EOF send_stats "SSHポートが変更されました" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "SSH ポート変更の終了" + send_stats "SSHポート変更の終了" break else echo "ポート番号が無効です。 1 ~ 65535 の数字を入力してください。" @@ -13613,7 +13613,7 @@ EOF send_stats "ユーザー管理" echo "ユーザーリスト" echo "----------------------------------------------------------------------------" - printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" + 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") @@ -13749,7 +13749,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得する + # 現在のシステム時刻を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -13764,7 +13764,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -14274,7 +14274,7 @@ EOF echo "ワンストップのシステムチューニング" echo "------------------------------------------------" echo "以下のコンテンツを運用・最適化していきます" - echo "1. システムアップデートソースを最適化し、システムを最新の状態にアップデートします。" + echo "1. システムアップデートソースを最適化し、システムを最新にアップデートします。" echo "2. システムジャンクファイルをクリーンアップする" echo -e "3. 仮想メモリを設定する${gl_huang}1G${gl_bai}" echo -e "4. SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" @@ -14366,11 +14366,11 @@ EOF 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}" + 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}" + local status_message="${gl_hui}コレクションは終了しました${gl_bai}" else - local status_message="无法确定的状态" + local status_message="不確実なステータス" fi echo "プライバシーとセキュリティ" @@ -14506,7 +14506,7 @@ linux_file() { 4) # 重命名目录 read -e -p "現在のディレクトリ名を入力してください:" current_name read -e -p "新しいディレクトリ名を入力してください:" new_name - mv "$current_name" "$new_name" && echo "ディレクトリ名が変更されました" || echo "名前の変更に失敗しました" + mv "$current_name" "$new_name" && echo "ディレクトリの名前が変更されました" || echo "名前の変更に失敗しました" send_stats "ディレクトリの名前を変更する" ;; 5) # 删除目录 @@ -14723,7 +14723,7 @@ while true; do 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}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}システムをクリーンアップする" @@ -14768,7 +14768,7 @@ while true; do 5) clear - send_stats "クラスタを復元する" + send_stats "クラスターを復元する" echo "servers.py をアップロードし、任意のキーを押してアップロードを開始してください。" echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}ファイルに${gl_huang}/root/cluster/${gl_bai}復元完了!" break_end @@ -14830,7 +14830,7 @@ echo "------------------------" echo -e "${gl_lan}Laika Cloud 香港 CN2 GIA 韓国のデュアル ISP 米国 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_lan}RackNerd 年間 10.99 ドル、米国、1 コア、1G メモリ、20G ハード ドライブ、月あたり 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" echo "------------------------" echo -e "${gl_zi}Hostinger 年間 $52.7 米国 1 コア 4G メモリ 50G ハードドライブ 月額 4T トラフィック${gl_bai}" @@ -14960,7 +14960,7 @@ while true; do fi echo "------------------------" - echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" + echo "1. 今すぐ更新します 2. 自動更新をオンにします 3. 自動更新をオフにします" echo "------------------------" echo "0. メインメニューに戻る" echo "------------------------" @@ -15051,7 +15051,7 @@ echo -e "${gl_kjlan}16. ${gl_bai}ゲームサーバー起動スクリプト集" 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}0. ${gl_bai}終了スクリプト" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice @@ -15084,7 +15084,7 @@ done k_info() { -send_stats "k コマンドのリファレンス例" +send_stats "k コマンドリファレンスの使用例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" @@ -15103,7 +15103,7 @@ echo "システムバックアップ機能 kバックアップ | k bf | k バッ echo "ssh リモート接続ツール k ssh | kリモート接続" echo "rsync リモート同期ツール k rsync | k リモート同期" echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" -echo "イントラネットの普及率 (サーバー) k frps" +echo "イントラネット普及率 (サーバー) k frps" echo "イントラネット浸透率 (クライアント) k frpc" echo "ソフトウェア起動 k start sshd | sshdを起動します" echo "ソフトウェア停止 k 停止 sshd | k ストップ sshd" @@ -15123,7 +15123,7 @@ echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xx echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" echo "L4 ロード バランシングのインストール k ストリーム |k L4 ロード バランシング" echo "ファイアウォール パネル k fhq |k ファイアウォール" -echo "ポートを開く k dkdk 8080 |k ポートを開く 8080" +echo "ポートを開きます 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 "ブロック IP k zzip 177.5.25.36 |k ブロック IP 177.5.25.36" @@ -15220,7 +15220,7 @@ else swap) shift - send_stats "仮想メモリを素早く設定する" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; @@ -15319,7 +15319,7 @@ else shift case $1 in install|安装) - send_stats "Docker をすばやくインストールする" + send_stats "Dockerを素早くインストールする" install_docker ;; ps|容器) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index d63ce1259..3801168a4 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -560,7 +560,7 @@ while true; do echo "" container_ids=$(docker ps -q) echo "------------------------------------------------------------" - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + 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}') @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP 지우기" + echo "7. 지정된 IP를 삭제합니다." echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1197,7 +1197,7 @@ iptables_panel() { ;; 17) - read -e -p "삭제된 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code + read -e -p "지워진 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code manage_country_rules unblock $country_code send_stats "명확한 국가$country_codeIP" ;; @@ -1259,7 +1259,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야 하는지 확인 +# 가상 메모리를 생성해야 하는지 결정 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1544,8 +1544,8 @@ certs_status() { send_stats "도메인 이름 인증서 신청 실패" echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." echo -e "1. 도메인 이름이 잘못 입력되었습니다. ➠ 도메인 이름이 올바르게 입력되었는지 확인하세요." - echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인" - echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." + echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인하세요." + echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하시기 바랍니다" echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." @@ -1862,7 +1862,7 @@ 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가 켜져 있습니다" + waf_status="WAF가 켜져 있습니다." else waf_status="" fi @@ -2248,7 +2248,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 실드가 열립니다. 부하가 낮으면 자동으로 5초 동안 쉴드를 닫습니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -2334,7 +2334,7 @@ check_nginx_compression() { # zstd가 켜져 있고 주석 처리가 해제되어 있는지 확인하세요. (전체 줄은 zstd on으로 시작됩니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status="zstd 압축이 켜져 있습니다" + zstd_status="zstd 압축이 활성화되었습니다" else zstd_status="" fi @@ -2514,7 +2514,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. +# check_docker="${gl_hui}가 ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -2579,7 +2579,7 @@ check_docker_image_update() { 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) @@ -3325,7 +3325,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" echo "------------------------" echo "$webname설치정보는 다음과 같습니다." @@ -3338,7 +3338,7 @@ nginx_web_on() { local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf @@ -3412,7 +3412,7 @@ ldnmp_Proxy() { check_ip_and_get_access_port "$yuming" if [ -z "$reverseproxy" ]; then - read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3440,7 +3440,7 @@ ldnmp_Proxy() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + sed -i "s/# 동적으로 추가/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf update_nginx_listen_port "$yuming" "$access_port" @@ -3488,7 +3488,7 @@ ldnmp_Proxy_backend() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + sed -i "s/# 동적으로 추가/$upstream_servers/g" /home/web/conf.d/$yuming.conf update_nginx_listen_port "$yuming" "$access_port" @@ -3505,7 +3505,7 @@ ldnmp_Proxy_backend() { list_stream_services() { STREAM_DIR="/home/web/stream.d" - printf "%-25s %-18s %-25s %-20s\n" "服务名" "通信类型" "本机地址" "后端地址" + printf "%-25s %-18s %-25s %-20s\n" "서비스 이름" "통신 유형" "현지 주소" "백엔드 주소" if [ -z "$(ls -A "$STREAM_DIR")" ]; then return @@ -3628,7 +3628,7 @@ stream_panel() { ldnmp_Proxy_backend_stream() { clear - webname="스트리밍 4계층 프록시-로드 밸런싱" + webname="스트림 4계층 프록시-로드 밸런싱" send_stats "설치하다$webname" echo "배포 시작$webname" @@ -3672,11 +3672,11 @@ ldnmp_Proxy_backend_stream() { upstream_servers="$upstream_servers server $server;\n" done - sed -i "s/# 动态添加/$upstream_servers/g" /home/web/stream.d/$proxy_name.conf + sed -i "s/# 동적으로 추가/$upstream_servers/g" /home/web/stream.d/$proxy_name.conf docker exec nginx nginx -s reload clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "------------------------" echo "방문 주소:" ip_address @@ -4099,7 +4099,7 @@ list_forwarding_services() { local config_file="$1" # 헤더 인쇄 - printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" + printf "%-20s %-25s %-30s %-10s\n" "서비스 이름" "인트라넷 주소" "외부 네트워크 주소" "규약" awk ' BEGIN { @@ -4318,7 +4318,7 @@ frps_panel() { 8) send_stats "IP 접근 차단" - echo "역방향 도메인 이름 접근이 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." + echo "역방향 도메인 이름 접근을 가지고 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." read -e -p "차단할 포트를 입력하세요:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4432,9 +4432,9 @@ yt_menu_pro() { while true; do if [ -x "/usr/local/bin/yt-dlp" ]; then - local YTDLP_STATUS="${gl_lv}已安装${gl_bai}" + local YTDLP_STATUS="${gl_lv}설치됨${gl_bai}" else - local YTDLP_STATUS="${gl_hui}未安装${gl_bai}" + local YTDLP_STATUS="${gl_hui}설치되지 않음${gl_bai}" fi clear @@ -5303,7 +5303,7 @@ bbrv3() { echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "데비안/우분투만 지원" - echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." + echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화해 드리겠습니다." echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5483,7 +5483,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -5513,7 +5513,7 @@ clamav_scan() { 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}/home/docker/clamav/log/scan.log${gl_bai}" echo -e "${gl_lv}바이러스 있으면 제발${gl_huang}scan.log${gl_lv}파일에서 FOUND 키워드를 검색하여 바이러스 위치를 확인하세요.${gl_bai}" } @@ -5768,7 +5768,7 @@ Kernel_optimize() { 1) cd ~ clear - local tiaoyou_moshi="高性能优化模式" + local tiaoyou_moshi="고성능 최적화 모드" optimize_high_performance send_stats "고성능 모드 최적화" ;; @@ -5782,19 +5782,19 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모드" + send_stats "웹사이트 최적화 모델" ;; 4) cd ~ clear - local tiaoyou_moshi="直播优化模式" + local tiaoyou_moshi="라이브 방송 최적화 모드" optimize_high_performance send_stats "라이브 스트리밍 최적화" ;; 5) cd ~ clear - local tiaoyou_moshi="游戏服优化模式" + local tiaoyou_moshi="게임 서버 최적화 모드" optimize_high_performance send_stats "게임 서버 최적화" ;; @@ -6225,14 +6225,14 @@ add_connection() { echo # 换行 ;; 2) - echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." + echo "주요 내용을 붙여넣으세요(붙여넣은 후 Enter를 두 번 누르세요)." 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 @@ -6573,14 +6573,14 @@ add_task() { auth_method="password" ;; 2) - echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." + echo "주요 내용을 붙여넣으세요(붙여넣은 후 Enter를 두 번 누르세요)." 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 @@ -6717,7 +6717,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근 가능한지 여부" + echo "2. 원격 호스트에 접근할 수 있나요?" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -6875,7 +6875,7 @@ linux_info() { 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 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 day ", run_days); if (run_hours > 0) printf("%d시간 ", run_hours); printf("%d분\n", run_mins)}') local timezone=$(current_timezone) @@ -7266,7 +7266,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 중...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(여러 개의 공백을 구분하고 Enter를 눌러 실행 중인 모든 컨테이너를 백업하십시오)." containers install tar jq gzip install_docker @@ -7405,7 +7405,7 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]가 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7495,7 +7495,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "도커 마이그레이션" install jq - read -e -p "마이그레이션할 백업 디렉터리를 입력하세요." BACKUP_DIR + read -e -p "마이그레이션할 백업 디렉터리를 입력하십시오:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } read -e -p "대상 서버 IP:" TARGET_IP @@ -7507,7 +7507,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키를 사용하여 로그인 + # 키로 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7540,7 +7540,7 @@ docker_ssh_migration() { echo -e "1. 도커 프로젝트 백업" echo -e "2. 도커 프로젝트 마이그레이션" echo -e "3. 도커 프로젝트 복원" - echo -e "4. docker 프로젝트 백업 파일 삭제" + echo -e "4. Docker 프로젝트의 백업 파일을 삭제합니다." echo "------------------------" echo -e "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -7648,7 +7648,7 @@ linux_docker() { echo "------------------------------------------------------------" container_ids=$(docker ps -q) - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + 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") @@ -7740,7 +7740,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8055,7 +8055,7 @@ linux_Oracle() { 1) clear echo "활성 스크립트: CPU 사용량 10-20% 메모리 사용량 20%" - read -e -p "정말로 설치하시겠습니까? (예/아니요):" choice + read -e -p "설치하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -8686,7 +8686,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}6/6${gl_bai}] 데이터베이스 관리" echo "-------------" - read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 구축하고 데이터베이스 백업을 가지고 있습니다." use_db + read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 구축하고 데이터베이스 백업이 있습니다." use_db case $use_db in 1) echo @@ -9258,7 +9258,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}------------------------" @@ -9335,7 +9335,7 @@ while true; do 1|bt|baota) local app_id="1" local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" + local panelname="탑 패널" local panelurl="https://www.bt.cn/new/index.html" panel_app_install() { @@ -9428,10 +9428,10 @@ while true; do } - local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" + local docker_describe="도메인 이름 액세스 추가를 지원하지 않는 Nginx 역방향 프록시 도구 패널." + local docker_url="공식 홈페이지 소개: https://nginxproxymanager.com/" + local docker_use="echo \"초기 사용자 이름: admin@example.com\"" + local docker_passwd="echo \"초기 비밀번호:changeme\"" local app_size="1" docker_app @@ -9463,8 +9463,8 @@ while true; do } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_describe="gin 및 Solidjs로 구동되는 다중 저장소, 웹 브라우징 및 WebDAV를 지원하는 파일 목록 프로그램" + local docker_url="공식 홈페이지 소개: https://github.com/OpenListTeam/OpenList" local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" @@ -9504,8 +9504,8 @@ while true; do } - local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="webtop은 Ubuntu 기반 컨테이너입니다. 해당 IP에 접속할 수 없는 경우, 접속할 도메인 이름을 추가해 주세요." + local docker_url="공식 홈페이지 소개: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -9515,7 +9515,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9584,8 +9584,8 @@ while true; do } - local docker_describe="qbittorrent离线BT磁力下载服务" - local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent" + 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" @@ -9636,7 +9636,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -9724,9 +9724,9 @@ while true; do 10|rocketchat) local app_id="10" - local app_name="Rocket.Chat聊天系统" - local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," - local app_url="官方介绍: https://www.rocket.chat/" + 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" @@ -9792,10 +9792,10 @@ while true; do } - local docker_describe="禅道是通用的项目管理软件" - local docker_url="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" + local docker_describe="ZenTao는 범용 프로젝트 관리 소프트웨어입니다" + local docker_url="공식 홈페이지 소개 : https://www.zentao.net/" + local docker_use="echo \"초기 사용자 이름: admin\"" + local docker_passwd="echo \"초기 비밀번호: 123456\"" local app_size="2" docker_app @@ -9821,8 +9821,8 @@ while true; do } - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_describe="Qinglong Panel은 예약된 작업 관리 플랫폼입니다." + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/whyour/qinglong" local docker_use="" local docker_passwd="" local app_size="1" @@ -9832,9 +9832,9 @@ while true; do 13|cloudreve) local app_id="13" - local app_name="cloudreve网盘" - local app_text="cloudreve是一个支持多家云存储的网盘系统" - local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" + local app_name="클라우드리브 네트워크 디스크" + 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" @@ -9886,8 +9886,8 @@ while true; do } - local docker_describe="简单图床是一个简单的图床程序" - local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0" + local docker_describe="심플드로잉베드는 심플드로잉베드 프로그램입니다" + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/icret/EasyImages2.0" local docker_use="" local docker_passwd="" local app_size="1" @@ -9914,8 +9914,8 @@ while true; do } - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" + local docker_describe="emby는 서버의 비디오 및 오디오를 구성하고 오디오 및 비디오를 클라이언트 장치로 스트리밍하는 데 사용할 수 있는 마스터-슬레이브 아키텍처 미디어 서버 소프트웨어입니다." + local docker_url="공식 홈페이지 소개 : https://emby.media/" local docker_use="" local docker_passwd="" local app_size="1" @@ -9935,8 +9935,8 @@ while true; do } - local docker_describe="Speedtest测速面板是一个VPS网速测试工具,多项测试功能,还可以实时监控VPS进出站流量" - local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als" + 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" @@ -9966,8 +9966,8 @@ while true; do } - local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/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" @@ -9995,8 +9995,8 @@ while true; do } - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" + local docker_describe="onlyoffice는 오픈 소스 온라인 오피스 도구로 매우 강력합니다!" + local docker_url="공식 홈페이지 소개 : https://www.onlyoffice.com/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10092,8 +10092,8 @@ while true; do } - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" + local docker_describe="portainer는 경량 도커 컨테이너 관리 패널입니다." + local docker_url="공식 홈페이지 소개 : https://www.portainer.io/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10115,8 +10115,8 @@ while true; do } - local docker_describe="VScode是一款强大的在线代码编写工具" - local docker_url="官网介绍: ${gh_proxy}github.com/coder/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" @@ -10143,8 +10143,8 @@ while true; do } - local docker_describe="Uptime Kuma 易于使用的自托管监控工具" - local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + local docker_describe="가동 시간 Kuma 사용하기 쉬운 자체 호스팅 모니터링 도구" + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/louislam/uptime-kuma" local docker_use="" local docker_passwd="" local app_size="1" @@ -10163,8 +10163,8 @@ while true; do } - local docker_describe="Memos是一款轻量级、自托管的备忘录中心" - local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_describe="Memos는 경량의 자체 호스팅 메모 센터입니다." + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/usememos/memos" local docker_use="" local docker_passwd="" local app_size="1" @@ -10204,8 +10204,8 @@ while true; do } - local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="웹탑은 중국어 버전의 Alpine 컨테이너를 기반으로 합니다. 해당 IP에 접속할 수 없는 경우, 접속할 도메인 이름을 추가해 주세요." + local docker_url="공식 홈페이지 소개: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10225,9 +10225,9 @@ while true; do } - local docker_describe="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" + local docker_describe="400,000개 이상 배포된 Nextcloud는 다운로드할 수 있는 가장 인기 있는 로컬 콘텐츠 협업 플랫폼입니다." + local docker_url="공식 홈페이지 소개 : https://nextcloud.com/" + local docker_use="echo \"계정: nextcloud 비밀번호:$rootpasswd\"" local docker_passwd="" local app_size="3" docker_app @@ -10245,8 +10245,8 @@ while true; do } - local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架" - local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/" + 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" @@ -10265,8 +10265,8 @@ while true; do } - local docker_describe="dockge是一个可视化的docker-compose容器管理面板" - local docker_url="官网介绍: ${gh_proxy}github.com/louislam/dockge" + local docker_describe="Dockge는 시각적 Docker 작성 컨테이너 관리 패널입니다." + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/louislam/dockge" local docker_use="" local docker_passwd="" local app_size="1" @@ -10285,8 +10285,8 @@ while true; do } - local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具,即开即用" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10310,8 +10310,8 @@ while true; do } - local docker_describe="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" + local docker_describe="searxng는 비공개 및 비공개 검색 엔진 사이트입니다." + local docker_url="공식 홈페이지 소개 : https://hub.docker.com/r/alandoyle/searxng" local docker_use="" local docker_passwd="" local app_size="1" @@ -10342,9 +10342,9 @@ while true; do } - local docker_describe="photoprism非常强大的私有相册系统" - local docker_url="官网介绍: https://www.photoprism.app/" - local docker_use="echo \"账号: admin 密码: $rootpasswd\"" + local docker_describe="포토프리즘은 매우 강력한 개인 사진 앨범 시스템입니다." + local docker_url="공식 홈페이지 소개 : https://www.photoprism.app/" + local docker_use="echo \"계정: admin 비밀번호:$rootpasswd\"" local docker_passwd="" local app_size="1" docker_app @@ -10370,8 +10370,8 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。" - local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" + local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 Docker를 사용하여 로컬로 호스팅되는 강력한 웹 기반 PDF 조작 도구입니다." + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" local app_size="1" @@ -10391,8 +10391,8 @@ while true; do } - local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" - local docker_url="官网介绍: https://www.drawio.com/" + local docker_describe="이것은 강력한 차트 작성 소프트웨어입니다. 마인드맵, 토폴로지 다이어그램, 흐름도를 그릴 수 있습니다." + local docker_url="공식 홈페이지 소개 : https://www.drawio.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10416,9 +10416,9 @@ while true; do } - 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_describe="Sun-Panel 서버, NAS 탐색 패널, 홈페이지, 브라우저 홈페이지" + 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 @@ -10440,8 +10440,8 @@ while true; do stonith404/pingvin-share } - local docker_describe="Pingvin Share 是一个可自建的文件分享平台,是 WeTransfer 的一个替代品" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10467,9 +10467,9 @@ while true; do } - local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" + local docker_describe="미니멀리스트 순간, 높은 모방 WeChat 순간, 멋진 삶을 기록하세요" local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" - local docker_use="echo \"账号: admin 密码: a123456\"" + local docker_use="echo \"계정: admin 비밀번호: a123456\"" local docker_passwd="" local app_size="1" docker_app @@ -10491,8 +10491,8 @@ while true; do 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_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" @@ -10512,8 +10512,8 @@ while true; do } - local docker_describe="是一个多功能IP工具箱,可以查看自己IP信息及连通性,用网页面板呈现" - local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md" + 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" @@ -10546,8 +10546,8 @@ while true; do } - local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具" - local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/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" @@ -10563,8 +10563,8 @@ while true; do 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_describe="간단한 온라인 SSH 연결 도구 및 SFTP 도구" + local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/Jrohy/webssh" local docker_use="" local docker_passwd="" local app_size="1" @@ -10575,8 +10575,8 @@ while true; do local app_id="41" local lujing="[ -d "/www/server/panel" ]" - local panelname="耗子面板" - local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/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 @@ -10616,8 +10616,8 @@ while true; do } - local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。" - local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm" + 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" @@ -10637,10 +10637,10 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(服务端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" + local docker_describe="Rustdesk의 오픈 소스 원격 데스크톱(서버)은 자체 Sunflower 개인 서버와 유사합니다." + local docker_url="공식 홈페이지 소개: https://rustdesk.com/zh-cn/" local docker_use="docker logs hbbs" - local docker_passwd="echo \"把你的IP和key记录下,会在远程桌面客户端中用到。去44选项装中继端吧!\"" + local docker_passwd="echo \"원격 데스크톱 클라이언트에서 사용될 IP와 키를 기록하세요. 릴레이를 설치하려면 옵션 44로 이동하세요!\"" local app_size="1" docker_app ;; @@ -10657,9 +10657,9 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(中继端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" - local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\"" + local docker_describe="Rustdesk의 오픈 소스 원격 데스크톱(릴레이)은 자체 Sunflower 개인 서버와 유사합니다." + 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 @@ -10683,8 +10683,8 @@ while true; do } - local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。" - local docker_url="官网介绍: https://hub.docker.com/_/registry" + local docker_describe="Docker Registry는 Docker 이미지를 저장하고 배포하는 서비스입니다." + local docker_url="공식 홈페이지 소개: https://hub.docker.com/_/registry" local docker_use="" local docker_passwd="" local app_size="2" @@ -10703,8 +10703,8 @@ while true; do } - local docker_describe="使用Go实现的GHProxy,用于加速部分地区Github仓库的拉取。" - local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy" + 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" @@ -10714,9 +10714,9 @@ while true; do 47|prometheus|grafana) local app_id="47" - local app_name="普罗米修斯监控" - local app_text="Prometheus+Grafana企业级监控系统" - local app_url="官网介绍: https://prometheus.io" + 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" @@ -10768,8 +10768,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_describe="이는 Prometheus 호스트 데이터 수집 구성 요소입니다. 모니터링되는 호스트에 배포하세요." + local docker_url="공식 홈페이지 소개: https://github.com/prometheus/node_exporter" local docker_use="" local docker_passwd="" local app_size="1" @@ -10798,8 +10798,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_describe="이는 Prometheus 컨테이너 데이터 수집 구성 요소입니다. 모니터링되는 호스트에 배포하세요." + local docker_url="공식 홈페이지 소개: https://github.com/google/cadvisor" local docker_use="" local docker_passwd="" local app_size="1" @@ -10821,8 +10821,8 @@ while true; do } - local docker_describe="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" + local docker_describe="이는 웹사이트 변경 감지, 보충 모니터링 및 알림을 위한 작은 도구입니다." + local docker_url="공식 홈페이지 소개: https://github.com/dgtlmoon/changeDetection.io" local docker_use="" local docker_passwd="" local app_size="1" @@ -10854,8 +10854,8 @@ while true; do } - local docker_describe="Docker可视化面板系统,提供完善的docker管理功能。" - local docker_url="官网介绍: https://github.com/donknap/dpanel" + local docker_describe="Docker 시각적 패널 시스템은 완전한 Docker 관리 기능을 제공합니다." + local docker_url="공식 홈페이지 소개: https://github.com/donknap/dpanel" local docker_use="" local docker_passwd="" local app_size="1" @@ -10874,8 +10874,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的llama3大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + 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" @@ -10886,8 +10886,8 @@ while true; do local app_id="54" local lujing="[ -d "/www/server/panel" ]" - local panelname="AMH面板" - local panelurl="官方地址: https://amh.sh/index.htm?amh" + local panelname="AMH 패널" + local panelurl="공식 주소 : https://amh.sh/index.htm?amh" panel_app_install() { cd ~ @@ -10926,8 +10926,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的DeepSeek R1大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + 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" @@ -10937,9 +10937,9 @@ while true; do 58|dify) local app_id="58" - local app_name="Dify知识库" - local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" - local app_url="官方网站: https://docs.dify.ai/zh-hans" + local app_name="DifyKnowledge Base" + 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" @@ -10982,8 +10982,8 @@ while true; do 59|new-api) local app_id="59" local app_name="NewAPI" - local app_text="新一代大模型网关与AI资产管理系统" - local app_url="官方网站: https://github.com/Calcium-Ion/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" @@ -11034,9 +11034,9 @@ while true; do 60|jms) local app_id="60" - local app_name="JumpServer开源堡垒机" - local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" - local app_url="官方介绍: https://github.com/jumpserver/jumpserver" + local app_name="JumpServer 오픈 소스 요새 머신" + local app_text="오픈소스 PAM(Privileged Access Management) 도구입니다. 이 프로그램은 포트 80을 사용하며 액세스를 위한 도메인 이름 추가를 지원하지 않습니다." + local app_url="공식 소개: https://github.com/jumpserver/jumpserver" local docker_name="jms_web" local docker_port="80" local app_size="2" @@ -11086,8 +11086,8 @@ while true; do } - local docker_describe="免费开源机器翻译 API,完全自托管,它的翻译引擎由开源Argos Translate库提供支持。" - local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate" + local docker_describe="무료 오픈 소스 기계 번역 API, 완전 자체 호스팅 및 번역 엔진은 오픈 소스 Argos Translate 라이브러리에 의해 구동됩니다." + local docker_url="공식 홈페이지 소개: https://github.com/LibreTranslate/LibreTranslate" local docker_use="" local docker_passwd="" local app_size="5" @@ -11098,9 +11098,9 @@ while true; do 62|ragflow) local app_id="62" - local app_name="RAGFlow知识库" - local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" - local app_url="官方网站: https://github.com/infiniflow/ragflow" + local app_name="RAGFlow 지식 기반" + local app_text="깊은 문서 이해를 기반으로 한 오픈소스 RAG(Retrieval Augmented Generation) 엔진" + local app_url="공식 홈페이지: https://github.com/infiniflow/ragflow" local docker_name="ragflow-server" local docker_port="8062" local app_size="8" @@ -11147,8 +11147,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,官方精简版本,支持各大模型API接入" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + 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" @@ -11165,8 +11165,8 @@ while true; do docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } - local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" - local docker_url="官网介绍: https://github.com/CorentinTh/it-tools" + local docker_describe="개발자와 IT 작업자에게 매우 유용한 도구" + local docker_url="공식 홈페이지 소개: https://github.com/CorentinTh/it-tools" local docker_use="" local docker_passwd="" local app_size="1" @@ -11201,8 +11201,8 @@ while true; do } - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_describe="강력한 자동화된 워크플로우 플랫폼입니다." + local docker_url="공식 홈페이지 소개: https://github.com/n8n-io/n8n" local docker_use="" local docker_passwd="" local app_size="1" @@ -11230,8 +11230,8 @@ while true; do } - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_describe="동적 도메인 이름 확인을 위해 공용 IP(IPv4/IPv6)를 주요 DNS 서비스 제공업체에 실시간으로 자동 업데이트합니다." + local docker_url="공식 홈페이지 소개: https://github.com/jeessy2/ddns-go" local docker_use="" local docker_passwd="" local app_size="1" @@ -11248,10 +11248,10 @@ while true; do docker run -d --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 \"用户名: allinssl 密码: allinssldocker\"" + local docker_describe="오픈 소스 무료 SSL 인증서 자동화 관리 플랫폼" + local docker_url="공식 홈페이지 소개: https://allinssl.com" + local docker_use="echo \"보안 입구: /allinssl\"" + local docker_passwd="echo \"사용자 이름: allinssl 비밀번호: allinssldocker\"" local app_size="1" docker_app ;; @@ -11280,8 +11280,8 @@ while true; do } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" + local docker_describe="언제 어디서나 무료 오픈 소스 SFTP FTP WebDAV 파일 전송 도구" + local docker_url="공식 홈페이지 소개 : https://sftpgo.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11312,9 +11312,9 @@ while true; do } - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_describe="대규모 AI 모델에 대한 WeChat, QQ 및 TG 액세스를 지원하는 오픈 소스 AI 챗봇 프레임워크" + local docker_url="공식 홈페이지 소개: https://astrbot.app/" + local docker_use="echo \"사용자 이름: astrbot 비밀번호: astrbot\"" local docker_passwd="" local app_size="1" docker_app @@ -11341,8 +11341,8 @@ while true; do } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" + local docker_describe="경량, 고성능 음악 스트리밍 서버입니다." + local docker_url="공식 홈페이지 소개 : https://www.navidrome.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11368,8 +11368,8 @@ while true; do } - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" + local docker_describe="귀하의 데이터를 통제할 수 있는 비밀번호 관리자" + local docker_url="공식 홈페이지 소개: https://bitwarden.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11400,8 +11400,8 @@ while true; do } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_describe="무료 온라인 비디오 검색 및 시청 플랫폼" + local docker_url="공식 홈페이지 소개: https://github.com/LibreSpark/LibreTV" local docker_use="" local docker_passwd="" local app_size="1" @@ -11415,9 +11415,9 @@ while true; do local app_id="74" - local app_name="moontv私有影视" - local app_text="免费在线视频搜索与观看平台" - local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local app_name="Moontv 개인 영화 및 TV" + local app_text="무료 온라인 비디오 검색 및 시청 플랫폼" + local app_url="영상소개 : https://github.com/MoonTechLab/LunaTV" local docker_name="moontv-core" local docker_port="8074" local app_size="2" @@ -11482,8 +11482,8 @@ while true; do } - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_describe="음악을 더 잘 관리할 수 있도록 설계된 음악 마법사입니다." + local docker_url="공식 홈페이지 소개: https://github.com/foamzou/melody" local docker_use="" local docker_passwd="" local app_size="1" @@ -11509,8 +11509,8 @@ while true; do } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_describe="중국의 DOS 게임 컬렉션 웹사이트입니다." + local docker_url="공식 홈페이지 소개: https://github.com/rwv/chinese-dos-games" local docker_use="" local docker_passwd="" local app_size="2" @@ -11544,9 +11544,9 @@ while true; do } - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_describe="오프라인 고속 BT 자기 다운로드 도구인 Xunlei" + local docker_url="공식 홈페이지 소개: https://github.com/cnk3x/xunlei" + local docker_use="echo \"휴대폰으로 Xunlei에 로그인한 후 초대 코드를 입력하세요. 초대 코드: Xunlei Niutong\"" local docker_passwd="" local app_size="1" docker_app @@ -11559,8 +11559,8 @@ while true; do local app_id="78" local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local app_text="PandaWiki는 AI 대형 모델을 기반으로 하는 오픈 소스 지능형 문서 관리 시스템입니다. 포트 배포를 사용자 정의하지 않는 것이 좋습니다." + local app_url="공식 소개: https://github.com/chaitin/PandaWiki" local docker_name="panda-wiki-nginx" local docker_port="2443" local app_size="2" @@ -11602,8 +11602,8 @@ while true; do } - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_describe="Beszel은 가볍고 사용하기 쉬운 서버 모니터링입니다." + local docker_url="공식 홈페이지 소개: https://beszel.dev/zh/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11615,9 +11615,9 @@ while true; do 80|linkwarden) local app_id="80" - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" + local app_name="링크워든 북마크 관리" + local app_text="태그 지정, 검색 및 팀 협업을 지원하는 오픈 소스 자체 호스팅 북마크 관리 플랫폼입니다." + local app_url="공식 홈페이지: https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -11687,9 +11687,9 @@ while true; do 81|jitsi) local app_id="81" - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" + local app_name="JitsiMeet 화상 회의" + local app_text="다자간 온라인 회의, 화면 공유, 암호화된 통신을 지원하는 오픈 소스 보안 화상 회의 솔루션입니다." + local app_url="공식 홈페이지: https://jitsi.org/" local docker_name="jitsi" local docker_port="8081" local app_size="3" @@ -11755,8 +11755,8 @@ while true; do } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_describe="고성능 AI 인터페이스 투명 프록시 서비스" + local docker_url="공식 홈페이지 소개: https://www.gpt-load.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11788,9 +11788,9 @@ while true; do } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_describe="경량 자체 호스팅 서버 모니터링 도구" + local docker_url="공식 홈페이지 소개: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"기본 계정: admin 기본 비밀번호: 1212156\"" local docker_passwd="" local app_size="1" docker_app @@ -11819,8 +11819,8 @@ while true; do } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_describe="재무 관리를 위한 오픈 소스 개인 구독 추적기" + local docker_url="공식 홈페이지 소개: https://github.com/ellite/Wallos" local docker_use="" local docker_passwd="" local app_size="1" @@ -11831,9 +11831,9 @@ while true; do 85|immich) local app_id="85" - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" + local app_name="이미치 픽처 비디오 매니저" + local app_text="고성능 자체 호스팅 사진 및 비디오 관리 솔루션입니다." + local app_url="공식 홈페이지 소개: https://github.com/immich-app/immich" local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -11897,8 +11897,8 @@ while true; do } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" + local docker_describe="오픈 소스 미디어 서버 소프트웨어입니다" + local docker_url="공식 홈페이지 소개 : https://jellyfin.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11925,9 +11925,9 @@ while true; do } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_describe="영화와 생방송을 원격으로 함께 시청할 수 있는 프로그램입니다. 동시 시청, 라이브 방송, 채팅 및 기타 기능을 제공합니다." + local docker_url="공식 홈페이지 소개: https://github.com/synctv-org/synctv" + local docker_use="echo \"초기 계정 및 비밀번호: root. 로그인 후 시간에 맞춰 로그인 비밀번호를 변경하세요\"" local docker_passwd="" local app_size="1" docker_app @@ -11955,10 +11955,10 @@ while true; do } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local docker_describe="오픈 소스, 자체 구축한 무료 라이브 방송 플랫폼" + local docker_url="공식 홈페이지 소개 : https://owncast.online" + local docker_use="echo \"접속 주소 뒤에는 /admin이 붙어서 관리자 페이지에 접근합니다\"" + local docker_passwd="echo \"초기 계정: admin 초기 비밀번호: abc123 로그인 후 시간 내에 로그인 비밀번호를 변경해주세요\"" local app_size="1" docker_app @@ -11984,10 +11984,10 @@ while true; do } - local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" - local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" - local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" + local docker_describe="익명의 비밀번호로 텍스트와 파일을 공유하고, 빠른 배송과 같은 파일 픽업" + local docker_url="공식 홈페이지 소개: https://github.com/vastsa/FileCodeBox" + local docker_use="echo \"접속 주소 뒤에는 /#/admin이 붙어서 관리자 페이지에 접속합니다\"" + local docker_passwd="echo \"관리자 비밀번호: FileCodeBox2023\"" local app_size="1" docker_app @@ -12040,8 +12040,8 @@ while true; do } - local docker_describe="Matrix是一个去中心化的聊天协议" - local docker_url="官网介绍: https://matrix.org/" + local docker_describe="Matrix는 분산형 채팅 프로토콜입니다." + local docker_url="공식 홈페이지 소개 : https://matrix.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12055,9 +12055,9 @@ while true; do local app_id="91" - local app_name="gitea私有代码仓库" - local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" - local app_url="视频介绍: https://github.com/go-gitea/gitea" + local app_name="gitea 비공개 코드 저장소" + local app_text="GitHub에 가까운 경험을 제공하는 무료 차세대 코드 호스팅 플랫폼입니다." + local app_url="영상 소개: https://github.com/go-gitea/gitea" local docker_name="gitea" local docker_port="8091" local app_size="2" @@ -12119,8 +12119,8 @@ while true; do } - local docker_describe="是一个基于Web的文件管理器" - local docker_url="官网介绍: https://filebrowser.org/" + local docker_describe="웹 기반 파일 관리자입니다" + local docker_url="공식 홈페이지 소개 : https://filebrowser.org/" local docker_use="docker logs filebrowser" local docker_passwd="" local app_size="1" @@ -12146,8 +12146,8 @@ while true; do } - local docker_describe="极简静态文件服务器,支持上传下载" - local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_describe="미니멀리스트 정적 파일 서버, 업로드 및 다운로드 지원" + local docker_url="공식 홈페이지 소개: https://github.com/sigoden/dufs" local docker_use="" local docker_passwd="" local app_size="1" @@ -12177,8 +12177,8 @@ while true; do } - local docker_describe="分布式高速下载工具,支持多种协议" - local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_describe="여러 프로토콜을 지원하는 분산 고속 다운로드 도구" + local docker_url="공식 홈페이지 소개: https://github.com/GopeedLab/gopeed" local docker_use="" local docker_passwd="" local app_size="1" @@ -12192,9 +12192,9 @@ while true; do local app_id="95" - local app_name="paperless文档管理平台" - local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" - local app_url="视频介绍: https://docs.paperless-ngx.com/" + local app_name="종이 없는 문서 관리 플랫폼" + local app_text="오픈 소스 전자 문서 관리 시스템으로, 주요 목적은 종이 문서를 디지털화하고 관리하는 것입니다." + local app_url="영상 소개: https://docs.paperless-ngx.com/" local docker_name="paperless-webserver-1" local docker_port="8095" local app_size="2" @@ -12240,9 +12240,9 @@ while true; do local app_id="96" - local app_name="2FAuth自托管二步验证器" - local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" - local app_url="官网: https://github.com/Bubka/2FAuth" + local app_name="2FAuth 자체 호스팅 2단계 인증자" + local app_text="자체 호스팅 2단계 인증(2FA) 계정 관리 및 확인 코드 생성 도구입니다." + local app_url="공식 홈페이지: https://github.com/Bubka/2FAuth" local docker_name="2fauth" local docker_port="8096" local app_size="1" @@ -12387,8 +12387,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="최신 고성능 가상 사설망 도구" + local docker_url="공식 홈페이지 소개 : https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12457,8 +12457,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="최신 고성능 가상 사설망 도구" + local docker_url="공식 홈페이지 소개 : https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12471,9 +12471,9 @@ while true; do local app_id="99" - local app_name="dsm群晖虚拟机" - local app_text="Docker容器中的虚拟DSM" - local app_url="官网: https://github.com/vdsm/virtual-dsm" + local app_name="dsm Synology 가상 머신" + local app_text="Docker 컨테이너의 가상 DSM" + local app_url="공식 웹사이트: https://github.com/vdsm/virtual-dsm" local docker_name="dsm" local docker_port="8099" local app_size="16" @@ -12543,8 +12543,8 @@ while true; do syncthing/syncthing:latest } - local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" - local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_describe="Dropbox 및 Resilio Sync와 유사하지만 완전히 분산된 오픈 소스 P2P 파일 동기화 도구입니다." + local docker_url="공식 홈페이지 소개: https://github.com/syncthing/syncthing" local docker_use="" local docker_passwd="" local app_size="1" @@ -12555,9 +12555,9 @@ while true; do 101|moneyprinterturbo) local app_id="101" - local app_name="AI视频生成工具" - local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" - local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local app_name="AI 영상 생성 도구" + local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 단편 동영상을 합성하는 도구입니다." + local app_url="공식 웹사이트: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" local app_size="3" @@ -12610,8 +12610,8 @@ while true; do } - local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" - local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_describe="독립적인 배포를 지원하는 개인용 클라우드 소셜 미디어 채팅 서비스입니다." + local docker_url="공식 홈페이지 소개: https://github.com/Privoce/vocechat-web" local docker_use="" local docker_passwd="" local app_size="1" @@ -12622,9 +12622,9 @@ while true; do 103|umami) local app_id="103" - local app_name="Umami网站统计工具" - local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" - local app_url="官方网站: https://github.com/umami-software/umami" + local app_name="Umami 웹사이트 통계 도구" + local app_text="Google Analytics와 유사한 오픈 소스, 가볍고 개인정보 보호 친화적인 웹사이트 분석 도구입니다." + local app_url="공식 웹사이트: https://github.com/umami-software/umami" local docker_name="umami-umami-1" local docker_port="8103" local app_size="1" @@ -12689,8 +12689,8 @@ while true; do } - local docker_describe="思源笔记是一款隐私优先的知识管理系统" - local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_describe="Siyuan Notes는 개인 정보 보호를 최우선으로 하는 지식 관리 시스템입니다." + local docker_url="공식 홈페이지 소개: https://github.com/siyuan-note/siyuan" local docker_use="" local docker_passwd="" local app_size="1" @@ -12716,8 +12716,8 @@ while true; do } - local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" - local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_describe="마인드맵, 플로우차트 등을 통합한 강력한 오픈소스 화이트보드 도구입니다." + local docker_url="공식 홈페이지 소개: https://github.com/plait-board/ drawix" local docker_use="" local docker_passwd="" local app_size="1" @@ -12751,8 +12751,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" - local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_describe="PanSou는 고성능 네트워크 디스크 리소스 검색 API 서비스입니다." + local docker_url="공식 홈페이지 소개: https://github.com/fish2018/pansou" local docker_use="" local docker_passwd="" local app_size="1" @@ -12765,9 +12765,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 108|langbot) local app_id="108" - local app_name="LangBot聊天机器人" - local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" - local app_url="官方网站: https://github.com/langbot-app/LangBot" + local app_name="LangBot 챗봇" + local app_text="오픈 소스 대형 언어 모델 기반 인스턴트 메시징 로봇 개발 플랫폼입니다." + local app_url="공식 홈페이지: https://github.com/langbot-app/LangBot" local docker_name="langbot_plugin_runtime" local docker_port="8108" local app_size="1" @@ -12823,8 +12823,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个适用于个人或小团队的在线网盘程序。" - local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_describe="개인이나 소규모 팀에 적합한 온라인 네트워크 디스크 프로그램입니다." + local docker_url="공식 홈페이지 소개: https://github.com/zfile-dev/zfile" local docker_use="" local docker_passwd="" local app_size="1" @@ -12835,9 +12835,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 110|karakeep) local app_id="110" - local app_name="karakeep书签管理" - local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" - local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local app_name="karakeep 북마크 관리" + local app_text="데이터 수집가를 위해 설계된 인공 지능 기능을 갖춘 자체 호스팅 북마크 앱입니다." + local app_url="공식 홈페이지: https://github.com/karakeep-app/karakeep" local docker_name="docker-web-1" local docker_port="8110" local app_size="1" @@ -12889,8 +12889,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" - local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_describe="강력한 다중 형식 파일 변환 도구입니다(문서, 이미지, 오디오 및 비디오 등 지원). 도메인 이름 액세스를 추가하는 것이 좋습니다." + local docker_url="프로젝트 주소: https://github.com/c4illin/ConvertX" local docker_use="" local docker_passwd="" local app_size="2" @@ -12947,7 +12947,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 애플리케이션 백업" + echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -13005,12 +13005,12 @@ linux_work() { 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}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}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}작업공간 생성/입력" @@ -13099,9 +13099,9 @@ linux_work() { 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}" + local tmux_sshd_status="${gl_lv}켜다${gl_bai}" else - local tmux_sshd_status="${gl_hui}关闭${gl_bai}" + local tmux_sshd_status="${gl_hui}폐쇄${gl_bai}" fi send_stats "SSH 상주 모드" echo -e "SSH 상주 모드${tmux_sshd_status}" @@ -13122,7 +13122,7 @@ linux_work() { tmux_run ;; 2) - sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc + sed -i '/# 자동으로 tmux 세션을 입력합니다/,+4d' ~/.bashrc tmux kill-window -t sshd ;; *) @@ -13282,7 +13282,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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}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}사용자/비밀번호 생성기" @@ -13292,7 +13292,7 @@ linux_Settings() { 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}ROOT 개인 키 로그인 모드" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기 경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템 커널 매개변수 최적화${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}바이러스 검사 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" echo -e "${gl_kjlan}------------------------" @@ -13346,7 +13346,7 @@ linux_Settings() { echo "파이썬 버전 관리" echo "영상 소개: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "이 기능은 Python이 공식적으로 지원하는 모든 버전을 원활하게 설치할 수 있습니다!" + echo "이 기능은 Python에서 공식적으로 지원하는 모든 버전을 원활하게 설치할 수 있습니다!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "현재 Python 버전 번호:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13579,7 +13579,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "1G 가상 메모리가 설정되었습니다." add_swap 1024 ;; @@ -13613,7 +13613,7 @@ EOF send_stats "사용자 관리" echo "사용자 목록" echo "----------------------------------------------------------------------------" - printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" + 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") @@ -13749,7 +13749,7 @@ EOF # 현재 시스템 시간대 가져오기 local timezone=$(current_timezone) - # 현재 시스템 시간을 가져옵니다 + # 현재 시스템 시간 가져오기 local current_time=$(date +"%Y-%m-%d %H:%M:%S") # 시간대 및 시간 표시 @@ -13837,7 +13837,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 + # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -14032,7 +14032,7 @@ EOF 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}" + echo -e "${gl_hui}전류 제한 종료 기능은 현재 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -14048,12 +14048,12 @@ EOF case "$Limiting" in 1) # 새 가상 메모리 크기 입력 - echo "실제 서버의 트래픽이 100G만 있는 경우 임계값을 95G로 설정하고 미리 종료하여 트래픽 오류나 오버플로를 방지할 수 있습니다." + echo "실제 서버에 트래픽이 100G만 있는 경우 임계값을 95G로 설정하고 미리 종료하여 트래픽 오류나 오버플로를 방지할 수 있습니다." read -e -p "인바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "아웃바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "트래픽 재설정 날짜를 입력하세요(기본적으로 매월 1일 재설정)." cz_day + read -e -p "트래픽 재설정 날짜를 입력하세요(기본적으로 매월 1일에 재설정됨)." cz_day cz_day=${cz_day:-1} cd ~ @@ -14366,11 +14366,11 @@ EOF 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}" + 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}" + local status_message="${gl_hui}컬렉션이 닫혔습니다.${gl_bai}" else - local status_message="无法确定的状态" + local status_message="불확실한 상태" fi echo "개인 정보 보호 및 보안" @@ -14842,7 +14842,7 @@ echo "------------------------" echo -e "${gl_lan}DMIT 분기당 $28 US CN2GIA 1 코어 2G 메모리 20G 하드 드라이브 월별 800G 트래픽${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" +echo -e "${gl_zi}V.PS 월 6.9달러 Tokyo Softbank 2코어 1G 메모리 20G 하드 드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}더 인기 있는 VPS 혜택${gl_bai}" @@ -15084,7 +15084,7 @@ done k_info() { -send_stats "k 명령 참조 예" +send_stats "k 명령 참조 사용 사례" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." @@ -15123,12 +15123,12 @@ echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "L4 로드 밸런싱 설치 k 스트림 |k L4 로드 밸런싱" echo "방화벽 패널 k fhq |k 방화벽" -echo "포트 k 열기 DKdk 8080 |k 포트 8080 열기" +echo "포트 k 열기 ddk 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 "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장관리 kapp" +echo "애플리케이션 시장 관리 k app" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "Fail2ban 관리 k Fail2ban | 케이 F2B" echo "시스템 정보 표시 k 정보" diff --git a/translate.py b/translate.py index 496df5347..96c5ae508 100644 --- a/translate.py +++ b/translate.py @@ -12,101 +12,81 @@ def translate_text(text, target_lang): if not text.strip() or not is_chinese(text): return text try: - return GoogleTranslator(source='zh-CN', target=target_lang).translate(text) + # 过滤掉一些不该翻译的特殊符号 + clean_text = text.strip() + result = GoogleTranslator(source='zh-CN', target=target_lang).translate(clean_text) + return result except Exception as e: - print(f"\nTranslation error: {e}") + print(f"\n[Error] {e}") return text -def translate_line_preserving_variables(line, target_lang): +def process_content_with_vars(content, target_lang): """ - 处理 echo/read/send_stats 等命令中的中文,同时保护其中的 ${var} + 核心逻辑:保护 ${var} 和 $var,翻译其中的中文部分 """ - def repl(match): - full_string = match.group(0) - quote = full_string[0] - content = full_string[1:-1] - # 分割出变量,只翻译非变量部分 - parts = re.split(r'(\$\{?\w+\}?)', content) - translated_parts = [ - translate_text(p, target_lang) if is_chinese(p) else p - for p in parts - ] - return quote + ''.join(translated_parts) + quote - - return re.sub(r'(?:\'[^\']*\'|"[^"]*")', repl, line) + # 匹配 ${var} 或 $var (字母数字下划线) + parts = re.split(r'(\$\{\w+\}|\$\w+)', content) + translated_parts = [] + for p in parts: + if p.startswith('$'): # 变量部分,保持原样 + translated_parts.append(p) + elif is_chinese(p): # 中文部分,翻译 + translated_parts.append(translate_text(p, target_lang)) + else: # 其他英文/符号,保持原样 + translated_parts.append(p) + return "".join(translated_parts) -def translate_assignment_value(line, target_lang): +def universal_translator(line, target_lang): """ - 专门处理变量赋值语句:VAR="中文内容" -> VAR="Translated Content" + 通用翻译引擎:识别行内所有引号内容并翻译 """ - # 匹配 key="value" 或 key='value' 格式,且 value 包含中文 - match = re.match(r'^(\s*[a-zA-Z_][a-zA-Z0-9_]*\s*=\s*)([\'"])(.*)([\'"])(.*)$', line) - if match: - prefix, quote_open, value, quote_close, suffix = match.groups() - if is_chinese(value): - # 同样要保护赋值内容里的 ${var} - parts = re.split(r'(\$\{?\w+\}?)', value) - translated_value = "".join([ - translate_text(p, target_lang) if is_chinese(p) else p - for p in parts - ]) - return f"{prefix}{quote_open}{translated_value}{quote_close}{suffix}\n" - return line + # 1. 保护注释行 + leading_space = re.match(r'^(\s*)', line).group(1) + stripped = line.strip() + if stripped.startswith('#'): + comment_content = stripped[1:].strip() + if is_chinese(comment_content): + return f"{leading_space}# {translate_text(comment_content, target_lang)}\n" + return line + + # 2. 识别所有引号内的内容 (双引号或单引号) + # 使用正则匹配引号对,同时处理转义引号 \" + def replacer(match): + quote_type = match.group(1) # ' 或 " + content = match.group(2) # 引号内的文本内容 + if is_chinese(content): + # 翻译内容,但保护里面的变量 + translated = process_content_with_vars(content, target_lang) + return f"{quote_type}{translated}{quote_type}" + return match.group(0) + + # 匹配 "content" 或 'content' + new_line = re.sub(r'([\'"])(.*?)(? 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}') + 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) @@ -7648,7 +7648,7 @@ linux_docker() { echo "------------------------------------------------------------" container_ids=$(docker ps -q) - printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址" + 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") @@ -9335,7 +9335,7 @@ while true; do 1|bt|baota) local app_id="1" local lujing="[ -d "/www/server/panel" ]" - local panelname="宝塔面板" + local panelname="寶塔面板" local panelurl="https://www.bt.cn/new/index.html" panel_app_install() { @@ -9428,10 +9428,10 @@ while true; do } - local docker_describe="一个Nginx反向代理工具面板,不支持添加域名访问。" - local docker_url="官网介绍: https://nginxproxymanager.com/" - local docker_use="echo \"初始用户名: admin@example.com\"" - local docker_passwd="echo \"初始密码: changeme\"" + local docker_describe="一個Nginx反向代理工具面板,不支持添加域名訪問。" + local docker_url="官網介紹: https://nginxproxymanager.com/" + local docker_use="echo \"初始用戶名: admin@example.com\"" + local docker_passwd="echo \"初始密碼: changeme\"" local app_size="1" docker_app @@ -9463,8 +9463,8 @@ while true; do } - local docker_describe="一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动" - local docker_url="官网介绍: https://github.com/OpenListTeam/OpenList" + local docker_describe="一個支持多種存儲,支持網頁瀏覽和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驅動" + local docker_url="官網介紹: https://github.com/OpenListTeam/OpenList" local docker_use="docker exec openlist ./openlist admin random" local docker_passwd="" local app_size="1" @@ -9504,8 +9504,8 @@ while true; do } - local docker_describe="webtop基于Ubuntu的容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="webtop基於Ubuntu的容器。若IP無法訪問,請添加域名訪問。" + local docker_url="官網介紹: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -9584,8 +9584,8 @@ while true; do } - local docker_describe="qbittorrent离线BT磁力下载服务" - local docker_url="官网介绍: https://hub.docker.com/r/linuxserver/qbittorrent" + 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" @@ -9724,9 +9724,9 @@ while true; do 10|rocketchat) local app_id="10" - local app_name="Rocket.Chat聊天系统" - local app_text="Rocket.Chat 是一个开源的团队通讯平台,支持实时聊天、音视频通话、文件共享等多种功能," - local app_url="官方介绍: https://www.rocket.chat/" + 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" @@ -9792,10 +9792,10 @@ while true; do } - local docker_describe="禅道是通用的项目管理软件" - local docker_url="官网介绍: https://www.zentao.net/" - local docker_use="echo \"初始用户名: admin\"" - local docker_passwd="echo \"初始密码: 123456\"" + 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 @@ -9821,8 +9821,8 @@ while true; do } - local docker_describe="青龙面板是一个定时任务管理平台" - local docker_url="官网介绍: ${gh_proxy}github.com/whyour/qinglong" + local docker_describe="青龍面板是一個定時任務管理平台" + local docker_url="官網介紹:${gh_proxy}github.com/whyour/qinglong" local docker_use="" local docker_passwd="" local app_size="1" @@ -9832,9 +9832,9 @@ while true; do 13|cloudreve) local app_id="13" - local app_name="cloudreve网盘" - local app_text="cloudreve是一个支持多家云存储的网盘系统" - local app_url="视频介绍: https://www.bilibili.com/video/BV13F4m1c7h7?t=0.1" + 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" @@ -9886,8 +9886,8 @@ while true; do } - local docker_describe="简单图床是一个简单的图床程序" - local docker_url="官网介绍: ${gh_proxy}github.com/icret/EasyImages2.0" + local docker_describe="簡單圖床是一個簡單的圖床程序" + local docker_url="官網介紹:${gh_proxy}github.com/icret/EasyImages2.0" local docker_use="" local docker_passwd="" local app_size="1" @@ -9914,8 +9914,8 @@ while true; do } - local docker_describe="emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备" - local docker_url="官网介绍: https://emby.media/" + local docker_describe="emby是一個主從式架構的媒體服務器軟件,可以用來整理服務器上的視頻和音頻,並將音頻和視頻流式傳輸到客戶端設備" + local docker_url="官網介紹: https://emby.media/" local docker_use="" local docker_passwd="" local app_size="1" @@ -9935,8 +9935,8 @@ while true; do } - local docker_describe="Speedtest测速面板是一个VPS网速测试工具,多项测试功能,还可以实时监控VPS进出站流量" - local docker_url="官网介绍: ${gh_proxy}github.com/wikihost-opensource/als" + 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" @@ -9966,8 +9966,8 @@ while true; do } - local docker_describe="AdGuardHome是一款全网广告拦截与反跟踪软件,未来将不止是一个DNS服务器。" - local docker_url="官网介绍: https://hub.docker.com/r/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" @@ -9995,8 +9995,8 @@ while true; do } - local docker_describe="onlyoffice是一款开源的在线office工具,太强大了!" - local docker_url="官网介绍: https://www.onlyoffice.com/" + local docker_describe="onlyoffice是一款開源的在線office工具,太強大了!" + local docker_url="官網介紹: https://www.onlyoffice.com/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10092,8 +10092,8 @@ while true; do } - local docker_describe="portainer是一个轻量级的docker容器管理面板" - local docker_url="官网介绍: https://www.portainer.io/" + local docker_describe="portainer是一個輕量級的docker容器管理面板" + local docker_url="官網介紹: https://www.portainer.io/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10115,8 +10115,8 @@ while true; do } - local docker_describe="VScode是一款强大的在线代码编写工具" - local docker_url="官网介绍: ${gh_proxy}github.com/coder/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" @@ -10143,8 +10143,8 @@ while true; do } - local docker_describe="Uptime Kuma 易于使用的自托管监控工具" - local docker_url="官网介绍: ${gh_proxy}github.com/louislam/uptime-kuma" + 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" @@ -10163,8 +10163,8 @@ while true; do } - local docker_describe="Memos是一款轻量级、自托管的备忘录中心" - local docker_url="官网介绍: ${gh_proxy}github.com/usememos/memos" + local docker_describe="Memos是一款輕量級、自託管的備忘錄中心" + local docker_url="官網介紹:${gh_proxy}github.com/usememos/memos" local docker_use="" local docker_passwd="" local app_size="1" @@ -10204,8 +10204,8 @@ while true; do } - local docker_describe="webtop基于Alpine的中文版容器。若IP无法访问,请添加域名访问。" - local docker_url="官网介绍: https://docs.linuxserver.io/images/docker-webtop/" + local docker_describe="webtop基於Alpine的中文版容器。若IP無法訪問,請添加域名訪問。" + local docker_url="官網介紹: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" local app_size="2" @@ -10225,9 +10225,9 @@ while true; do } - local docker_describe="Nextcloud拥有超过 400,000 个部署,是您可以下载的最受欢迎的本地内容协作平台" - local docker_url="官网介绍: https://nextcloud.com/" - local docker_use="echo \"账号: nextcloud 密码: $rootpasswd\"" + 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 @@ -10245,8 +10245,8 @@ while true; do } - local docker_describe="QD-Today是一个HTTP请求定时任务自动执行框架" - local docker_url="官网介绍: https://qd-today.github.io/qd/zh_CN/" + 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" @@ -10265,8 +10265,8 @@ while true; do } - local docker_describe="dockge是一个可视化的docker-compose容器管理面板" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10285,8 +10285,8 @@ while true; do } - local docker_describe="librespeed是用Javascript实现的轻量级速度测试工具,即开即用" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10310,8 +10310,8 @@ while true; do } - local docker_describe="searxng是一个私有且隐私的搜索引擎站点" - local docker_url="官网介绍: https://hub.docker.com/r/alandoyle/searxng" + local docker_describe="searxng是一個私有且隱私的搜索引擎站點" + local docker_url="官網介紹: https://hub.docker.com/r/alandoyle/searxng" local docker_use="" local docker_passwd="" local app_size="1" @@ -10342,9 +10342,9 @@ while true; do } - local docker_describe="photoprism非常强大的私有相册系统" - local docker_url="官网介绍: https://www.photoprism.app/" - local docker_use="echo \"账号: admin 密码: $rootpasswd\"" + 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 @@ -10370,8 +10370,8 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="这是一个强大的本地托管基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分合并、转换、重新组织、添加图像、旋转、压缩等。" - local docker_url="官网介绍: ${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" + 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" @@ -10391,8 +10391,8 @@ while true; do } - local docker_describe="这是一个强大图表绘制软件。思维导图,拓扑图,流程图,都能画" - local docker_url="官网介绍: https://www.drawio.com/" + local docker_describe="這是一個強大圖表繪製軟件。思維導圖,拓撲圖,流程圖,都能畫" + local docker_url="官網介紹: https://www.drawio.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -10416,9 +10416,9 @@ while true; do } - 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_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 @@ -10440,8 +10440,8 @@ while true; do stonith404/pingvin-share } - local docker_describe="Pingvin Share 是一个可自建的文件分享平台,是 WeTransfer 的一个替代品" - local docker_url="官网介绍: ${gh_proxy}github.com/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" @@ -10467,9 +10467,9 @@ while true; do } - local docker_describe="极简朋友圈,高仿微信朋友圈,记录你的美好生活" + local docker_describe="極簡朋友圈,高仿微信朋友圈,記錄你的美好生活" local docker_url="官網介紹:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" - local docker_use="echo \"账号: admin 密码: a123456\"" + local docker_use="echo \"賬號: admin 密碼: a123456\"" local docker_passwd="" local app_size="1" docker_app @@ -10492,7 +10492,7 @@ while true; do } local docker_describe="LobeChat聚合市面上主流的AI大模型,ChatGPT/Claude/Gemini/Groq/Ollama" - local docker_url="官网介绍: ${gh_proxy}github.com/lobehub/lobe-chat" + local docker_url="官網介紹:${gh_proxy}github.com/lobehub/lobe-chat" local docker_use="" local docker_passwd="" local app_size="2" @@ -10512,8 +10512,8 @@ while true; do } - local docker_describe="是一个多功能IP工具箱,可以查看自己IP信息及连通性,用网页面板呈现" - local docker_url="官网介绍: ${gh_proxy}github.com/jason5ng32/MyIP/blob/main/README_ZH.md" + 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" @@ -10546,8 +10546,8 @@ while true; do } - local docker_describe="Bililive-go是一个支持多种直播平台的直播录制工具" - local docker_url="官网介绍: ${gh_proxy}github.com/hr3lxphr6j/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" @@ -10563,8 +10563,8 @@ while true; do 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_describe="簡易在線ssh連接工具和sftp工具" + local docker_url="官網介紹:${gh_proxy}github.com/Jrohy/webssh" local docker_use="" local docker_passwd="" local app_size="1" @@ -10575,8 +10575,8 @@ while true; do local app_id="41" local lujing="[ -d "/www/server/panel" ]" - local panelname="耗子面板" - local panelurl="官方地址: ${gh_proxy}github.com/TheTNB/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 @@ -10616,8 +10616,8 @@ while true; do } - local docker_describe="nexterm是一款强大的在线SSH/VNC/RDP连接工具。" - local docker_url="官网介绍: ${gh_proxy}github.com/gnmyt/Nexterm" + 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" @@ -10637,10 +10637,10 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(服务端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" + 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 docker_passwd="echo \"把你的IP和key記錄下,會在遠程桌面客戶端中用到。去44選項裝中繼端吧!\"" local app_size="1" docker_app ;; @@ -10657,9 +10657,9 @@ while true; do } - local docker_describe="rustdesk开源的远程桌面(中继端),类似自己的向日葵私服。" - local docker_url="官网介绍: https://rustdesk.com/zh-cn/" - local docker_use="echo \"前往官网下载远程桌面的客户端: https://rustdesk.com/zh-cn/\"" + 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 @@ -10683,8 +10683,8 @@ while true; do } - local docker_describe="Docker Registry 是一个用于存储和分发 Docker 镜像的服务。" - local docker_url="官网介绍: https://hub.docker.com/_/registry" + local docker_describe="Docker Registry 是一個用於存儲和分發 Docker 鏡像的服務。" + local docker_url="官網介紹: https://hub.docker.com/_/registry" local docker_use="" local docker_passwd="" local app_size="2" @@ -10703,8 +10703,8 @@ while true; do } - local docker_describe="使用Go实现的GHProxy,用于加速部分地区Github仓库的拉取。" - local docker_url="官网介绍: https://github.com/WJQSERVER-STUDIO/ghproxy" + 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" @@ -10714,9 +10714,9 @@ while true; do 47|prometheus|grafana) local app_id="47" - local app_name="普罗米修斯监控" - local app_text="Prometheus+Grafana企业级监控系统" - local app_url="官网介绍: https://prometheus.io" + 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" @@ -10768,8 +10768,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的主机数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/prometheus/node_exporter" + local docker_describe="這是一個普羅米修斯的主機數據採集組件,請部署在被監控主機上。" + local docker_url="官網介紹: https://github.com/prometheus/node_exporter" local docker_use="" local docker_passwd="" local app_size="1" @@ -10798,8 +10798,8 @@ while true; do } - local docker_describe="这是一个普罗米修斯的容器数据采集组件,请部署在被监控主机上。" - local docker_url="官网介绍: https://github.com/google/cadvisor" + local docker_describe="這是一個普羅米修斯的容器數據採集組件,請部署在被監控主機上。" + local docker_url="官網介紹: https://github.com/google/cadvisor" local docker_use="" local docker_passwd="" local app_size="1" @@ -10821,8 +10821,8 @@ while true; do } - local docker_describe="这是一款网站变化检测、补货监控和通知的小工具" - local docker_url="官网介绍: https://github.com/dgtlmoon/changedetection.io" + local docker_describe="這是一款網站變化檢測、補貨監控和通知的小工具" + local docker_url="官網介紹: https://github.com/dgtlmoon/changedetection.io" local docker_use="" local docker_passwd="" local app_size="1" @@ -10854,8 +10854,8 @@ while true; do } - local docker_describe="Docker可视化面板系统,提供完善的docker管理功能。" - local docker_url="官网介绍: https://github.com/donknap/dpanel" + local docker_describe="Docker可視化面板系統,提供完善的docker管理功能。" + local docker_url="官網介紹: https://github.com/donknap/dpanel" local docker_use="" local docker_passwd="" local app_size="1" @@ -10874,8 +10874,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的llama3大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + 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" @@ -10926,8 +10926,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,接入全新的DeepSeek R1大语言模型" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + 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" @@ -10937,9 +10937,9 @@ while true; do 58|dify) local app_id="58" - local app_name="Dify知识库" - local app_text="是一款开源的大语言模型(LLM) 应用开发平台。自托管训练数据用于AI生成" - local app_url="官方网站: https://docs.dify.ai/zh-hans" + 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" @@ -10982,8 +10982,8 @@ while true; do 59|new-api) local app_id="59" local app_name="NewAPI" - local app_text="新一代大模型网关与AI资产管理系统" - local app_url="官方网站: https://github.com/Calcium-Ion/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" @@ -11034,9 +11034,9 @@ while true; do 60|jms) local app_id="60" - local app_name="JumpServer开源堡垒机" - local app_text="是一个开源的特权访问管理 (PAM) 工具,该程序占用80端口不支持添加域名访问了" - local app_url="官方介绍: https://github.com/jumpserver/jumpserver" + 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" @@ -11086,8 +11086,8 @@ while true; do } - local docker_describe="免费开源机器翻译 API,完全自托管,它的翻译引擎由开源Argos Translate库提供支持。" - local docker_url="官网介绍: https://github.com/LibreTranslate/LibreTranslate" + local docker_describe="免費開源機器翻譯 API,完全自託管,它的翻譯引擎由開源Argos Translate庫提供支持。" + local docker_url="官網介紹: https://github.com/LibreTranslate/LibreTranslate" local docker_use="" local docker_passwd="" local app_size="5" @@ -11098,9 +11098,9 @@ while true; do 62|ragflow) local app_id="62" - local app_name="RAGFlow知识库" - local app_text="基于深度文档理解的开源 RAG(检索增强生成)引擎" - local app_url="官方网站: https://github.com/infiniflow/ragflow" + 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" @@ -11147,8 +11147,8 @@ while true; do } - local docker_describe="OpenWebUI一款大语言模型网页框架,官方精简版本,支持各大模型API接入" - local docker_url="官网介绍: https://github.com/open-webui/open-webui" + 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" @@ -11165,8 +11165,8 @@ while true; do docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest } - local docker_describe="对开发人员和 IT 工作者来说非常有用的工具" - local docker_url="官网介绍: https://github.com/CorentinTh/it-tools" + local docker_describe="對開發人員和 IT 工作者來說非常有用的工具" + local docker_url="官網介紹: https://github.com/CorentinTh/it-tools" local docker_use="" local docker_passwd="" local app_size="1" @@ -11201,8 +11201,8 @@ while true; do } - local docker_describe="是一款功能强大的自动化工作流平台" - local docker_url="官网介绍: https://github.com/n8n-io/n8n" + local docker_describe="是一款功能強大的自動化工作流平台" + local docker_url="官網介紹: https://github.com/n8n-io/n8n" local docker_use="" local docker_passwd="" local app_size="1" @@ -11230,8 +11230,8 @@ while true; do } - local docker_describe="自动将你的公网 IP(IPv4/IPv6)实时更新到各大 DNS 服务商,实现动态域名解析。" - local docker_url="官网介绍: https://github.com/jeessy2/ddns-go" + local docker_describe="自動將你的公網 IP(IPv4/IPv6)實時更新到各大 DNS 服務商,實現動態域名解析。" + local docker_url="官網介紹: https://github.com/jeessy2/ddns-go" local docker_use="" local docker_passwd="" local app_size="1" @@ -11248,10 +11248,10 @@ while true; do docker run -d --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_describe="開源免費的 SSL 證書自動化管理平台" + local docker_url="官網介紹: https://allinssl.com" local docker_use="echo \"安全入口: /allinssl\"" - local docker_passwd="echo \"用户名: allinssl 密码: allinssldocker\"" + local docker_passwd="echo \"用戶名: allinssl 密碼: allinssldocker\"" local app_size="1" docker_app ;; @@ -11280,8 +11280,8 @@ while true; do } - local docker_describe="开源免费随时随地SFTP FTP WebDAV 文件传输工具" - local docker_url="官网介绍: https://sftpgo.com/" + local docker_describe="開源免費隨時隨地SFTP FTP WebDAV 文件傳輸工具" + local docker_url="官網介紹: https://sftpgo.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11312,9 +11312,9 @@ while true; do } - local docker_describe="开源AI聊天机器人框架,支持微信,QQ,TG接入AI大模型" - local docker_url="官网介绍: https://astrbot.app/" - local docker_use="echo \"用户名: astrbot 密码: astrbot\"" + local docker_describe="開源AI聊天機器人框架,支持微信,QQ,TG接入AI大模型" + local docker_url="官網介紹: https://astrbot.app/" + local docker_use="echo \"用戶名: astrbot 密碼: astrbot\"" local docker_passwd="" local app_size="1" docker_app @@ -11341,8 +11341,8 @@ while true; do } - local docker_describe="是一个轻量、高性能的音乐流媒体服务器" - local docker_url="官网介绍: https://www.navidrome.org/" + local docker_describe="是一個輕量、高性能的音樂流媒體服務器" + local docker_url="官網介紹: https://www.navidrome.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11368,8 +11368,8 @@ while true; do } - local docker_describe="一个你可以控制数据的密码管理器" - local docker_url="官网介绍: https://bitwarden.com/" + local docker_describe="一個你可以控制數據的密碼管理器" + local docker_url="官網介紹: https://bitwarden.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11400,8 +11400,8 @@ while true; do } - local docker_describe="免费在线视频搜索与观看平台" - local docker_url="官网介绍: https://github.com/LibreSpark/LibreTV" + local docker_describe="免費在線視頻搜索與觀看平台" + local docker_url="官網介紹: https://github.com/LibreSpark/LibreTV" local docker_use="" local docker_passwd="" local app_size="1" @@ -11415,9 +11415,9 @@ while true; do local app_id="74" - local app_name="moontv私有影视" - local app_text="免费在线视频搜索与观看平台" - local app_url="视频介绍: https://github.com/MoonTechLab/LunaTV" + local app_name="moontv私有影視" + local app_text="免費在線視頻搜索與觀看平台" + local app_url="視頻介紹: https://github.com/MoonTechLab/LunaTV" local docker_name="moontv-core" local docker_port="8074" local app_size="2" @@ -11482,8 +11482,8 @@ while true; do } - local docker_describe="你的音乐精灵,旨在帮助你更好地管理音乐。" - local docker_url="官网介绍: https://github.com/foamzou/melody" + local docker_describe="你的音樂精靈,旨在幫助你更好地管理音樂。" + local docker_url="官網介紹: https://github.com/foamzou/melody" local docker_use="" local docker_passwd="" local app_size="1" @@ -11509,8 +11509,8 @@ while true; do } - local docker_describe="是一个中文DOS游戏合集网站" - local docker_url="官网介绍: https://github.com/rwv/chinese-dos-games" + local docker_describe="是一個中文DOS遊戲合集網站" + local docker_url="官網介紹: https://github.com/rwv/chinese-dos-games" local docker_use="" local docker_passwd="" local app_size="2" @@ -11544,9 +11544,9 @@ while true; do } - local docker_describe="迅雷你的离线高速BT磁力下载工具" - local docker_url="官网介绍: https://github.com/cnk3x/xunlei" - local docker_use="echo \"手机登录迅雷,再输入邀请码,邀请码: 迅雷牛通\"" + local docker_describe="迅雷你的離線高速BT磁力下載工具" + local docker_url="官網介紹: https://github.com/cnk3x/xunlei" + local docker_use="echo \"手機登錄迅雷,再輸入邀請碼,邀請碼: 迅雷牛通\"" local docker_passwd="" local app_size="1" docker_app @@ -11559,8 +11559,8 @@ while true; do local app_id="78" local app_name="PandaWiki" - local app_text="PandaWiki是一款AI大模型驱动的开源智能文档管理系统,强烈建议不要自定义端口部署。" - local app_url="官方介绍: https://github.com/chaitin/PandaWiki" + local app_text="PandaWiki是一款AI大模型驅動的開源智能文檔管理系統,強烈建議不要自定義端口部署。" + local app_url="官方介紹: https://github.com/chaitin/PandaWiki" local docker_name="panda-wiki-nginx" local docker_port="2443" local app_size="2" @@ -11602,8 +11602,8 @@ while true; do } - local docker_describe="Beszel轻量易用的服务器监控" - local docker_url="官网介绍: https://beszel.dev/zh/" + local docker_describe="Beszel輕量易用的服務器監控" + local docker_url="官網介紹: https://beszel.dev/zh/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11615,9 +11615,9 @@ while true; do 80|linkwarden) local app_id="80" - local app_name="linkwarden书签管理" - local app_text="一个开源的自托管书签管理平台,支持标签、搜索和团队协作。" - local app_url="官方网站: https://linkwarden.app/" + local app_name="linkwarden書籤管理" + local app_text="一個開源的自託管書籤管理平台,支持標籤、搜索和團隊協作。" + local app_url="官方網站: https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" local app_size="3" @@ -11687,9 +11687,9 @@ while true; do 81|jitsi) local app_id="81" - local app_name="JitsiMeet视频会议" - local app_text="一个开源的安全视频会议解决方案,支持多人在线会议、屏幕共享与加密通信。" - local app_url="官方网站: https://jitsi.org/" + local app_name="JitsiMeet視頻會議" + local app_text="一個開源的安全視頻會議解決方案,支持多人在線會議、屏幕共享與加密通信。" + local app_url="官方網站: https://jitsi.org/" local docker_name="jitsi" local docker_port="8081" local app_size="3" @@ -11755,8 +11755,8 @@ while true; do } - local docker_describe="高性能AI接口透明代理服务" - local docker_url="官网介绍: https://www.gpt-load.com/" + local docker_describe="高性能AI接口透明代理服務" + local docker_url="官網介紹: https://www.gpt-load.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11788,9 +11788,9 @@ while true; do } - local docker_describe="轻量级的自托管服务器监控工具" - local docker_url="官网介绍: https://github.com/komari-monitor/komari/tree/main" - local docker_use="echo \"默认账号: admin 默认密码: 1212156\"" + local docker_describe="輕量級的自託管服務器監控工具" + local docker_url="官網介紹: https://github.com/komari-monitor/komari/tree/main" + local docker_use="echo \"默認賬號: admin 默認密碼: 1212156\"" local docker_passwd="" local app_size="1" docker_app @@ -11819,8 +11819,8 @@ while true; do } - local docker_describe="开源个人订阅追踪器,可用于财务管理" - local docker_url="官网介绍: https://github.com/ellite/Wallos" + local docker_describe="開源個人訂閱追踪器,可用於財務管理" + local docker_url="官網介紹: https://github.com/ellite/Wallos" local docker_use="" local docker_passwd="" local app_size="1" @@ -11831,9 +11831,9 @@ while true; do 85|immich) local app_id="85" - local app_name="immich图片视频管理器" - local app_text="高性能自托管照片和视频管理解决方案。" - local app_url="官网介绍: https://github.com/immich-app/immich" + local app_name="immich圖片視頻管理器" + local app_text="高性能自託管照片和視頻管理解決方案。" + local app_url="官網介紹: https://github.com/immich-app/immich" local docker_name="immich_server" local docker_port="8085" local app_size="3" @@ -11897,8 +11897,8 @@ while true; do } - local docker_describe="是一款开源媒体服务器软件" - local docker_url="官网介绍: https://jellyfin.org/" + local docker_describe="是一款開源媒體服務器軟件" + local docker_url="官網介紹: https://jellyfin.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -11925,9 +11925,9 @@ while true; do } - local docker_describe="远程一起观看电影和直播的程序。它提供了同步观影、直播、聊天等功能" - local docker_url="官网介绍: https://github.com/synctv-org/synctv" - local docker_use="echo \"初始账号和密码: root 登陆后请及时修改登录密码\"" + local docker_describe="遠程一起觀看電影和直播的程序。它提供了同步觀影、直播、聊天等功能" + local docker_url="官網介紹: https://github.com/synctv-org/synctv" + local docker_use="echo \"初始賬號和密碼: root 登陸後請及時修改登錄密碼\"" local docker_passwd="" local app_size="1" docker_app @@ -11955,10 +11955,10 @@ while true; do } - local docker_describe="开源、免费的自建直播平台" - local docker_url="官网介绍: https://owncast.online" - local docker_use="echo \"访问地址后面带 /admin 访问管理员页面\"" - local docker_passwd="echo \"初始账号: admin 初始密码: abc123 登陆后请及时修改登录密码\"" + local docker_describe="開源、免費的自建直播平台" + local docker_url="官網介紹: https://owncast.online" + local docker_use="echo \"訪問地址後面帶 /admin 訪問管理員頁面\"" + local docker_passwd="echo \"初始賬號: admin 初始密碼: abc123 登陸後請及時修改登錄密碼\"" local app_size="1" docker_app @@ -11984,10 +11984,10 @@ while true; do } - local docker_describe="匿名口令分享文本和文件,像拿快递一样取文件" - local docker_url="官网介绍: https://github.com/vastsa/FileCodeBox" - local docker_use="echo \"访问地址后面带 /#/admin 访问管理员页面\"" - local docker_passwd="echo \"管理员密码: FileCodeBox2023\"" + local docker_describe="匿名口令分享文本和文件,像拿快遞一樣取文件" + local docker_url="官網介紹: https://github.com/vastsa/FileCodeBox" + local docker_use="echo \"訪問地址後面帶 /#/admin 訪問管理員頁面\"" + local docker_passwd="echo \"管理員密碼: FileCodeBox2023\"" local app_size="1" docker_app @@ -12040,8 +12040,8 @@ while true; do } - local docker_describe="Matrix是一个去中心化的聊天协议" - local docker_url="官网介绍: https://matrix.org/" + local docker_describe="Matrix是一個去中心化的聊天協議" + local docker_url="官網介紹: https://matrix.org/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12055,9 +12055,9 @@ while true; do local app_id="91" - local app_name="gitea私有代码仓库" - local app_text="免费新一代的代码托管平台,提供接近 GitHub 的使用体验。" - local app_url="视频介绍: https://github.com/go-gitea/gitea" + local app_name="gitea私有代碼倉庫" + local app_text="免費新一代的代碼託管平台,提供接近 GitHub 的使用體驗。" + local app_url="視頻介紹: https://github.com/go-gitea/gitea" local docker_name="gitea" local docker_port="8091" local app_size="2" @@ -12119,8 +12119,8 @@ while true; do } - local docker_describe="是一个基于Web的文件管理器" - local docker_url="官网介绍: https://filebrowser.org/" + local docker_describe="是一個基於Web的文件管理器" + local docker_url="官網介紹: https://filebrowser.org/" local docker_use="docker logs filebrowser" local docker_passwd="" local app_size="1" @@ -12146,8 +12146,8 @@ while true; do } - local docker_describe="极简静态文件服务器,支持上传下载" - local docker_url="官网介绍: https://github.com/sigoden/dufs" + local docker_describe="極簡靜態文件服務器,支持上傳下載" + local docker_url="官網介紹: https://github.com/sigoden/dufs" local docker_use="" local docker_passwd="" local app_size="1" @@ -12177,8 +12177,8 @@ while true; do } - local docker_describe="分布式高速下载工具,支持多种协议" - local docker_url="官网介绍: https://github.com/GopeedLab/gopeed" + local docker_describe="分佈式高速下載工具,支持多種協議" + local docker_url="官網介紹: https://github.com/GopeedLab/gopeed" local docker_use="" local docker_passwd="" local app_size="1" @@ -12192,9 +12192,9 @@ while true; do local app_id="95" - local app_name="paperless文档管理平台" - local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。" - local app_url="视频介绍: https://docs.paperless-ngx.com/" + local app_name="paperless文檔管理平台" + local app_text="開源的電子文檔管理系統,它的主要用途是把你的紙質文件數字化並管理起來。" + local app_url="視頻介紹: https://docs.paperless-ngx.com/" local docker_name="paperless-webserver-1" local docker_port="8095" local app_size="2" @@ -12240,9 +12240,9 @@ while true; do local app_id="96" - local app_name="2FAuth自托管二步验证器" - local app_text="自托管的双重身份验证 (2FA) 账户管理和验证码生成工具。" - local app_url="官网: https://github.com/Bubka/2FAuth" + local app_name="2FAuth自託管二步驗證器" + local app_text="自託管的雙重身份驗證 (2FA) 賬戶管理和驗證碼生成工具。" + local app_url="官網: https://github.com/Bubka/2FAuth" local docker_name="2fauth" local docker_port="8096" local app_size="1" @@ -12387,8 +12387,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="現代化、高性能的虛擬專用網絡工具" + local docker_url="官網介紹: https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12457,8 +12457,8 @@ while true; do } - local docker_describe="现代化、高性能的虚拟专用网络工具" - local docker_url="官网介绍: https://www.wireguard.com/" + local docker_describe="現代化、高性能的虛擬專用網絡工具" + local docker_url="官網介紹: https://www.wireguard.com/" local docker_use="" local docker_passwd="" local app_size="1" @@ -12471,9 +12471,9 @@ while true; do local app_id="99" - local app_name="dsm群晖虚拟机" - local app_text="Docker容器中的虚拟DSM" - local app_url="官网: https://github.com/vdsm/virtual-dsm" + local app_name="dsm群暉虛擬機" + local app_text="Docker容器中的虛擬DSM" + local app_url="官網: https://github.com/vdsm/virtual-dsm" local docker_name="dsm" local docker_port="8099" local app_size="16" @@ -12543,8 +12543,8 @@ while true; do syncthing/syncthing:latest } - local docker_describe="开源的点对点文件同步工具,类似于 Dropbox、Resilio Sync,但完全去中心化。" - local docker_url="官网介绍: https://github.com/syncthing/syncthing" + local docker_describe="開源的點對點文件同步工具,類似於 Dropbox、Resilio Sync,但完全去中心化。" + local docker_url="官網介紹: https://github.com/syncthing/syncthing" local docker_use="" local docker_passwd="" local app_size="1" @@ -12555,9 +12555,9 @@ while true; do 101|moneyprinterturbo) local app_id="101" - local app_name="AI视频生成工具" - local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短视频的工具" - local app_url="官方网站: https://github.com/harry0703/MoneyPrinterTurbo" + local app_name="AI視頻生成工具" + local app_text="MoneyPrinterTurbo是一款使用AI大模型合成高清短視頻的工具" + local app_url="官方網站: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" local app_size="3" @@ -12610,8 +12610,8 @@ while true; do } - local docker_describe="是一款支持独立部署的个人云社交媒体聊天服务" - local docker_url="官网介绍: https://github.com/Privoce/vocechat-web" + local docker_describe="是一款支持獨立部署的個人云社交媒體聊天服務" + local docker_url="官網介紹: https://github.com/Privoce/vocechat-web" local docker_use="" local docker_passwd="" local app_size="1" @@ -12622,9 +12622,9 @@ while true; do 103|umami) local app_id="103" - local app_name="Umami网站统计工具" - local app_text="开源、轻量、隐私友好的网站分析工具,类似于GoogleAnalytics。" - local app_url="官方网站: https://github.com/umami-software/umami" + local app_name="Umami網站統計工具" + local app_text="開源、輕量、隱私友好的網站分析工具,類似於GoogleAnalytics。" + local app_url="官方網站: https://github.com/umami-software/umami" local docker_name="umami-umami-1" local docker_port="8103" local app_size="1" @@ -12689,8 +12689,8 @@ while true; do } - local docker_describe="思源笔记是一款隐私优先的知识管理系统" - local docker_url="官网介绍: https://github.com/siyuan-note/siyuan" + local docker_describe="思源筆記是一款隱私優先的知識管理系統" + local docker_url="官網介紹: https://github.com/siyuan-note/siyuan" local docker_use="" local docker_passwd="" local app_size="1" @@ -12716,8 +12716,8 @@ while true; do } - local docker_describe="是一款强大的开源白板工具,集成思维导图、流程图等。" - local docker_url="官网介绍: https://github.com/plait-board/drawnix" + local docker_describe="是一款強大的開源白板工具,集成思維導圖、流程圖等。" + local docker_url="官網介紹: https://github.com/plait-board/drawnix" local docker_use="" local docker_passwd="" local app_size="1" @@ -12751,8 +12751,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="PanSou是一个高性能的网盘资源搜索API服务。" - local docker_url="官网介绍: https://github.com/fish2018/pansou" + local docker_describe="PanSou是一個高性能的網盤資源搜索API服務。" + local docker_url="官網介紹: https://github.com/fish2018/pansou" local docker_use="" local docker_passwd="" local app_size="1" @@ -12765,9 +12765,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 108|langbot) local app_id="108" - local app_name="LangBot聊天机器人" - local app_text="是一个开源的大语言模型原生即时通信机器人开发平台" - local app_url="官方网站: https://github.com/langbot-app/LangBot" + local app_name="LangBot聊天機器人" + local app_text="是一個開源的大語言模型原生即時通信機器人開發平台" + local app_url="官方網站: https://github.com/langbot-app/LangBot" local docker_name="langbot_plugin_runtime" local docker_port="8108" local app_size="1" @@ -12823,8 +12823,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个适用于个人或小团队的在线网盘程序。" - local docker_url="官网介绍: https://github.com/zfile-dev/zfile" + local docker_describe="是一個適用於個人或小團隊的在線網盤程序。" + local docker_url="官網介紹: https://github.com/zfile-dev/zfile" local docker_use="" local docker_passwd="" local app_size="1" @@ -12835,9 +12835,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ 110|karakeep) local app_id="110" - local app_name="karakeep书签管理" - local app_text="是一款可自行托管的书签应用,带有人工智能功能,专为数据囤积者而设计。" - local app_url="官方网站: https://github.com/karakeep-app/karakeep" + local app_name="karakeep書籤管理" + local app_text="是一款可自行託管的書籤應用,帶有人工智能功能,專為數據囤積者而設計。" + local app_url="官方網站: https://github.com/karakeep-app/karakeep" local docker_name="docker-web-1" local docker_port="8110" local app_size="1" @@ -12889,8 +12889,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="是一个功能强大的多格式文件转换工具(支持文档、图像、音频视频等)强烈建议添加域名访问" - local docker_url="项目地址: https://github.com/c4illin/ConvertX" + local docker_describe="是一個功能強大的多格式文件轉換工具(支持文檔、圖像、音頻視頻等)強烈建議添加域名訪問" + local docker_url="項目地址: https://github.com/c4illin/ConvertX" local docker_use="" local docker_passwd="" local app_size="2" @@ -13099,9 +13099,9 @@ linux_work() { 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}" + local tmux_sshd_status="${gl_lv}開啟${gl_bai}" else - local tmux_sshd_status="${gl_hui}关闭${gl_bai}" + local tmux_sshd_status="${gl_hui}關閉${gl_bai}" fi send_stats "SSH常駐模式" echo -e "SSH常駐模式${tmux_sshd_status}" @@ -13122,7 +13122,7 @@ linux_work() { tmux_run ;; 2) - sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc + sed -i '/# 自動進入 tmux 會話/,+4d' ~/.bashrc tmux kill-window -t sshd ;; *) @@ -13613,7 +13613,7 @@ EOF send_stats "用戶管理" echo "用戶列表" echo "----------------------------------------------------------------------------" - printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限" + 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") @@ -14366,11 +14366,11 @@ EOF 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}" + 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}" + local status_message="${gl_hui}採集已關閉${gl_bai}" else - local status_message="无法确定的状态" + local status_message="無法確定的狀態" fi echo "隱私與安全" From 0dbb031666ebb84e8ee78e3abf9c4167ce466d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:40:07 +0800 Subject: [PATCH 456/553] Add Lucky tool and update menu options --- cn/kejilion.sh | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2edb9a057..15a65cf5c 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9322,7 +9322,7 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具" + echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12899,7 +12899,32 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 112|lucky) + local app_id="112" + local docker_name="lucky" + local docker_img="gdy666/lucky:v2" + # 由于 Lucky 使用 host 网络模式,这里的端口仅作记录/说明参考,实际由应用自身控制(默认16601) + local docker_port=16601 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + --network host \ + -v /home/docker/lucky/conf:/app/conf \ + -v /var/run/docker.sock:/var/run/docker.sock \ + ${docker_img} + + } + + local docker_describe="Lucky 是一个大内网穿透及端口转发管理工具,支持 DDNS、反向代理、WOL 等功能。host模式请不要使用自定义端口。" + local docker_url="项目地址: https://github.com/gdy666/lucky" + local docker_use="echo \"默认账号密码: 666\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) From 140d5f33de0cd5acadd4e30489f4731a01d8eda4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:41:09 +0800 Subject: [PATCH 457/553] Add Lucky app for internal network penetration tool --- kejilion.sh | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 33f670e46..035a82082 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9322,7 +9322,7 @@ while true; do echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具" + echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12899,7 +12899,32 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 112|lucky) + local app_id="112" + local docker_name="lucky" + local docker_img="gdy666/lucky:v2" + # 由于 Lucky 使用 host 网络模式,这里的端口仅作记录/说明参考,实际由应用自身控制(默认16601) + local docker_port=16601 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + --network host \ + -v /home/docker/lucky/conf:/app/conf \ + -v /var/run/docker.sock:/var/run/docker.sock \ + ${docker_img} + + } + + local docker_describe="Lucky 是一个大内网穿透及端口转发管理工具,支持 DDNS、反向代理、WOL 等功能。host模式请不要使用自定义端口。" + local docker_url="项目地址: https://github.com/gdy666/lucky" + local docker_use="echo \"默认账号密码: 666\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) From 9bc11254322eb16ffdc72481621da0acfdc0009f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:42:23 +0800 Subject: [PATCH 458/553] Update kejilion_sh_log.txt with new tool info Added installation and usage information for lucky reverse proxy tool. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 2d2473b91..57975f7af 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1386,6 +1386,7 @@ SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问 ------------------------ 2025-12-24 v4.2.10 SSL申请失败后追加导入已有证书选项,你可以导入域名有效证书使用了(如CF15年证书)。 +应用市场新增了lucky大内网反向代理工具的安装及使用。 ------------------------ From b584b0fcaad14ca826e7a099eb5ce9af0bdcf983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:56:07 +0800 Subject: [PATCH 459/553] Update kejilion.sh --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 15a65cf5c..3d37fdb86 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12917,7 +12917,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="Lucky 是一个大内网穿透及端口转发管理工具,支持 DDNS、反向代理、WOL 等功能。host模式请不要使用自定义端口。" + local docker_describe="Lucky 是一个大内网穿透及端口转发管理工具,支持 DDNS、反向代理、WOL 等功能。" local docker_url="项目地址: https://github.com/gdy666/lucky" local docker_use="echo \"默认账号密码: 666\"" local docker_passwd="" From a57c47999c6ea7e6d455a9079072292c95c71adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 21:56:39 +0800 Subject: [PATCH 460/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 035a82082..ca02b519d 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12917,7 +12917,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="Lucky 是一个大内网穿透及端口转发管理工具,支持 DDNS、反向代理、WOL 等功能。host模式请不要使用自定义端口。" + local docker_describe="Lucky 是一个大内网穿透及端口转发管理工具,支持 DDNS、反向代理、WOL 等功能。" local docker_url="项目地址: https://github.com/gdy666/lucky" local docker_use="echo \"默认账号密码: 666\"" local docker_passwd="" From 217cbeef66fbaf315f6ffd6b08c721757fd7556c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:38:47 +0800 Subject: [PATCH 461/553] Add command to set HTTP admin port in kejilion.sh --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 3d37fdb86..9cdf9e5b4 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12914,6 +12914,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /home/docker/lucky/conf:/app/conf \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} + docker exec -it ${docker_name} /app/lucky -rSetHttpAdminPort ${docker_port} } From f9e031ee4684875a479b243320c51276bf7fd5e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:39:15 +0800 Subject: [PATCH 462/553] Add command to set HTTP admin port in kejilion.sh --- kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion.sh b/kejilion.sh index ca02b519d..973d0a10f 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12914,6 +12914,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /home/docker/lucky/conf:/app/conf \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} + docker exec -it ${docker_name} /app/lucky -rSetHttpAdminPort ${docker_port} } From d73fb7ccb83eafeffd20e748472f7bab3127ff1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:43:57 +0800 Subject: [PATCH 463/553] Update kejilion.sh --- kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 973d0a10f..7b69dfc10 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12914,7 +12914,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /home/docker/lucky/conf:/app/conf \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} - docker exec -it ${docker_name} /app/lucky -rSetHttpAdminPort ${docker_port} + + sleep 3 + docker exec -it lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From f98671e68cbaf0b8be8ac321ab3a3f72965af525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:44:45 +0800 Subject: [PATCH 464/553] Add sleep before executing lucky command Added a sleep command before executing the lucky command. --- cn/kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9cdf9e5b4..de7a59049 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12914,7 +12914,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /home/docker/lucky/conf:/app/conf \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} - docker exec -it ${docker_name} /app/lucky -rSetHttpAdminPort ${docker_port} + + sleep 3 + docker exec -it lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From 04624077f64737ccadbe90bc93802dc06fb8b5e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:49:17 +0800 Subject: [PATCH 465/553] Remove '-it' option from docker exec command --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index de7a59049..2a385c222 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12916,7 +12916,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ${docker_img} sleep 3 - docker exec -it lucky /app/lucky -rSetHttpAdminPort ${docker_port} + docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From 0250cc5d746bda60153a5a4ede850b71e0b020bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:50:53 +0800 Subject: [PATCH 466/553] Update kejilion.sh --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 7b69dfc10..0cf019d0d 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12916,7 +12916,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ${docker_img} sleep 3 - docker exec -it lucky /app/lucky -rSetHttpAdminPort ${docker_port} + docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From 5b972a6906bf230063797caef40287e2b2e4e63b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:57:57 +0800 Subject: [PATCH 467/553] Adjust sleep duration and restart lucky container Reduced sleep duration before restarting the lucky container. --- cn/kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2a385c222..a7079c092 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12915,7 +12915,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} - sleep 3 + sleep 2 + docker restart lucky + sleep 2 docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From c1daa3e609d254d2d689191132e636d405f605d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 22:58:35 +0800 Subject: [PATCH 468/553] Update kejilion.sh --- kejilion.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 0cf019d0d..246cbe04a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12915,7 +12915,9 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} - sleep 3 + sleep 2 + docker restart lucky + sleep 2 docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From dc86b710360368842fc7fb22e08cec8fffe599bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 23:05:05 +0800 Subject: [PATCH 469/553] Modify Lucky initialization process Replaced sleep and restart commands with a wait message. --- kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 246cbe04a..70f96d19b 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -12915,9 +12915,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} - sleep 2 - docker restart lucky - sleep 2 + echo "正在等待 Lucky 初始化..." + sleep 10 docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From cb2b59aeb23b957db7eece05f42c583a29ed9f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 24 Dec 2025 23:05:52 +0800 Subject: [PATCH 470/553] Modify Lucky initialization process Replaced docker restart with a wait message and extended sleep duration. --- cn/kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index a7079c092..d5c85d3f7 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -12915,9 +12915,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ -v /var/run/docker.sock:/var/run/docker.sock \ ${docker_img} - sleep 2 - docker restart lucky - sleep 2 + echo "正在等待 Lucky 初始化..." + sleep 10 docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} } From b094c5bcbed079b8e4fca314e8c82a4053f6a446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 11:00:14 +0800 Subject: [PATCH 471/553] Update messages and add Firefox Docker configuration --- cn/kejilion.sh | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index d5c85d3f7..9c87076d2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -4919,6 +4919,7 @@ dd_xitong() { dd_xitong_1() { echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" + echo -e "${gl_huang}重装后请及时修改初始密码,防止暴力入侵。命令行输入passwd修改密码${gl_bai}" echo -e "按任意键继续..." read -n 1 -s -r -p "" install wget @@ -4952,7 +4953,9 @@ dd_xitong() { echo "重装系统" echo "--------------------------------" echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hui}感谢bin456789大佬和leitbogioro大佬的脚本支持!${gl_bai} " + echo -e "${gl_hui}bin456789项目地址: https://github.com/bin456789/reinstall${gl_bai}" + echo -e "${gl_hui}leitbogioro项目地址: https://github.com/leitbogioro/Tools${gl_bai}" echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -9323,6 +9326,7 @@ while true; do echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" + echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12905,7 +12909,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ local docker_name="lucky" local docker_img="gdy666/lucky:v2" # 由于 Lucky 使用 host 网络模式,这里的端口仅作记录/说明参考,实际由应用自身控制(默认16601) - local docker_port=16601 + local docker_port=8112 docker_rum() { @@ -12931,6 +12935,36 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 113|firefox) + + local app_id="113" + local docker_name="firefox" + local docker_img="jlesage/firefox:latest" + local docker_port=8113 + + docker_rum() { + + read -e -p "设置登录密码: " admin_password + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:5800 \ + -v /home/docker/firefox:/config:rw \ + -e ENABLE_CJK_FONT=1 \ + -e WEB_AUDIO=1 \ + -e VNC_PASSWORD="${admin_password}" \ + ${docker_img} + } + + local docker_describe="是一个运行在 Docker 中的 Firefox 浏览器,支持通过网页直接访问桌面版浏览器界面。" + local docker_url="项目地址: https://github.com/jlesage/docker-firefox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear send_stats "全部应用备份" From 2a17aaf4ac569a0c538744139b284ca81ed874f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 11:00:52 +0800 Subject: [PATCH 472/553] Update messages and add Firefox Docker setup --- kejilion.sh | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 70f96d19b..fc7b09bd8 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -4919,6 +4919,7 @@ dd_xitong() { dd_xitong_1() { echo -e "重装后初始用户名: ${gl_huang}root${gl_bai} 初始密码: ${gl_huang}LeitboGi0ro${gl_bai} 初始端口: ${gl_huang}22${gl_bai}" + echo -e "${gl_huang}重装后请及时修改初始密码,防止暴力入侵。命令行输入passwd修改密码${gl_bai}" echo -e "按任意键继续..." read -n 1 -s -r -p "" install wget @@ -4952,7 +4953,9 @@ dd_xitong() { echo "重装系统" echo "--------------------------------" echo -e "${gl_hong}注意: ${gl_bai}重装有风险失联,不放心者慎用。重装预计花费15分钟,请提前备份数据。" - echo -e "${gl_hui}感谢leitbogioro大佬和bin456789大佬的脚本支持!${gl_bai} " + echo -e "${gl_hui}感谢bin456789大佬和leitbogioro大佬的脚本支持!${gl_bai} " + echo -e "${gl_hui}bin456789项目地址: https://github.com/bin456789/reinstall${gl_bai}" + echo -e "${gl_hui}leitbogioro项目地址: https://github.com/leitbogioro/Tools${gl_bai}" echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -9323,6 +9326,7 @@ while true; do echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" + echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -12905,7 +12909,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ local docker_name="lucky" local docker_img="gdy666/lucky:v2" # 由于 Lucky 使用 host 网络模式,这里的端口仅作记录/说明参考,实际由应用自身控制(默认16601) - local docker_port=16601 + local docker_port=8112 docker_rum() { @@ -12931,6 +12935,36 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 113|firefox) + + local app_id="113" + local docker_name="firefox" + local docker_img="jlesage/firefox:latest" + local docker_port=8113 + + docker_rum() { + + read -e -p "设置登录密码: " admin_password + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:5800 \ + -v /home/docker/firefox:/config:rw \ + -e ENABLE_CJK_FONT=1 \ + -e WEB_AUDIO=1 \ + -e VNC_PASSWORD="${admin_password}" \ + ${docker_img} + } + + local docker_describe="是一个运行在 Docker 中的 Firefox 浏览器,支持通过网页直接访问桌面版浏览器界面。" + local docker_url="项目地址: https://github.com/jlesage/docker-firefox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + b) clear send_stats "全部应用备份" From 475c41d294670a825ea466f62fea2f064253a151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 11:02:25 +0800 Subject: [PATCH 473/553] Add Firefox browser installation to changelog --- kejilion_sh_log.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 57975f7af..afe13e09e 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1387,6 +1387,8 @@ SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问 2025-12-24 v4.2.10 SSL申请失败后追加导入已有证书选项,你可以导入域名有效证书使用了(如CF15年证书)。 应用市场新增了lucky大内网反向代理工具的安装及使用。 +应用市场新增了Firefox浏览器的安装及使用。 + ------------------------ From 0bfc2e55655db451d581a2aa6d4f9f3282fc0e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 17:12:40 +0800 Subject: [PATCH 474/553] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第三方应用市场 范例 --- apps/201.conf | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 apps/201.conf diff --git a/apps/201.conf b/apps/201.conf new file mode 100644 index 000000000..ebc5fd875 --- /dev/null +++ b/apps/201.conf @@ -0,0 +1,27 @@ +local app_id="201" +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="8201" +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 From cbd43a2d5ca7888f8a1e8307853adb257b9a6735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 17:22:20 +0800 Subject: [PATCH 475/553] Update and rename 201.conf to cloudreve2.conf --- apps/{201.conf => cloudreve2.conf} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/{201.conf => cloudreve2.conf} (100%) diff --git a/apps/201.conf b/apps/cloudreve2.conf similarity index 100% rename from apps/201.conf rename to apps/cloudreve2.conf From 379c0ac052e9d161d0ed9f44ee25ca129c61aa27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 18:03:32 +0800 Subject: [PATCH 476/553] Add configuration for cloudreve application --- apps/cd.conf | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 apps/cd.conf diff --git a/apps/cd.conf b/apps/cd.conf new file mode 100644 index 000000000..01b1f9b31 --- /dev/null +++ b/apps/cd.conf @@ -0,0 +1,27 @@ +local app_id="201" +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="8201" +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 From 8b20bf35e21c34f0b6eb53d4cadbb461e4372f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 18:03:53 +0800 Subject: [PATCH 477/553] Delete apps/cloudreve2.conf --- apps/cloudreve2.conf | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 apps/cloudreve2.conf diff --git a/apps/cloudreve2.conf b/apps/cloudreve2.conf deleted file mode 100644 index ebc5fd875..000000000 --- a/apps/cloudreve2.conf +++ /dev/null @@ -1,27 +0,0 @@ -local app_id="201" -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="8201" -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 From 3d3185b785b1d4f4c0ffd9542acf6c186cc7d88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 23:11:01 +0800 Subject: [PATCH 478/553] Enhance README with deployment and usage guidelines Added guidelines for directory structure, container lifecycle, variable usage, and network optimization. --- apps/README.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 apps/README.md diff --git a/apps/README.md b/apps/README.md new file mode 100644 index 000000000..83f564d82 --- /dev/null +++ b/apps/README.md @@ -0,0 +1,93 @@ +# 🚀 开发者应用入驻指南 (kejilion.sh) + +欢迎为 `kejilion.sh` 贡献应用!通过在 `sh/apps/` 目录下创建 `.conf` 配置文件,您的应用将自动集成到脚本的应用市场中。 + +--- + +## 1. 快速开始 +在 `sh/apps/` 目录下创建一个以应用名命名的配置文件,例如:`myapp.conf`。 + +## 2. 配置文件模板 +每个配置文件应严格遵循以下结构,确保变量和函数命名规范: + +```bash +# --- 基础信息 --- +local app_name="应用显示名称" +local app_text="一句话简介,说明应用用途" +local app_url="相关链接(如视频教程或项目官网)" +local docker_name="容器识别名" +local docker_port="默认映射端口" +local app_size="占用空间评分 (1-5)" + +# --- 核心逻辑 --- + +# 1. 安装函数 +docker_app_install() { + # 必须在 /home/docker/ 下创建应用目录 + mkdir -p /home/docker/myapp && cd /home/docker/myapp + + # 下载并配置 compose 文件 + curl -L -o docker-compose.yml "${gh_proxy}[raw.githubusercontent.com/](https://raw.githubusercontent.com/)..." + + # 端口处理(使用变量以便用户自定义) + sed -i "s/8080:8080/${docker_port}:8080/g" docker-compose.yml + + # 启动容器 + docker compose up -d + + echo "安装完成" +} + +# 2. 更新函数 +docker_app_update() { + cd /home/docker/myapp + docker compose pull + docker compose up -d + echo "更新完成" +} + +# 3. 卸载函数 +docker_app_uninstall() { + cd /home/docker/myapp + docker compose down --rmi all + rm -rf /home/docker/myapp + echo "卸载完成" +} + +# --- 结尾必须包含此行以完成注册 --- +docker_app_plus + + +``` + +## 3. 强制规范与原则 + +### 📁 目录路径规范 +> **核心原则:数据不入系统盘,统一归档。** + +* **【必须】**:所有持久化数据(Volume/Bind Mount)必须存储在 `/home/docker/[应用名]` 目录下。 +* **【禁止】**:严禁将数据存放在 `/root`、`/etc`、`/var/lib` 或其他非指定根目录。 +* **【理由】**:统一路径方便用户进行一键备份、整机迁移以及权限的统一管理。 + +### 🔄 容器生命周期 +* **开机自启**:生成的 `docker-compose.yml` 中必须包含 `restart: always` 或 `restart: unless-stopped`。 +* **干净卸载**:`docker_app_uninstall` 函数必须执行闭环操作,包含: + * 停止并删除容器 (`docker compose down`) + * 删除对应的镜像 (`--rmi all`) + * **彻底物理删除** `/home/docker/[应用名]` 目录。 + +### 🆔 变量与语法说明 +* **App ID**:当前版本已弱化 ID 概念,您可以省略或填入任意数值,系统目前主要以 `.conf` 文件名作为唯一识别依据。 +* **Local 关键字**:由于配置文件是在函数内部被 `source` 加载的,请务必保留 `local` 声明,这能有效防止变量污染脚本的全局环境。 + +### 🌐 网络优化 +* **镜像加速**:下载 GitHub 资源(如 `.yml` 或 `脚本`)时,请务必在 URL 前加上 `${gh_proxy}` 变量,以确保国内服务器的访问成功率。 + +--- + +## 4. 入驻流程 + +1. **本地自测**:在自己的 VPS 上完整运行安装、更新、卸载流程,确保无报错。 +2. **路径审计**:检查 `/home/docker/` 目录下是否正确生成了应用文件夹,且没有文件“溢出”到其他地方。 +3. **提交申请**:将您的 `[应用名].conf` 文件通过 **Pull Request** 提交至本仓库的 `sh/apps/` 目录。 +4. **审核发布**:维护者审核逻辑安全后,您的应用将正式上线 `kejilion.sh` 菜单。 From 30850586a2f2815f0264b0effef64ce9af9fafd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 23:22:21 +0800 Subject: [PATCH 479/553] Update README.md --- apps/README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/README.md b/apps/README.md index 83f564d82..2b3b06751 100644 --- a/apps/README.md +++ b/apps/README.md @@ -83,9 +83,25 @@ docker_app_plus ### 🌐 网络优化 * **镜像加速**:下载 GitHub 资源(如 `.yml` 或 `脚本`)时,请务必在 URL 前加上 `${gh_proxy}` 变量,以确保国内服务器的访问成功率。 + --- -## 4. 入驻流程 + +## 4. 快捷启动与调用 + +一旦您的 `.conf` 文件被合入仓库,该应用将自动进入 **“第三方应用入驻”** 模块。此外,开发者可以向用户提供专属的极简安装指令: + +#### 🚀 快捷安装指令模板: +```bash +bash <(curl -sL kejilion.sh) app [文件名] +``` +示例:如果您的配置文件名为 myapp.conf,则调用指令为: bash <(curl -sL kejilion.sh) app myapp + + +--- + + +## 5. 入驻流程 1. **本地自测**:在自己的 VPS 上完整运行安装、更新、卸载流程,确保无报错。 2. **路径审计**:检查 `/home/docker/` 目录下是否正确生成了应用文件夹,且没有文件“溢出”到其他地方。 From 515fcd7cd7653e4875d3c99352838cbffdbef0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 23:30:32 +0800 Subject: [PATCH 480/553] Update README.md --- apps/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/README.md b/apps/README.md index 2b3b06751..6f2520be1 100644 --- a/apps/README.md +++ b/apps/README.md @@ -14,10 +14,10 @@ # --- 基础信息 --- local app_name="应用显示名称" local app_text="一句话简介,说明应用用途" -local app_url="相关链接(如视频教程或项目官网)" -local docker_name="容器识别名" -local docker_port="默认映射端口" -local app_size="占用空间评分 (1-5)" +local app_url="示例官网: https://github.com/kejilion/sh/edit/main/apps" +local docker_name="容器名称" +local docker_port="暴露端口" +local app_size="占用空间大小 (1-10)设置10代表要求10G空间才能装" # --- 核心逻辑 --- From 386c50aa724700c224ce9ec62c2b8f15df104eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 23:33:34 +0800 Subject: [PATCH 481/553] Update README.md --- apps/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/README.md b/apps/README.md index 6f2520be1..041c5bc2c 100644 --- a/apps/README.md +++ b/apps/README.md @@ -12,11 +12,12 @@ ```bash # --- 基础信息 --- +local app_id="1000以上" local app_name="应用显示名称" local app_text="一句话简介,说明应用用途" local app_url="示例官网: https://github.com/kejilion/sh/edit/main/apps" -local docker_name="容器名称" -local docker_port="暴露端口" +local docker_name="容器启动后的名称" +local docker_port="默认访问端口" local app_size="占用空间大小 (1-10)设置10代表要求10G空间才能装" # --- 核心逻辑 --- From 786ed210e8b149c7a0a9872146cf0b818724c340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 23:58:41 +0800 Subject: [PATCH 482/553] Update sh version and modify application list formatting --- cn/kejilion.sh | 70 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9c87076d2..d0c74d386 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.10" +sh_v="4.3.0" gl_hui='\e[37m' @@ -9246,7 +9246,7 @@ while true; do if [ -z "$sub_choice" ]; then clear echo -e "应用市场" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") @@ -9264,69 +9264,79 @@ while true; do echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}第三方应用入驻${gl_bai}" + for f in "$HOME"/sh/apps/*.conf; do + [ -e "$f" ] || continue + local base_name=$(basename "$f" .conf) + local app_name=$(grep "app_name=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" + done + echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -13037,10 +13047,43 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + s) + send_stats "搜索第三方应用" + cd ~ + install git + if [ ! -d sh/.git ]; then + git clone https://github.com/kejilion/sh.git + else + cd sh + git pull origin main + fi + ;; + + + d) + send_stats "删除第三方应用" + cd ~ + rm -rf $HOME/sh + ;; + 0) kejilion ;; *) + cd ~ + install git + if [ ! -d sh/.git ]; then + git clone https://github.com/kejilion/sh.git + else + cd sh + git pull origin main + fi + local custom_app="$HOME/sh/apps/${sub_choice}.conf" + if [ -f "$custom_app" ]; then + . "$custom_app" + else + echo -e "${gl_hong}错误: 未找到编号为 ${sub_choice} 的应用配置${gl_bai}" + fi ;; esac break_end @@ -13050,6 +13093,7 @@ done } + linux_work() { while true; do From 4d735fc49e5f5f2e7b6955142f0f14d7a68c31ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 25 Dec 2025 23:59:22 +0800 Subject: [PATCH 483/553] Update version and adjust echo formatting --- kejilion.sh | 70 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index fc7b09bd8..0cb3f48df 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.10" +sh_v="4.3.0" gl_hui='\e[37m' @@ -9246,7 +9246,7 @@ while true; do if [ -z "$sub_choice" ]; then clear echo -e "应用市场" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") @@ -9264,69 +9264,79 @@ while true; do echo -e "${gl_kjlan}5. ${color5}OpenList多存储文件列表程序 ${gl_kjlan}6. ${color6}Ubuntu远程桌面网页版" echo -e "${gl_kjlan}7. ${color7}哪吒探针VPS监控面板 ${gl_kjlan}8. ${color8}QB离线BT磁力下载面板" echo -e "${gl_kjlan}9. ${color9}Poste.io邮件服务器程序 ${gl_kjlan}10. ${color10}RocketChat多人在线聊天系统" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}11. ${color11}禅道项目管理软件 ${gl_kjlan}12. ${color12}青龙面板定时任务管理平台" echo -e "${gl_kjlan}13. ${color13}Cloudreve网盘 ${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}简单图床图片管理程序" echo -e "${gl_kjlan}15. ${color15}emby多媒体管理系统 ${gl_kjlan}16. ${color16}Speedtest测速面板" echo -e "${gl_kjlan}17. ${color17}AdGuardHome去广告软件 ${gl_kjlan}18. ${color18}onlyoffice在线办公OFFICE" echo -e "${gl_kjlan}19. ${color19}雷池WAF防火墙面板 ${gl_kjlan}20. ${color20}portainer容器管理面板" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}21. ${color21}VScode网页版 ${gl_kjlan}22. ${color22}UptimeKuma监控工具" echo -e "${gl_kjlan}23. ${color23}Memos网页备忘录 ${gl_kjlan}24. ${color24}Webtop远程桌面网页版 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud网盘 ${gl_kjlan}26. ${color26}QD-Today定时任务管理框架" echo -e "${gl_kjlan}27. ${color27}Dockge容器堆栈管理面板 ${gl_kjlan}28. ${color28}LibreSpeed测速工具" echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站 ${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相册系统" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全 ${gl_kjlan}32. ${color32}drawio免费的在线图表软件 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel导航面板 ${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" echo -e "${gl_kjlan}35. ${color35}极简朋友圈 ${gl_kjlan}36. ${color36}LobeChatAI聊天聚合网站" echo -e "${gl_kjlan}37. ${color37}MyIP工具箱 ${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" echo -e "${gl_kjlan}39. ${color39}Bililive直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}41. ${color41}耗子管理面板 ${gl_kjlan}42. ${color42}Nexterm远程连接工具" echo -e "${gl_kjlan}43. ${color43}RustDesk远程桌面(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk远程桌面(中继端) ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker加速站 ${gl_kjlan}46. ${color46}GitHub加速站 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}普罗米修斯监控 ${gl_kjlan}48. ${color48}普罗米修斯(主机监控)" echo -e "${gl_kjlan}49. ${color49}普罗米修斯(容器监控) ${gl_kjlan}50. ${color50}补货监控工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}51. ${color51}PVE开小鸡面板 ${gl_kjlan}52. ${color52}DPanel容器管理面板" echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型 ${gl_kjlan}54. ${color54}AMH主机建站管理面板" echo -e "${gl_kjlan}55. ${color55}FRP内网穿透(服务端) ${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP内网穿透(客户端) ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型 ${gl_kjlan}58. ${color58}Dify大模型知识库 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}61. ${color61}在线翻译服务器 ${gl_kjlan}62. ${color62}RAGFlow大模型知识库" echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp视频下载工具" echo -e "${gl_kjlan}67. ${color67}ddns-go动态DNS管理工具 ${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL证书管理平台" echo -e "${gl_kjlan}69. ${color69}SFTPGo文件传输工具 ${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden密码管理器 ${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV私有影视 ${gl_kjlan}74. ${color74}MoonTV私有影视" echo -e "${gl_kjlan}75. ${color75}Melody音乐精灵 ${gl_kjlan}76. ${color76}在线DOS老游戏" echo -e "${gl_kjlan}77. ${color77}迅雷离线下载工具 ${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" echo -e "${gl_kjlan}79. ${color79}Beszel服务器监控 ${gl_kjlan}80. ${color80}linkwarden书签管理" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet视频会议 ${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}83. ${color83}komari服务器监控工具 ${gl_kjlan}84. ${color84}Wallos个人财务管理工具" echo -e "${gl_kjlan}85. ${color85}immich图片视频管理器 ${gl_kjlan}86. ${color86}jellyfin媒体管理系统" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器 ${gl_kjlan}88. ${color88}Owncast自托管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快递 ${gl_kjlan}90. ${color90}matrix去中心化聊天协议" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具" echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台 ${gl_kjlan}96. ${color96}2FAuth自托管二步验证器" echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)" echo -e "${gl_kjlan}99. ${color99}DSM群晖虚拟机 ${gl_kjlan}100. ${color100}Syncthing点对点文件同步工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI视频生成工具 ${gl_kjlan}102. ${color102}VoceChat多人在线聊天系统" echo -e "${gl_kjlan}103. ${color103}Umami网站统计工具 ${gl_kjlan}104. ${color104}Stream四层代理转发工具" echo -e "${gl_kjlan}105. ${color105}思源笔记 ${gl_kjlan}106. ${color106}Drawnix开源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou网盘搜索 ${gl_kjlan}108. ${color108}LangBot聊天机器人" echo -e "${gl_kjlan}109. ${color109}ZFile在线网盘 ${gl_kjlan}110. ${color110}Karakeep书签管理" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}第三方应用入驻${gl_bai}" + for f in "$HOME"/sh/apps/*.conf; do + [ -e "$f" ] || continue + local base_name=$(basename "$f" .conf) + local app_name=$(grep "app_name=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" + done + echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -13037,10 +13047,43 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + s) + send_stats "搜索第三方应用" + cd ~ + install git + if [ ! -d sh/.git ]; then + git clone https://github.com/kejilion/sh.git + else + cd sh + git pull origin main + fi + ;; + + + d) + send_stats "删除第三方应用" + cd ~ + rm -rf $HOME/sh + ;; + 0) kejilion ;; *) + cd ~ + install git + if [ ! -d sh/.git ]; then + git clone https://github.com/kejilion/sh.git + else + cd sh + git pull origin main + fi + local custom_app="$HOME/sh/apps/${sub_choice}.conf" + if [ -f "$custom_app" ]; then + . "$custom_app" + else + echo -e "${gl_hong}错误: 未找到编号为 ${sub_choice} 的应用配置${gl_bai}" + fi ;; esac break_end @@ -13050,6 +13093,7 @@ done } + linux_work() { while true; do From 97beaa3dc5b018e79c8c03d63b5a9b672a4a1453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 00:02:03 +0800 Subject: [PATCH 484/553] Update kejilion_sh_log.txt with new version info Added new version details and third-party support information. --- kejilion_sh_log.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index afe13e09e..4729ce6d6 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1388,7 +1388,9 @@ SSL申请失败后追加选项菜单,你可以继续申请,使用HTTP访问 SSL申请失败后追加导入已有证书选项,你可以导入域名有效证书使用了(如CF15年证书)。 应用市场新增了lucky大内网反向代理工具的安装及使用。 应用市场新增了Firefox浏览器的安装及使用。 - ------------------------ - +2025-12-25 v4.3.0 +应用市场支持第三方入驻功能,开发者可以将自己的项目加入到脚本中让大家使用。 +入驻指南: https://github.com/kejilion/sh/tree/main/apps +------------------------ From d627a2bf378c36ed9aa262851a1b75684b7bb449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 09:49:59 +0800 Subject: [PATCH 485/553] Update README.md --- apps/README.md | 108 +------------------------------------------------ 1 file changed, 1 insertion(+), 107 deletions(-) diff --git a/apps/README.md b/apps/README.md index 041c5bc2c..e238e5132 100644 --- a/apps/README.md +++ b/apps/README.md @@ -1,110 +1,4 @@ # 🚀 开发者应用入驻指南 (kejilion.sh) -欢迎为 `kejilion.sh` 贡献应用!通过在 `sh/apps/` 目录下创建 `.conf` 配置文件,您的应用将自动集成到脚本的应用市场中。 +https://github.com/kejilion/apps ---- - -## 1. 快速开始 -在 `sh/apps/` 目录下创建一个以应用名命名的配置文件,例如:`myapp.conf`。 - -## 2. 配置文件模板 -每个配置文件应严格遵循以下结构,确保变量和函数命名规范: - -```bash -# --- 基础信息 --- -local app_id="1000以上" -local app_name="应用显示名称" -local app_text="一句话简介,说明应用用途" -local app_url="示例官网: https://github.com/kejilion/sh/edit/main/apps" -local docker_name="容器启动后的名称" -local docker_port="默认访问端口" -local app_size="占用空间大小 (1-10)设置10代表要求10G空间才能装" - -# --- 核心逻辑 --- - -# 1. 安装函数 -docker_app_install() { - # 必须在 /home/docker/ 下创建应用目录 - mkdir -p /home/docker/myapp && cd /home/docker/myapp - - # 下载并配置 compose 文件 - curl -L -o docker-compose.yml "${gh_proxy}[raw.githubusercontent.com/](https://raw.githubusercontent.com/)..." - - # 端口处理(使用变量以便用户自定义) - sed -i "s/8080:8080/${docker_port}:8080/g" docker-compose.yml - - # 启动容器 - docker compose up -d - - echo "安装完成" -} - -# 2. 更新函数 -docker_app_update() { - cd /home/docker/myapp - docker compose pull - docker compose up -d - echo "更新完成" -} - -# 3. 卸载函数 -docker_app_uninstall() { - cd /home/docker/myapp - docker compose down --rmi all - rm -rf /home/docker/myapp - echo "卸载完成" -} - -# --- 结尾必须包含此行以完成注册 --- -docker_app_plus - - -``` - -## 3. 强制规范与原则 - -### 📁 目录路径规范 -> **核心原则:数据不入系统盘,统一归档。** - -* **【必须】**:所有持久化数据(Volume/Bind Mount)必须存储在 `/home/docker/[应用名]` 目录下。 -* **【禁止】**:严禁将数据存放在 `/root`、`/etc`、`/var/lib` 或其他非指定根目录。 -* **【理由】**:统一路径方便用户进行一键备份、整机迁移以及权限的统一管理。 - -### 🔄 容器生命周期 -* **开机自启**:生成的 `docker-compose.yml` 中必须包含 `restart: always` 或 `restart: unless-stopped`。 -* **干净卸载**:`docker_app_uninstall` 函数必须执行闭环操作,包含: - * 停止并删除容器 (`docker compose down`) - * 删除对应的镜像 (`--rmi all`) - * **彻底物理删除** `/home/docker/[应用名]` 目录。 - -### 🆔 变量与语法说明 -* **App ID**:当前版本已弱化 ID 概念,您可以省略或填入任意数值,系统目前主要以 `.conf` 文件名作为唯一识别依据。 -* **Local 关键字**:由于配置文件是在函数内部被 `source` 加载的,请务必保留 `local` 声明,这能有效防止变量污染脚本的全局环境。 - -### 🌐 网络优化 -* **镜像加速**:下载 GitHub 资源(如 `.yml` 或 `脚本`)时,请务必在 URL 前加上 `${gh_proxy}` 变量,以确保国内服务器的访问成功率。 - - ---- - - -## 4. 快捷启动与调用 - -一旦您的 `.conf` 文件被合入仓库,该应用将自动进入 **“第三方应用入驻”** 模块。此外,开发者可以向用户提供专属的极简安装指令: - -#### 🚀 快捷安装指令模板: -```bash -bash <(curl -sL kejilion.sh) app [文件名] -``` -示例:如果您的配置文件名为 myapp.conf,则调用指令为: bash <(curl -sL kejilion.sh) app myapp - - ---- - - -## 5. 入驻流程 - -1. **本地自测**:在自己的 VPS 上完整运行安装、更新、卸载流程,确保无报错。 -2. **路径审计**:检查 `/home/docker/` 目录下是否正确生成了应用文件夹,且没有文件“溢出”到其他地方。 -3. **提交申请**:将您的 `[应用名].conf` 文件通过 **Pull Request** 提交至本仓库的 `sh/apps/` 目录。 -4. **审核发布**:维护者审核逻辑安全后,您的应用将正式上线 `kejilion.sh` 菜单。 From 046e4f10198037f01e8609d7d3e20e522a9dc809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 09:56:42 +0800 Subject: [PATCH 486/553] Update paths for application configuration and git repo --- cn/kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index d0c74d386..dcb63df1c 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9329,14 +9329,14 @@ while true; do echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}第三方应用入驻${gl_bai}" - for f in "$HOME"/sh/apps/*.conf; do + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) local app_name=$(grep "app_name=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" done - echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" + echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -13052,7 +13052,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d sh/.git ]; then - git clone https://github.com/kejilion/sh.git + git clone https://github.com/kejilion/apps.git else cd sh git pull origin main @@ -13063,7 +13063,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ d) send_stats "删除第三方应用" cd ~ - rm -rf $HOME/sh + rm -rf $HOME/apps ;; 0) @@ -13073,12 +13073,12 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d sh/.git ]; then - git clone https://github.com/kejilion/sh.git + git clone https://github.com/kejilion/apps.git else - cd sh + cd apps git pull origin main fi - local custom_app="$HOME/sh/apps/${sub_choice}.conf" + local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then . "$custom_app" else From 4c4dc4b2d83aa7dff3829707765c6fb78dcc4eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 09:58:11 +0800 Subject: [PATCH 487/553] Update kejilion.sh --- kejilion.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 0cb3f48df..958ca2b53 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9329,14 +9329,14 @@ while true; do echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}第三方应用入驻${gl_bai}" - for f in "$HOME"/sh/apps/*.conf; do + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) local app_name=$(grep "app_name=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" done - echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" + echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" @@ -13052,7 +13052,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d sh/.git ]; then - git clone https://github.com/kejilion/sh.git + git clone https://github.com/kejilion/apps.git else cd sh git pull origin main @@ -13063,7 +13063,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ d) send_stats "删除第三方应用" cd ~ - rm -rf $HOME/sh + rm -rf $HOME/apps ;; 0) @@ -13073,12 +13073,12 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d sh/.git ]; then - git clone https://github.com/kejilion/sh.git + git clone https://github.com/kejilion/apps.git else - cd sh + cd apps git pull origin main fi - local custom_app="$HOME/sh/apps/${sub_choice}.conf" + local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then . "$custom_app" else From 4dc5a65845af649d86d99f3c794e5dba90212b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 13:23:33 +0800 Subject: [PATCH 488/553] Refactor grep and sed commands for clarity --- cn/kejilion.sh | 152 ++++++++++++++++++++++++------------------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index dcb63df1c..3ce6dc59a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1328,9 +1328,9 @@ update_docker_compose_with_db_creds() { if ! grep -q "stream" /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:]') + 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 @@ -1338,7 +1338,7 @@ update_docker_compose_with_db_creds() { 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|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 @@ -1387,8 +1387,8 @@ install_ldnmp() { 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 - + 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 @@ -1439,7 +1439,7 @@ install_ssltls() { 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 ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then mkdir -p /etc/letsencrypt/live/$yuming/ @@ -1554,16 +1554,16 @@ certs_status() { echo "------------------------" read -e -p "请输入你的选择: " sub_choice case $sub_choice in - 1) - send_stats "重新申请" - echo "请再次尝试部署 $webname" - add_yuming - install_ssltls - certs_status + 1) + send_stats "重新申请" + echo "请再次尝试部署 $webname" + add_yuming + install_ssltls + certs_status - ;; - 2) - send_stats "导入已有证书" + ;; + 2) + send_stats "导入已有证书" # 定义文件路径 local cert_file="/home/web/certs/${yuming}_cert.pem" @@ -1608,17 +1608,17 @@ certs_status() { certs_status fi - ;; - 3) - send_stats "不带证书改用HTTP访问" - sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + ;; + 3) + send_stats "不带证书改用HTTP访问" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf - ;; - *) - send_stats "退出申请" + ;; + *) + send_stats "退出申请" exit - ;; + ;; esac fi @@ -2288,7 +2288,7 @@ web_security() { ;; 32) - nginx_waf off + nginx_waf off echo "站点WAF已关闭" send_stats "站点WAF已关闭" ;; @@ -2359,7 +2359,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_ldnmp_mode + check_ldnmp_mode check_nginx_compression clear send_stats "优化LDNMP环境" @@ -8769,7 +8769,7 @@ linux_ldnmp() { close_port "$port" echo "已阻止IP+端口访问该服务" else - ip_address + ip_address block_container_port "$docker_name" "$ipv4_address" fi @@ -9132,7 +9132,7 @@ linux_ldnmp() { 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 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 @@ -11664,7 +11664,7 @@ while true; do clear echo "已经安装完成" - check_docker_app_ip + check_docker_app_ip } @@ -11864,7 +11864,7 @@ while true; do clear echo "已经安装完成" - check_docker_app_ip + check_docker_app_ip } @@ -12976,14 +12976,14 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ b) - clear - send_stats "全部应用备份" + clear + send_stats "全部应用备份" - local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" - cd / && tar czvf "$backup_filename" home + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home - while true; do + while true; do clear echo "备份文件已创建: /$backup_filename" read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice @@ -13013,36 +13013,36 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ break ;; esac - done + done ;; r) - root_use - send_stats "全部应用还原" - echo "可用的应用备份" - echo "-------------------------" - ls -lt /app*.gz | awk '{print $NF}' - echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename - - if [ "$filename" == "0" ]; then + root_use + send_stats "全部应用还原" + echo "可用的应用备份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + + if [ "$filename" == "0" ]; then break_end linux_panel - fi + fi - # 如果用户没有输入文件名,使用最新的压缩包 - if [ -z "$filename" ]; then + # 如果用户没有输入文件名,使用最新的压缩包 + if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) - fi + fi - if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" - cd / && tar -xzf "$filename" + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + cd / && tar -xzf "$filename" echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" - else + else echo "没有找到压缩包。" - fi + fi ;; @@ -13054,7 +13054,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ if [ ! -d sh/.git ]; then git clone https://github.com/kejilion/apps.git else - cd sh + cd apps git pull origin main fi ;; @@ -13221,12 +13221,12 @@ linux_work() { read -e -p "请输入你的选择: " gongzuoqu_del case "$gongzuoqu_del" in 1) - install tmux - local SESSION_NAME="sshd" - send_stats "启动工作区$SESSION_NAME" + 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 + tmux_run ;; 2) sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc @@ -14197,10 +14197,10 @@ EOF send_stats "私钥登录" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" - echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "------------------------------------------------" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" @@ -14210,8 +14210,8 @@ EOF case $host_dns in 1) - send_stats "生成新密钥" - add_sshkey + send_stats "生成新密钥" + add_sshkey break_end ;; @@ -14390,7 +14390,7 @@ EOF echo -e "7. 开启${gl_huang}BBR${gl_bai}加速" echo -e "8. 设置时区到${gl_huang}上海${gl_bai}" echo -e "9. 自动优化DNS地址${gl_huang}海外: 1.1.1.1 8.8.8.8 国内: 223.5.5.5 ${gl_bai}" - echo -e "10. 设置网络为${gl_huang}ipv4优先${gl_bai}" + echo -e "10. 设置网络为${gl_huang}ipv4优先${gl_bai}" echo -e "11. 安装基础工具${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" @@ -14473,11 +14473,11 @@ EOF 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}" + 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}" + local status_message="${gl_hui}采集已关闭${gl_bai}" else - local status_message="无法确定的状态" + local status_message="无法确定的状态" fi echo "隐私与安全" @@ -15306,14 +15306,14 @@ else fd|rp|反代) shift ldnmp_Proxy "$@" - find_container_by_host_port "$port" - if [ -z "$docker_name" ]; then - close_port "$port" + find_container_by_host_port "$port" + if [ -z "$docker_name" ]; then + close_port "$port" echo "已阻止IP+端口访问该服务" - else + else ip_address - block_container_port "$docker_name" "$ipv4_address" - fi + block_container_port "$docker_name" "$ipv4_address" + fi ;; loadbalance|负载均衡) From 886118cf7a6d5fd3c293e3879b2c2a92227b402c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 13:25:51 +0800 Subject: [PATCH 489/553] Fix directory navigation for git operations --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 958ca2b53..9634bb863 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13054,7 +13054,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ if [ ! -d sh/.git ]; then git clone https://github.com/kejilion/apps.git else - cd sh + cd apps git pull origin main fi ;; From 571c96eac2ccd068c188f2e9a0409445e930c339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 13:27:09 +0800 Subject: [PATCH 490/553] Refactor script for improved readability and consistency --- cn/kejilion.sh | 150 ++++++++++++++++++++++++------------------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 3ce6dc59a..63820bb18 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1328,9 +1328,9 @@ update_docker_compose_with_db_creds() { if ! grep -q "stream" /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:]') + 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 @@ -1338,7 +1338,7 @@ update_docker_compose_with_db_creds() { 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|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 @@ -1387,8 +1387,8 @@ install_ldnmp() { 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 - + 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 @@ -1439,7 +1439,7 @@ install_ssltls() { 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 ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' if [[ ($yuming =~ $ipv4_pattern || $yuming =~ $ipv6_pattern) ]]; then mkdir -p /etc/letsencrypt/live/$yuming/ @@ -1554,16 +1554,16 @@ certs_status() { echo "------------------------" read -e -p "请输入你的选择: " sub_choice case $sub_choice in - 1) - send_stats "重新申请" - echo "请再次尝试部署 $webname" - add_yuming - install_ssltls - certs_status + 1) + send_stats "重新申请" + echo "请再次尝试部署 $webname" + add_yuming + install_ssltls + certs_status - ;; - 2) - send_stats "导入已有证书" + ;; + 2) + send_stats "导入已有证书" # 定义文件路径 local cert_file="/home/web/certs/${yuming}_cert.pem" @@ -1608,17 +1608,17 @@ certs_status() { certs_status fi - ;; - 3) - send_stats "不带证书改用HTTP访问" - sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf + ;; + 3) + send_stats "不带证书改用HTTP访问" + sed -i '/if (\$scheme = http) {/,/}/s/^/#/' /home/web/conf.d/${yuming}.conf sed -i '/ssl_certificate/d; /ssl_certificate_key/d' /home/web/conf.d/${yuming}.conf sed -i '/443 ssl/d; /443 quic/d' /home/web/conf.d/${yuming}.conf - ;; - *) - send_stats "退出申请" + ;; + *) + send_stats "退出申请" exit - ;; + ;; esac fi @@ -2288,7 +2288,7 @@ web_security() { ;; 32) - nginx_waf off + nginx_waf off echo "站点WAF已关闭" send_stats "站点WAF已关闭" ;; @@ -2359,7 +2359,7 @@ check_nginx_compression() { web_optimization() { while true; do - check_ldnmp_mode + check_ldnmp_mode check_nginx_compression clear send_stats "优化LDNMP环境" @@ -8769,7 +8769,7 @@ linux_ldnmp() { close_port "$port" echo "已阻止IP+端口访问该服务" else - ip_address + ip_address block_container_port "$docker_name" "$ipv4_address" fi @@ -9132,7 +9132,7 @@ linux_ldnmp() { 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 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 @@ -11664,7 +11664,7 @@ while true; do clear echo "已经安装完成" - check_docker_app_ip + check_docker_app_ip } @@ -11864,7 +11864,7 @@ while true; do clear echo "已经安装完成" - check_docker_app_ip + check_docker_app_ip } @@ -12976,14 +12976,14 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ b) - clear - send_stats "全部应用备份" + clear + send_stats "全部应用备份" - local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" - cd / && tar czvf "$backup_filename" home + local backup_filename="app_$(date +"%Y%m%d%H%M%S").tar.gz" + echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + cd / && tar czvf "$backup_filename" home - while true; do + while true; do clear echo "备份文件已创建: /$backup_filename" read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice @@ -13013,36 +13013,36 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ break ;; esac - done + done ;; r) - root_use - send_stats "全部应用还原" - echo "可用的应用备份" - echo "-------------------------" - ls -lt /app*.gz | awk '{print $NF}' - echo "" - read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename - - if [ "$filename" == "0" ]; then + root_use + send_stats "全部应用还原" + echo "可用的应用备份" + echo "-------------------------" + ls -lt /app*.gz | awk '{print $NF}' + echo "" + read -e -p "回车键还原最新的备份,输入备份文件名还原指定的备份,输入0退出:" filename + + if [ "$filename" == "0" ]; then break_end linux_panel - fi + fi - # 如果用户没有输入文件名,使用最新的压缩包 - if [ -z "$filename" ]; then + # 如果用户没有输入文件名,使用最新的压缩包 + if [ -z "$filename" ]; then local filename=$(ls -t /app*.tar.gz | head -1) - fi + fi - if [ -n "$filename" ]; then - echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" - cd / && tar -xzf "$filename" + if [ -n "$filename" ]; then + echo -e "${gl_huang}正在解压 $filename ...${gl_bai}" + cd / && tar -xzf "$filename" echo "应用数据已还原,目前请手动进入指定应用菜单,更新应用,即可还原应用。" - else + else echo "没有找到压缩包。" - fi + fi ;; @@ -13221,12 +13221,12 @@ linux_work() { read -e -p "请输入你的选择: " gongzuoqu_del case "$gongzuoqu_del" in 1) - install tmux - local SESSION_NAME="sshd" - send_stats "启动工作区$SESSION_NAME" + 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 + tmux_run ;; 2) sed -i '/# 自动进入 tmux 会话/,+4d' ~/.bashrc @@ -14197,10 +14197,10 @@ EOF send_stats "私钥登录" while true; do clear - echo "ROOT私钥登录模式" - echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" - echo "------------------------------------------------" - echo "将会生成密钥对,更安全的方式SSH登录" + echo "ROOT私钥登录模式" + echo "视频介绍: https://www.bilibili.com/video/BV1Q4421X78n?t=209.4" + echo "------------------------------------------------" + echo "将会生成密钥对,更安全的方式SSH登录" echo "------------------------" echo "1. 生成新密钥 2. 导入已有密钥 3. 查看本机密钥" echo "------------------------" @@ -14210,8 +14210,8 @@ EOF case $host_dns in 1) - send_stats "生成新密钥" - add_sshkey + send_stats "生成新密钥" + add_sshkey break_end ;; @@ -14390,7 +14390,7 @@ EOF echo -e "7. 开启${gl_huang}BBR${gl_bai}加速" echo -e "8. 设置时区到${gl_huang}上海${gl_bai}" echo -e "9. 自动优化DNS地址${gl_huang}海外: 1.1.1.1 8.8.8.8 国内: 223.5.5.5 ${gl_bai}" - echo -e "10. 设置网络为${gl_huang}ipv4优先${gl_bai}" + echo -e "10. 设置网络为${gl_huang}ipv4优先${gl_bai}" echo -e "11. 安装基础工具${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux系统内核参数优化切换到${gl_huang}均衡优化模式${gl_bai}" echo "------------------------------------------------" @@ -14473,11 +14473,11 @@ EOF 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}" + 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}" + local status_message="${gl_hui}采集已关闭${gl_bai}" else - local status_message="无法确定的状态" + local status_message="无法确定的状态" fi echo "隐私与安全" @@ -15306,14 +15306,14 @@ else fd|rp|反代) shift ldnmp_Proxy "$@" - find_container_by_host_port "$port" - if [ -z "$docker_name" ]; then - close_port "$port" + find_container_by_host_port "$port" + if [ -z "$docker_name" ]; then + close_port "$port" echo "已阻止IP+端口访问该服务" - else + else ip_address - block_container_port "$docker_name" "$ipv4_address" - fi + block_container_port "$docker_name" "$ipv4_address" + fi ;; loadbalance|负载均衡) From 05a4f28a06cdc5fa25f2ed4db048afbacb6127a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 13:31:45 +0800 Subject: [PATCH 491/553] Fix directory check for git repository --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 9634bb863..236679977 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13051,7 +13051,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ send_stats "搜索第三方应用" cd ~ install git - if [ ! -d sh/.git ]; then + if [ ! -d apps/.git ]; then git clone https://github.com/kejilion/apps.git else cd apps @@ -13072,7 +13072,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ *) cd ~ install git - if [ ! -d sh/.git ]; then + if [ ! -d apps/.git ]; then git clone https://github.com/kejilion/apps.git else cd apps From 15d5790865b18501038299a648fd1e671e830dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 13:32:33 +0800 Subject: [PATCH 492/553] Fix directory check for git repository --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 63820bb18..689d7a43a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -13051,7 +13051,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ send_stats "搜索第三方应用" cd ~ install git - if [ ! -d sh/.git ]; then + if [ ! -d apps/.git ]; then git clone https://github.com/kejilion/apps.git else cd apps @@ -13072,7 +13072,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ *) cd ~ install git - if [ ! -d sh/.git ]; then + if [ ! -d apps/.git ]; then git clone https://github.com/kejilion/apps.git else cd apps From 5011dda0979c0d4f83208da2864f1833d6fe880c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:28:31 +0800 Subject: [PATCH 493/553] =?UTF-8?q?Change=20'=E7=AC=AC=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=85=A5=E9=A9=BB'=20to=20'=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BA=94=E7=94=A8=E5=88=97=E8=A1=A8'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cn/kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 689d7a43a..e893221fe 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9328,7 +9328,7 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用入驻${gl_bai}" + echo -e "${gl_kjlan}第三方应用列表${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) @@ -9336,6 +9336,7 @@ while true; do local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" done + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" @@ -15479,5 +15480,3 @@ else ;; esac fi - - From c9f34440b7a43b0352b05cff353f51eea49b6c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:29:07 +0800 Subject: [PATCH 494/553] Update kejilion.sh --- kejilion.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 236679977..d7a843280 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9328,7 +9328,7 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用入驻${gl_bai}" + echo -e "${gl_kjlan}第三方应用列表${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) @@ -9336,6 +9336,7 @@ while true; do local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" done + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" @@ -15479,5 +15480,3 @@ else ;; esac fi - - From 840bd4e98b4d273f081d5c58b041f9f94c7760c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:49:34 +0800 Subject: [PATCH 495/553] Enhance third-party applications list message Updated the third-party applications list message to include a link to the developer guide. --- cn/kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e893221fe..0bca2f279 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9328,7 +9328,8 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用列表${gl_bai}" + echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_kjlan}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) From 9e121a525a65d5ef3f0b503fe14eac002638b57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:50:42 +0800 Subject: [PATCH 496/553] Enhance third-party application list message Updated the third-party application list message to include a link to the developer guide. --- kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index d7a843280..d5bdc49c7 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9328,7 +9328,8 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用列表${gl_bai}" + echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_kjlan}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) From df7eab88669972ee56cec68a7b838c03d55a4e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:51:27 +0800 Subject: [PATCH 497/553] Update URL color in third-party application list --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index d5bdc49c7..cc66df001 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9328,7 +9328,7 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_kjlan}https://dev.kejilion.sh/${gl_bai}" + echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue From 80b8f0282ea60121e28d1f469bf0c4140fb85023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:52:10 +0800 Subject: [PATCH 498/553] Update link color in third-party applications list --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 0bca2f279..c584586d0 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9328,7 +9328,7 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_kjlan}https://dev.kejilion.sh/${gl_bai}" + echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue From 9c6d24be387506d887c0b16719f80fcc2e662656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:57:46 +0800 Subject: [PATCH 499/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index c584586d0..227758be6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9328,8 +9328,8 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" - + echo -e "${gl_kjlan}第三方应用列表" + echo -e "${gl_kjlan}想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) From a0815e49dc9371cef78012f2f95933d11ceb6cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 16:58:36 +0800 Subject: [PATCH 500/553] Refactor third-party applications message output --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index cc66df001..613fecc41 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9328,8 +9328,8 @@ while true; do echo -e "${gl_kjlan}111. ${color111}多格式文件转换工具 ${gl_kjlan}112. ${color112}Lucky大内网穿透工具" echo -e "${gl_kjlan}113. ${color113}Firefox浏览器" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}第三方应用列表 - 想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" - + echo -e "${gl_kjlan}第三方应用列表" + echo -e "${gl_kjlan}想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) From 6936941606234b7d3440ad9f419229a4e00a8e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 17:40:51 +0800 Subject: [PATCH 501/553] Simplify application listing output Removed app_name from output in the application listing. --- cn/kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 227758be6..39defd0f6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9333,9 +9333,8 @@ while true; do for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) - local app_name=$(grep "app_name=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" done echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" From 53e69cdccc2f69940dc48cb81ca77cd552eea93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 17:41:36 +0800 Subject: [PATCH 502/553] Simplify app listing output by removing app_name Remove app_name from output in app listing. --- kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 613fecc41..c14c64659 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9333,9 +9333,8 @@ while true; do for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) - local app_name=$(grep "app_name=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_name - $app_text" + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" done echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" From a40a00238ab3c0064f357199d20f9844d46bb257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 17:42:12 +0800 Subject: [PATCH 503/553] Delete apps/cd.conf --- apps/cd.conf | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 apps/cd.conf diff --git a/apps/cd.conf b/apps/cd.conf deleted file mode 100644 index 01b1f9b31..000000000 --- a/apps/cd.conf +++ /dev/null @@ -1,27 +0,0 @@ -local app_id="201" -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="8201" -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 From 637d34d4d4ff4b739819cd42745851056dcfa356 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 18:02:39 +0800 Subject: [PATCH 504/553] Refactor git installation and app management logic --- cn/kejilion.sh | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 39defd0f6..2755329d5 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9237,9 +9237,16 @@ linux_ldnmp() { linux_panel() { - local sub_choice="$1" +cd ~ +install git +if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git +else + cd apps + git pull origin main +fi while true; do @@ -9337,8 +9344,6 @@ while true; do echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" done echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" - echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -13047,26 +13052,6 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; - - s) - send_stats "搜索第三方应用" - cd ~ - install git - if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git - else - cd apps - git pull origin main - fi - ;; - - - d) - send_stats "删除第三方应用" - cd ~ - rm -rf $HOME/apps - ;; - 0) kejilion ;; From a35abb2a97c182a6ab8f019a3be94529f6903c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 18:03:52 +0800 Subject: [PATCH 505/553] Fix git clone command and add missing fi --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2755329d5..e3c2b2034 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9239,6 +9239,7 @@ linux_panel() { local sub_choice="$1" +clear cd ~ install git if [ ! -d apps/.git ]; then From b5ee4c977b0c7b3e22461bfa960d39148ca72cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Fri, 26 Dec 2025 18:05:04 +0800 Subject: [PATCH 506/553] Refactor linux_panel function for git operations --- kejilion.sh | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index c14c64659..8f439bce5 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9237,9 +9237,17 @@ linux_ldnmp() { linux_panel() { - local sub_choice="$1" +clear +cd ~ +install git +if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git +else + cd apps + git pull origin main +fi while true; do @@ -9337,8 +9345,6 @@ while true; do echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" done echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}s. ${gl_bai}搜索三方应用 ${gl_kjlan}d. ${gl_bai}删除三方应用" - echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单" @@ -13047,26 +13053,6 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; - - s) - send_stats "搜索第三方应用" - cd ~ - install git - if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git - else - cd apps - git pull origin main - fi - ;; - - - d) - send_stats "删除第三方应用" - cd ~ - rm -rf $HOME/apps - ;; - 0) kejilion ;; From 70704f176e0d668f4223d3d04afb0948290c9210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 27 Dec 2025 20:28:34 +0800 Subject: [PATCH 507/553] Update kejilion.sh --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index e3c2b2034..cc30e0143 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9246,7 +9246,7 @@ if [ ! -d apps/.git ]; then git clone https://github.com/kejilion/apps.git else cd apps - git pull origin main + git pull origin main > /dev/null 2>&1 fi while true; do @@ -13063,7 +13063,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone https://github.com/kejilion/apps.git else cd apps - git pull origin main + git pull origin main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then From 680d033465edd132ef556319197fa35656949367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sat, 27 Dec 2025 20:29:19 +0800 Subject: [PATCH 508/553] Silence git pull output in kejilion.sh Suppress output of git pull command in kejilion.sh --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 8f439bce5..62f7ef5ab 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9246,7 +9246,7 @@ if [ ! -d apps/.git ]; then git clone https://github.com/kejilion/apps.git else cd apps - git pull origin main + git pull origin main > /dev/null 2>&1 fi while true; do @@ -13063,7 +13063,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone https://github.com/kejilion/apps.git else cd apps - git pull origin main + git pull origin main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then From 8163cf0e16a163f920bd867c11e728832eee4b64 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 28 Dec 2025 04:27:20 +0000 Subject: [PATCH 509/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202025-12-28=2004:27:20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 202 +++++++++++++++++++++++--------- jp/kejilion.sh | 308 ++++++++++++++++++++++++++++++++----------------- kr/kejilion.sh | 284 ++++++++++++++++++++++++++++++--------------- tw/kejilion.sh | 132 +++++++++++++++++---- 4 files changed, 647 insertions(+), 279 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 916de7124..921dc0eb6 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.10" +sh_v="4.3.0" gl_hui='\e[37m' @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# This function collects function buried information and records the current script version number, usage time, system version, CPU architecture, machine country and function name used by the user. It does not involve any sensitive information, so don’t worry! Please believe me! +# A function that collects function buried information and records the current script version number, usage time, system version, CPU architecture, machine country and function name used by the user. It does not involve any sensitive information, so don’t worry! Please believe me! # Why is this function designed? The purpose is to better understand the functions that users like to use, and to further optimize the functions and launch more functions that meet user needs. # The full text can be searched for the send_stats function call location. It is transparent and open source. If you have any concerns, you can refuse to use it. @@ -733,7 +733,7 @@ install_crontab() { return fi - echo -e "${gl_lv}crontab is installed and cron service is running.${gl_bai}" + echo -e "${gl_lv}crontab is installed and the cron service is running.${gl_bai}" } @@ -921,12 +921,12 @@ allow_ip() { # Add allow rule if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "Released IP$ip" + echo "IP released$ip" fi done save_iptables_rules - send_stats "Released IP" + send_stats "IP released" } block_ip() { @@ -2248,10 +2248,10 @@ web_security() { 22) send_stats "High load enables 5 seconds shield" - echo -e "${gl_huang}The website automatically detects every 5 minutes. When it detects high load, it will automatically open the shield. If the load is low, it will automatically close the shield for 5 seconds.${gl_bai}" + echo -e "${gl_huang}The website automatically detects every 5 minutes. When it detects high load, it will automatically open the shield, and when it detects low load, it will automatically close the shield for 5 seconds.${gl_bai}" echo "--------------" echo "Get CF parameters:" - echo -e "Go to my profile in the upper right corner of the cf backend, select the API token on the left, and obtain${gl_huang}Global API Key${gl_bai}" + echo -e "Go to my profile in the upper right corner of the cf backend, select the API token on the left, and get${gl_huang}Global API Key${gl_bai}" echo -e "Go to the bottom right of the cf backend domain name summary page to get it${gl_huang}Area ID${gl_bai}" echo "https://dash.cloudflare.com/login" echo "--------------" @@ -2676,7 +2676,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -2695,7 +2695,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow specified IPs + # Clear the rules that allow the specified 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 @@ -4054,7 +4054,7 @@ add_forwarding_service() { send_stats "Add frp intranet service" # Prompts user for service name and forwarding information read -e -p "Please enter service name:" service_name - read -e -p "Please enter the forwarding type (tcp/udp) [Enter to default to tcp]:" service_type + read -e -p "Please enter the forwarding type (tcp/udp) [Press enter to default to tcp]:" service_type local service_type=${service_type:-tcp} read -e -p "Please enter the intranet IP [default is 127.0.0.1 when pressing Enter]:" local_ip local local_ip=${local_ip:-127.0.0.1} @@ -4894,14 +4894,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion } @@ -4919,6 +4919,7 @@ dd_xitong() { dd_xitong_1() { echo -e "Initial username after reinstallation:${gl_huang}root${gl_bai}Initial password:${gl_huang}LeitboGi0ro${gl_bai}Initial port:${gl_huang}22${gl_bai}" + echo -e "${gl_huang}After reinstallation, please change the initial password in time to prevent violent intrusion. Enter passwd on the command line to change the password.${gl_bai}" echo -e "Press any key to continue..." read -n 1 -s -r -p "" install wget @@ -4952,7 +4953,9 @@ dd_xitong() { echo "Reinstall the system" echo "--------------------------------" echo -e "${gl_hong}Notice:${gl_bai}Reinstalling may cause loss of connection, so use with caution if you are worried. Reinstallation is expected to take 15 minutes, please back up your data in advance." - echo -e "${gl_hui}Thanks to boss leitbogioro and boss bin456789 for their script support!${gl_bai} " + echo -e "${gl_hui}Thanks to boss bin456789 and boss leitbogioro for their script support!${gl_bai} " + echo -e "${gl_hui}bin456789 project address: https://github.com/bin456789/reinstall${gl_bai}" + echo -e "${gl_hui}leitbogioro project address: https://github.com/leitbogioro/Tools${gl_bai}" echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -6045,9 +6048,9 @@ send_stats "Command Favorites" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# Create backup +# Create a backup create_backup() { - send_stats "Create backup" + send_stats "Create a backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # Prompt user for backup directory @@ -6089,7 +6092,7 @@ create_backup() { echo "- $path" done - # Create backup + # Create a backup echo "Creating backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6232,7 +6235,7 @@ add_connection() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started to enter the key content, continue adding + # If it is the first line or you have already started entering the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi @@ -6510,7 +6513,7 @@ disk_manager() { send_stats "Hard disk management function" while true; do clear - echo "Hard disk partition management" + echo "Hard drive partition management" echo -e "${gl_huang}This feature is under internal testing and should not be used in a production environment.${gl_bai}" echo "------------------------" list_partitions @@ -6580,7 +6583,7 @@ add_task() { if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # If it is the first line or you have already started to enter the key content, continue adding + # If it is the first line or you have already started entering the key content, continue adding if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi @@ -6717,7 +6720,7 @@ run_task() { else echo "Sync failed! Please check the following:" echo "1. Is the network connection normal?" - echo "2. Is the remote host accessible?" + echo "2. Whether the remote host is accessible" echo "3. Is the authentication information correct?" echo "4. Do the local and remote directories have correct access permissions?" fi @@ -7342,7 +7345,7 @@ docker_ssh_migration() { mapfile -t ENVS < <(jq -r '.[0].Config.Env[] | @sh' "$inspect_file") for e in "${ENVS[@]}"; do ENV_VARS+="-e $e "; done - # Volume mapping + # volume mapping local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done @@ -7734,7 +7737,7 @@ linux_docker() { case $sub_choice in 1) - send_stats "Create a new volume" + send_stats "Create new volume" read -e -p "Set new volume name:" dockerjuan docker volume create $dockerjuan @@ -9234,16 +9237,24 @@ linux_ldnmp() { linux_panel() { - local sub_choice="$1" +clear +cd ~ +install git +if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git +else + cd apps + git pull origin main > /dev/null 2>&1 +fi while true; do if [ -z "$sub_choice" ]; then clear echo -e "application market" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") @@ -9261,69 +9272,79 @@ while true; do echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}11. ${color11}ZenTao project management software${gl_kjlan}12. ${color12}Qinglong panel scheduled task management platform" echo -e "${gl_kjlan}13. ${color13}Cloudreve network disk${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}Simple picture bed picture management program" echo -e "${gl_kjlan}15. ${color15}emby multimedia management system${gl_kjlan}16. ${color16}Speedtest speed test panel" echo -e "${gl_kjlan}17. ${color17}AdGuardHome removes adware${gl_kjlan}18. ${color18}onlyofficeOnline office OFFICE" echo -e "${gl_kjlan}19. ${color19}Leichi WAF firewall panel${gl_kjlan}20. ${color20}portainer container management panel" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}21. ${color21}VScode web version${gl_kjlan}22. ${color22}UptimeKuma monitoring tool" echo -e "${gl_kjlan}23. ${color23}Memos web memo${gl_kjlan}24. ${color24}Webtop remote desktop web version${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud network disk${gl_kjlan}26. ${color26}QD-Today scheduled task management framework" echo -e "${gl_kjlan}27. ${color27}Dockge container stack management panel${gl_kjlan}28. ${color28}LibreSpeed ​​speed test tool" echo -e "${gl_kjlan}29. ${color29}searxng aggregated search station${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism Private Album System" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF Tools Collection${gl_kjlan}32. ${color32}drawio free online charting software${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel Navigation Panel${gl_kjlan}34. ${color34}Pingvin-Share file sharing platform" echo -e "${gl_kjlan}35. ${color35}Minimalist circle of friends${gl_kjlan}36. ${color36}LobeChatAI chat aggregation website" echo -e "${gl_kjlan}37. ${color37}MyIP Toolbox${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist family bucket" echo -e "${gl_kjlan}39. ${color39}Bililive live broadcast recording tool${gl_kjlan}40. ${color40}webssh web version SSH connection tool" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}41. ${color41}Mouse management panel${gl_kjlan}42. ${color42}Nexterm remote connection tool" echo -e "${gl_kjlan}43. ${color43}RustDesk remote desktop (server)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk remote desktop (relay)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker acceleration station${gl_kjlan}46. ${color46}GitHub acceleration station${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}Prometheus monitoring${gl_kjlan}48. ${color48}Prometheus (host monitoring)" echo -e "${gl_kjlan}49. ${color49}Prometheus (container monitoring)${gl_kjlan}50. ${color50}Replenishment monitoring tools" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}51. ${color51}PVE open chick panel${gl_kjlan}52. ${color52}DPanel container management panel" echo -e "${gl_kjlan}53. ${color53}llama3 chat AI large model${gl_kjlan}54. ${color54}AMH host website building management panel" echo -e "${gl_kjlan}55. ${color55}FRP intranet penetration (server)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP intranet penetration (client)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek chat AI large model${gl_kjlan}58. ${color58}Dify large model knowledge base${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI large model asset management${gl_kjlan}60. ${color60}JumpServer open source bastion machine" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow large model knowledge base" echo -e "${gl_kjlan}63. ${color63}OpenWebUI self-hosted AI platform${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" echo -e "${gl_kjlan}65. ${color65}n8n automated workflow platform${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" echo -e "${gl_kjlan}67. ${color67}ddns-go dynamic DNS management tool${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL certificate management platform" echo -e "${gl_kjlan}69. ${color69}SFTPGo file transfer tool${gl_kjlan}70. ${color70}AstrBot chatbot framework" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome private music server${gl_kjlan}72. ${color72}bitwarden password manager${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV Private Movies${gl_kjlan}74. ${color74}MoonTV private movies" echo -e "${gl_kjlan}75. ${color75}Melody music wizard${gl_kjlan}76. ${color76}Online DOS old games" echo -e "${gl_kjlan}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki intelligent document management system" echo -e "${gl_kjlan}79. ${color79}Beszel server monitoring${gl_kjlan}80. ${color80}linkwarden bookmark management" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet video conference${gl_kjlan}82. ${color82}gpt-load high-performance AI transparent proxy" echo -e "${gl_kjlan}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tool" echo -e "${gl_kjlan}85. ${color85}immich picture video manager${gl_kjlan}86. ${color86}jellyfin media management system" echo -e "${gl_kjlan}87. ${color87}SyncTV is a great tool for watching movies together${gl_kjlan}88. ${color88}Owncast self-hosted live streaming platform" echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser file manager" echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" echo -e "${gl_kjlan}95. ${color95}paperless document management platform${gl_kjlan}96. ${color96}2FAuth self-hosted two-step authenticator" echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server)${gl_kjlan}98. ${color98}WireGuard networking (client)" echo -e "${gl_kjlan}99. ${color99}DSM Synology Virtual Machine${gl_kjlan}100. ${color100}Syncthing peer-to-peer file synchronization tool" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI video generation tool${gl_kjlan}102. ${color102}VoceChat multi-person online chat system" echo -e "${gl_kjlan}103. ${color103}Umami website statistics tool${gl_kjlan}104. ${color104}Stream four-layer proxy forwarding tool" echo -e "${gl_kjlan}105. ${color105}Siyuan Notes${gl_kjlan}106. ${color106}Drawnix open source whiteboard tool" echo -e "${gl_kjlan}107. ${color107}PanSou network disk search${gl_kjlan}108. ${color108}LangBot chatbot" echo -e "${gl_kjlan}109. ${color109}ZFile online network disk${gl_kjlan}110. ${color110}Karakeep bookmark management" - echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}111. ${color111}Multi-format file conversion tool" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}111. ${color111}Multi-format file conversion tool${gl_kjlan}112. ${color112}Lucky large intranet penetration tool" + echo -e "${gl_kjlan}113. ${color113}Firefox browser" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}Third-party application list" + echo -e "${gl_kjlan}Want your app to appear here? Check out the developer guide:${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do + [ -e "$f" ] || continue + local base_name=$(basename "$f" .conf) + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + done + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" @@ -9935,7 +9956,7 @@ while true; do } - local docker_describe="Speedtest speed measurement panel is a VPS network speed test tool with multiple test functions and can also monitor VPS inbound and outbound traffic in real time." + local docker_describe="Speedtest speed test panel is a VPS network speed test tool with multiple test functions and can also monitor VPS inbound and outbound traffic in real time." local docker_url="Official website introduction:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" @@ -11312,7 +11333,7 @@ while true; do } - local docker_describe="Open source AI chatbot framework, supporting WeChat, QQ, and TG access to large AI models" + local docker_describe="Open source AI chatbot framework, supporting WeChat, QQ, and TG access to AI large models" local docker_url="Official website introduction: https://astrbot.app/" local docker_use="echo \"Username: astrbot Password: astrbot\"" local docker_passwd="" @@ -11368,7 +11389,7 @@ while true; do } - local docker_describe="A password manager that puts you in control of your data" + local docker_describe="A password manager where you can control your data" local docker_url="Official website introduction: https://bitwarden.com/" local docker_use="" local docker_passwd="" @@ -11546,7 +11567,7 @@ while true; do local docker_describe="Xunlei, your offline high-speed BT magnetic download tool" local docker_url="Official website introduction: https://github.com/cnk3x/xunlei" - local docker_use="echo \"Log in to Xunlei with your mobile phone, and then enter the invitation code. Invitation code: Xunlei Niutong\"" + local docker_use="echo \"Log in to Xunlei with your mobile phone and enter the invitation code. Invitation code: Xunlei Niutong\"" local docker_passwd="" local app_size="1" docker_app @@ -12471,7 +12492,7 @@ while true; do local app_id="99" - local app_name="dsm Synology virtual machine" + local app_name="dsm synology virtual machine" local app_text="Virtual DSM in Docker container" local app_url="Official website: https://github.com/vdsm/virtual-dsm" local docker_name="dsm" @@ -12556,7 +12577,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI video generation tool" - local app_text="MoneyPrinterTurbo is a tool that uses AI large models to synthesize high-definition short videos" + local app_text="MoneyPrinterTurbo is a tool that uses AI large models to synthesize high-definition short videos." local app_url="Official website: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12899,7 +12920,66 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 112|lucky) + local app_id="112" + local docker_name="lucky" + local docker_img="gdy666/lucky:v2" + # Since Lucky uses the host network mode, the port here is only for record/explanation reference, and is actually controlled by the application itself (default 16601) + local docker_port=8112 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + --network host \ + -v /home/docker/lucky/conf:/app/conf \ + -v /var/run/docker.sock:/var/run/docker.sock \ + ${docker_img} + + echo "Waiting for Lucky to initialize..." + sleep 10 + docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} + + } + + local docker_describe="Lucky is a large intranet penetration and port forwarding management tool that supports DDNS, reverse proxy, WOL and other functions." + local docker_url="Project address: https://github.com/gdy666/lucky" + local docker_use="echo \"Default account password: 666\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 113|firefox) + + local app_id="113" + local docker_name="firefox" + local docker_img="jlesage/firefox:latest" + local docker_port=8113 + + docker_rum() { + + read -e -p "Set login password:" admin_password + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:5800 \ + -v /home/docker/firefox:/config:rw \ + -e ENABLE_CJK_FONT=1 \ + -e WEB_AUDIO=1 \ + -e VNC_PASSWORD="${admin_password}" \ + ${docker_img} + } + + local docker_describe="It is a Firefox browser running in Docker that supports direct access to the desktop browser interface through web pages." + local docker_url="Project address: https://github.com/jlesage/docker-firefox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) @@ -12973,11 +13053,24 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; - 0) kejilion ;; *) + cd ~ + install git + if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git + else + cd apps + git pull origin main > /dev/null 2>&1 + fi + local custom_app="$HOME/apps/${sub_choice}.conf" + if [ -f "$custom_app" ]; then + . "$custom_app" + else + echo -e "${gl_hong}Error: Not found with number${sub_choice}application configuration${gl_bai}" + fi ;; esac break_end @@ -12987,6 +13080,7 @@ done } + linux_work() { while true; do @@ -13010,7 +13104,7 @@ linux_work() { echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" echo -e "${gl_kjlan}9. ${gl_bai}Workspace No. 9" - echo -e "${gl_kjlan}10. ${gl_bai}Workspace No. 10" + echo -e "${gl_kjlan}10. ${gl_bai}Workspace 10" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}SSH resident mode${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}22. ${gl_bai}Create/enter workspace" @@ -13282,7 +13376,7 @@ linux_Settings() { echo -e "${gl_kjlan}3. ${gl_bai}ROOT password login mode${gl_kjlan}4. ${gl_bai}Install the specified version of Python" echo -e "${gl_kjlan}5. ${gl_bai}Open all ports${gl_kjlan}6. ${gl_bai}Modify SSH connection port" echo -e "${gl_kjlan}7. ${gl_bai}Optimize DNS address${gl_kjlan}8. ${gl_bai}Reinstall the system with one click${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account and create new account${gl_kjlan}10. ${gl_bai}Switch priority to ipv4/ipv6" + echo -e "${gl_kjlan}9. ${gl_bai}Disable ROOT account and create new account${gl_kjlan}10. ${gl_bai}Switch priority ipv4/ipv6" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}Check port occupation status${gl_kjlan}12. ${gl_bai}Modify virtual memory size" echo -e "${gl_kjlan}13. ${gl_bai}User management${gl_kjlan}14. ${gl_bai}User/password generator" @@ -13744,7 +13838,7 @@ EOF send_stats "Change time zone" while true; do clear - echo "System time information" + echo "系统时间信息" # Get the current system time zone local timezone=$(current_timezone) @@ -13774,7 +13868,7 @@ EOF echo "America" echo "21. US Western Time 22. US Eastern Time" echo "23. Canada time 24. Mexico time" - echo "25. Brazil time 26. Argentina time" + echo "25. Brazil Time 26. Argentina Time" echo "------------------------" echo "31. UTC global standard time" echo "------------------------" @@ -14032,7 +14126,7 @@ EOF echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" + echo -e "${gl_hui}Current limiting shutdown function is not currently enabled${gl_bai}" fi echo @@ -14283,7 +14377,7 @@ EOF echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "10. Set the network to${gl_huang}ipv4 priority${gl_bai}" + echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" @@ -14292,7 +14386,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "One-stop tuning starts" + send_stats "One-stop tuning started" echo "------------------------------------------------" switch_mirror false false linux_update @@ -14332,7 +14426,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" prefer_ipv4 - echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}ipv4 priority${gl_bai}}" + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker @@ -14845,7 +14939,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15372,5 +15466,3 @@ else ;; esac fi - - diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 06129920e..7b233ad85 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.10" +sh_v="4.3.0" gl_hui='\e[37m' @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! +# 関数の埋もれた情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、ユーザーが使用した関数名を記録する機能。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -251,7 +251,7 @@ remove() { fi for package in "$@"; do - echo -e "${gl_huang}アンインストール中$package...${gl_bai}" + 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 @@ -797,7 +797,7 @@ docker_ipv6_off() { # 元の構成と新しい構成を比較する if [[ "$CURRENT_IPV6" == "false" ]]; then - echo -e "${gl_huang}現在IPv6アクセスは停止中です${gl_bai}" + echo -e "${gl_huang}IPv6アクセスは現在停止中です${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -863,7 +863,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -921,12 +921,12 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "リリース済みIP$ip" + echo "IP公開$ip" fi done save_iptables_rules - send_stats "リリース済みIP" + send_stats "IP公開" } block_ip() { @@ -1186,7 +1186,7 @@ iptables_panel() { ;; 15) - read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます):" country_code + read -e -p "ブロックされている国コードを入力してください (CN US JP のように、複数の国コードをスペースで区切ることができます)。" country_code manage_country_rules block $country_code send_stats "国を許可する$country_codeIP" ;; @@ -1543,12 +1543,12 @@ certs_status() { else send_stats "ドメイン名証明書の申請に失敗しました" echo -e "${gl_hong}知らせ:${gl_bai}証明書の申請に失敗しました。次の考えられる理由を確認して、再試行してください。" - echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているか確認してください" + echo -e "1. ドメイン名のスペルが間違っています ➠ ドメイン名が正しく入力されているかどうかを確認してください" echo -e "2. DNS 解決の問題 ➠ ドメイン名がサーバー IP に正しく解決されていることを確認します。" echo -e "3. ネットワーク構成の問題 ➠ Cloudflare Warp などの仮想ネットワークを使用している場合は、一時的にシャットダウンしてください" echo -e "4. ファイアウォールの制限 ➠ ポート 80/443 が開いているかどうかを確認し、アクセス可能であることを確認します。" echo -e "5. アプリケーション数が制限を超えている ➠ Let's Encrypt には週制限あり (5 回/ドメイン名/週)" - echo -e "6. 国内の登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかどうかを確認してください" + echo -e "6. 国内登録制限 ➠ 中国本土環境の場合は、ドメイン名が登録されているかをご確認ください。" echo "------------------------" echo "1. 再度適用します。 2. 既存の証明書をインポートします。 3. 証明書なしで HTTP アクセスを使用します。 0. 終了します。" echo "------------------------" @@ -1760,7 +1760,7 @@ cf_purge_cache() { # キャッシュをクリアするかどうかをユーザーに確認する read -e -p "Cloudflareのキャッシュをクリアする必要がありますか? (y/n):" answer if [[ "$answer" == "y" ]]; then - echo "CF 情報は次の場所に保存されます。$CONFIG_FILECF 情報は後で変更できます。" + echo "CF情報は以下に保存されます。$CONFIG_FILECF 情報は後で変更できます。" read -e -p "API_TOKEN を入力してください:" API_TOKEN read -e -p "CF ユーザー名を入力してください:" EMAIL read -e -p "zone_id を入力してください (複数の場合はスペースで区切ります):" -a ZONE_IDS @@ -2248,9 +2248,9 @@ web_security() { 22) send_stats "高負荷により5秒シールドが可能" - echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検知すると自動的にシールドが開きます。負荷が低い場合は、シールドが 5 秒間自動的に閉じます。${gl_bai}" + echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" - echo "CF パラメータを取得します。" + echo "CFパラメータを取得します。" echo -e "cf バックエンドの右上隅にある私のプロフィールに移動し、左側で API トークンを選択して、${gl_huang}Global API Key${gl_bai}" echo -e "cf バックエンド ドメイン名の概要ページの右下に移動して取得します。${gl_huang}エリアID${gl_bai}" echo "https://dash.cloudflare.com/login" @@ -2365,7 +2365,7 @@ web_optimization() { send_stats "LDNMP環境の最適化" echo -e "LDNMP環境の最適化${gl_lv}${mode_info}${gzip_status}${br_status}${zstd_status}${gl_bai}" echo "------------------------" - echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" + echo "1.スタンダードモード 2.ハイパフォーマンスモード(2H4G以上推奨)" echo "------------------------" echo "3. gzip 圧縮をオンにする 4. gzip 圧縮をオフにする" echo "5. br 圧縮をオンにする 6. br 圧縮をオフにする" @@ -2575,7 +2575,7 @@ check_docker_image_update() { # 公式画像のサポートを追加 [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Docker Hub APIからイメージのリリース時間を取得する + # 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) @@ -2623,7 +2623,7 @@ block_container_port() { iptables -I DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8をチェックして許可します。 + # ローカルネットワーク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 @@ -2640,7 +2640,7 @@ block_container_port() { iptables -I DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク127.0.0.0/8をチェックして許可します。 + # ローカルネットワーク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 @@ -2681,7 +2681,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク 127.0.0.0/8 を許可するルールをクリアします。 + # ローカルネットワーク 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 @@ -2700,7 +2700,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -s "$allowed_ip" -d "$container_ip" -j ACCEPT fi - # ローカルネットワーク 127.0.0.0/8 を許可するルールをクリアします。 + # ローカルネットワーク 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 @@ -3008,7 +3008,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3639,7 +3639,7 @@ ldnmp_Proxy_backend_stream() { echo "名前を空にすることはできません"; return 1 fi - # リスニングポートを取得する + # リスニングポートの取得 read -rp "ローカルのリスニング ポート (3306 など) を入力してください。" listen_port if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then echo "ポートは数値である必要があります"; return 1 @@ -3768,7 +3768,7 @@ ldnmp_web_status() { echo "" echo "操作する" echo "------------------------" - echo "1. ドメイン名証明書の適用/更新 2. サイトドメイン名の複製" + echo "1. ドメイン名証明書の適用/更新 2. サイトのドメイン名の複製" echo "3. サイトのキャッシュをクリアします。 4. 関連するサイトを作成します。" echo "5. アクセスログの表示 6. エラーログの表示" echo "7. グローバル構成の編集 8. サイト構成の編集" @@ -3832,7 +3832,7 @@ ldnmp_web_status() { ;; 4) send_stats "関連サイトの作成" - echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスします" + echo -e "新しいドメイン名を既存のサイトに関連付けてアクセスする" read -e -p "既存のドメイン名を入力してください:" oddyuming read -e -p "新しいドメイン名を入力してください:" yuming install_certbot @@ -4054,9 +4054,9 @@ add_forwarding_service() { send_stats "FRPイントラネットサービスを追加" # ユーザーにサービス名と転送情報の入力を求めるプロンプトを表示します read -e -p "サービス名を入力してください:" service_name - read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp を入力する]:" service_type + read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp にするには Enter キーを押してください]:" service_type local service_type=${service_type:-tcp} - read -e -p "イントラネット IP を入力してください [Enter キーを押した場合のデフォルトは 127.0.0.1]:" local_ip + read -e -p "イントラネット IP を入力してください [Enter キーを押すときのデフォルトは 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 @@ -4098,7 +4098,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーの印刷 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "サービス名" "イントラネットアドレス" "外部ネットワークアドレス" "プロトコル" awk ' @@ -4733,7 +4733,7 @@ while true; do 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 "3. DNS 設定を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4894,14 +4894,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を使用するには、root ユーザーが実行する必要があります。" && break_end && kejilion } @@ -4919,6 +4919,7 @@ dd_xitong() { dd_xitong_1() { echo -e "再インストール後の初期ユーザー名:${gl_huang}root${gl_bai}初期パスワード:${gl_huang}LeitboGi0ro${gl_bai}初期ポート:${gl_huang}22${gl_bai}" + echo -e "${gl_huang}再インストール後は、暴力的な侵入を防ぐため、初期パスワードを適時に変更してください。パスワードを変更するには、コマンドラインに passwd と入力します。${gl_bai}" echo -e "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" install wget @@ -4952,7 +4953,9 @@ dd_xitong() { echo "システムを再インストールする" echo "--------------------------------" echo -e "${gl_hong}知らせ:${gl_bai}再インストールすると接続が切れる可能性がありますので、不安な方はご注意ください。再インストールには 15 分程度かかることが予想されますので、事前にデータをバックアップしてください。" - echo -e "${gl_hui}スクリプトをサポートしてくれたボス leitbogioro とボス bin456789 に感謝します。${gl_bai} " + echo -e "${gl_hui}スクリプトをサポートしてくれたボス bin456789 とボス leitbogioro に感謝します。${gl_bai} " + echo -e "${gl_hui}bin456789 プロジェクトのアドレス: https://github.com/bin456789/reinstall${gl_bai}" + echo -e "${gl_hui}leitbogioro プロジェクトのアドレス: https://github.com/leitbogioro/Tools${gl_bai}" echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -5113,7 +5116,7 @@ dd_xitong() { ;; 30) - send_stats "CentOS9を再インストールする" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -5447,7 +5450,7 @@ elrepo() { echo "ビデオ紹介: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat シリーズのディストリビューション CentOS/RedHat/Alma/Rocky/oracle のみをサポートします" - echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試してみて、慎重に実稼働環境をアップグレードすることをお勧めします。" + echo "Linux カーネルをアップグレードすると、システムのパフォーマンスとセキュリティが向上します。可能であれば試して、慎重に実稼働環境をアップグレードすることをお勧めします。" echo "------------------------------------------------" read -e -p "続行してもよろしいですか? (はい/いいえ):" choice @@ -5495,7 +5498,7 @@ clamav_scan() { MOUNT_PARAMS+="--mount type=bind,source=${dir},target=/mnt/host${dir} " done - # clamscan コマンドのパラメータを構築する + # clamscan コマンドパラメータを構築する local SCAN_PARAMS="" for dir in "$@"; do SCAN_PARAMS+="/mnt/host${dir} " @@ -6045,9 +6048,9 @@ send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップの作成 +# バックアップを作成する create_backup() { - send_stats "バックアップの作成" + send_stats "バックアップを作成する" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -6089,7 +6092,7 @@ create_backup() { echo "- $path" done - # バックアップの作成 + # バックアップを作成する echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6177,7 +6180,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "Enter キーを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6377,9 +6380,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントする +# パーティションのマウント mount_partition() { - send_stats "パーティションをマウントする" + send_stats "パーティションのマウント" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6398,7 +6401,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6510,7 +6513,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6529,7 +6532,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter キーを押して続行します..." + read -e -p "Enter を押して続行します..." done } @@ -6558,7 +6561,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポートを入力してください (デフォルトは 22):" port + read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port port=${port:-22} echo "認証方法を選択してください:" @@ -6717,7 +6720,7 @@ run_task() { else echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2. リモート ホストにアクセスできますか?" + echo "2. リモートホストにアクセスできるかどうか" echo "3. 認証情報は正しいですか?" echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi @@ -6726,7 +6729,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期のスケジュールされたタスクを追加する" + send_stats "同期スケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6816,7 +6819,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter キーを押して続行します..." + read -e -p "Enter を押して続行します..." done } @@ -6875,7 +6878,7 @@ linux_info() { 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 day ", run_days); if (run_hours > 0) printf("%d 時間 ", run_hours); printf("%d 分\n", run_ minutes)}') + 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 day ", run_days); if (実行時間 > 0) printf("%d 時間 ", 実行時間); printf("%d 分\n", run_ minutes)}') local timezone=$(current_timezone) @@ -7004,7 +7007,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftop をインストールする" + send_stats "iftopをインストールする" ;; 7) clear @@ -7308,7 +7311,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7475,7 +7478,7 @@ docker_ssh_migration() { [[ "$has_container" == false ]] && echo -e "${YELLOW}共通コンテナのバックアップ情報が見つかりません${NC}" - # /home/docker 下のファイルを復元する + # /home/docker 下のファイルを復元します if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker @@ -7581,7 +7584,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -8938,10 +8941,10 @@ linux_ldnmp() { 32) clear - send_stats "LDNMP环境备份" + send_stats "LDNMP環境のバックアップ" local backup_filename="web_$(date +"%Y%m%d%H%M%S").tar.gz" - echo -e "${gl_huang}正在备份 $backup_filename ...${gl_bai}" + echo -e "${gl_huang}バックアップ中$backup_filename ...${gl_bai}" cd /home/ && tar czvf "$backup_filename" web while true; do @@ -9234,16 +9237,24 @@ linux_ldnmp() { linux_panel() { - local sub_choice="$1" +clear +cd ~ +install git +if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git +else + cd apps + git pull origin main > /dev/null 2>&1 +fi while true; do if [ -z "$sub_choice" ]; then clear echo -e "アプリケーション市場" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") @@ -9261,69 +9272,79 @@ while true; do echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}11. ${color11}ZenTao プロジェクト管理ソフトウェア${gl_kjlan}12. ${color12}Qinglong パネルのスケジュールされたタスク管理プラットフォーム" echo -e "${gl_kjlan}13. ${color13}Cloudreve ネットワークディスク${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}シンプルなピクチャーベッド画像管理プログラム" echo -e "${gl_kjlan}15. ${color15}emby マルチメディア管理システム${gl_kjlan}16. ${color16}Speedtest スピードテストパネル" echo -e "${gl_kjlan}17. ${color17}AdGuardHome はアドウェアを削除します${gl_kjlan}18. ${color18}Onlyofficeオンラインオフィス OFFICE" echo -e "${gl_kjlan}19. ${color19}Leichi WAF ファイアウォール パネル${gl_kjlan}20. ${color20}ポーターコンテナ管理パネル" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}21. ${color21}VScode Web バージョン${gl_kjlan}22. ${color22}UptimeKuma監視ツール" echo -e "${gl_kjlan}23. ${color23}メモウェブメモ${gl_kjlan}24. ${color24}Webtop リモート デスクトップ Web バージョン${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud ネットワーク ディスク${gl_kjlan}26. ${color26}QD-Today スケジュールされたタスク管理フレームワーク" echo -e "${gl_kjlan}27. ${color27}Dockge コンテナ スタック管理パネル${gl_kjlan}28. ${color28}LibreSpeed 速度テストツール" echo -e "${gl_kjlan}29. ${color29}searxng 集約検索ステーション${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrismプライベートアルバムシステム" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF ツール コレクション${gl_kjlan}32. ${color32}無料のオンライングラフ作成ソフトウェアdrawio${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel ナビゲーション パネル${gl_kjlan}34. ${color34}Pingvin-Share ファイル共有プラットフォーム" echo -e "${gl_kjlan}35. ${color35}ミニマリストの友達の輪${gl_kjlan}36. ${color36}LobeChatAIチャットアグリゲーションサイト" echo -e "${gl_kjlan}37. ${color37}MyIP ツールボックス${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alistファミリーバケット" echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh Web版 SSH接続ツール" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}41. ${color41}マウス管理パネル${gl_kjlan}42. ${color42}Nexterm リモート接続ツール" echo -e "${gl_kjlan}43. ${color43}RustDesk リモート デスクトップ (サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk リモート デスクトップ (リレー)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker アクセラレーション ステーション${gl_kjlan}46. ${color46}GitHub アクセラレーション ステーション${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}プロメテウスの監視${gl_kjlan}48. ${color48}Prometheus (ホスト監視)" echo -e "${gl_kjlan}49. ${color49}Prometheus (コンテナ監視)${gl_kjlan}50. ${color50}補充監視ツール" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}51. ${color51}PVEオープンチックパネル${gl_kjlan}52. ${color52}DPanel コンテナ管理パネル" echo -e "${gl_kjlan}53. ${color53}llama3チャットAI大型モデル${gl_kjlan}54. ${color54}AMH ホスト Web サイト構築管理パネル" echo -e "${gl_kjlan}55. ${color55}FRPイントラネット普及(サーバー)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRPイントラネット普及(クライアント)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}ディープシークチャットAI大型モデル${gl_kjlan}58. ${color58}Dify 大規模モデルのナレッジ ベース${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI 大規模モデル資産管理${gl_kjlan}60. ${color60}JumpServer オープンソース要塞マシン" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}61. ${color61}オンライン翻訳サーバー${gl_kjlan}62. ${color62}RAGFlow 大規模モデルのナレッジ ベース" echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}ITツールツールボックス" echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstrBot チャットボット フレームワーク" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstBot チャットボット フレームワーク" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV プライベートムービー${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" echo -e "${gl_kjlan}75. ${color75}メロディー音楽の魔法使い${gl_kjlan}76. ${color76}オンライン DOS 古いゲーム" echo -e "${gl_kjlan}77. ${color77}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}PandaWiki インテリジェント文書管理システム" echo -e "${gl_kjlan}79. ${color79}Beszel サーバーの監視${gl_kjlan}80. ${color80}リンクワーデンのブックマーク管理" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos の個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}85. ${color85}イミッチピクチャービデオマネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}Owncast の自己ホスト型ライブ ストリーミング プラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBox ファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}91. ${color91}gitea プライベート コード リポジトリ${gl_kjlan}92. ${color92}FileBrowser ファイルマネージャー" echo -e "${gl_kjlan}93. ${color93}Dufs のミニマリスト静的ファイル サーバー${gl_kjlan}94. ${color94}Gopeed高速ダウンロードツール" echo -e "${gl_kjlan}95. ${color95}ペーパーレス文書管理プラットフォーム${gl_kjlan}96. ${color96}2FAuth セルフホスト型 2 段階認証システム" echo -e "${gl_kjlan}97. ${color97}WireGuard ネットワーキング (サーバー)${gl_kjlan}98. ${color98}WireGuard ネットワーキング (クライアント)" echo -e "${gl_kjlan}99. ${color99}DSM Synology 仮想マシン${gl_kjlan}100. ${color100}Syncthing ピアツーピア ファイル同期ツール" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI動画生成ツール${gl_kjlan}102. ${color102}VoceChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}103. ${color103}Umami ウェブサイト統計ツール${gl_kjlan}104. ${color104}ストリーム 4 層プロキシ転送ツール" echo -e "${gl_kjlan}105. ${color105}思源ノート${gl_kjlan}106. ${color106}Drawnix オープンソース ホワイトボード ツール" echo -e "${gl_kjlan}107. ${color107}PanSou ネットワークディスク検索${gl_kjlan}108. ${color108}LangBot チャットボット" echo -e "${gl_kjlan}109. ${color109}ZFileオンラインネットワークディスク${gl_kjlan}110. ${color110}カラオケのブックマーク管理" - echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}111. ${color111}マルチフォーマットファイル変換ツール" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}111. ${color111}マルチフォーマットファイル変換ツール${gl_kjlan}112. ${color112}Lucky 大規模イントラネット侵入ツール" + echo -e "${gl_kjlan}113. ${color113}Firefoxブラウザ" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}サードパーティ製アプリケーションのリスト" + echo -e "${gl_kjlan}あなたのアプリをここに表示したいですか?開発者ガイドを確認してください。${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do + [ -e "$f" ] || continue + local base_name=$(basename "$f" .conf) + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + done + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}メインメニューに戻る" @@ -9935,7 +9956,7 @@ while true; do } - local docker_describe="Speedtest 速度測定パネルは、複数のテスト機能を備えた VPS ネットワーク速度テスト ツールで、VPS のインバウンドおよびアウトバウンドのトラフィックをリアルタイムで監視することもできます。" + local docker_describe="Speedtest スピード テスト パネルは、複数のテスト機能を備えた VPS ネットワーク速度テスト ツールで、VPS のインバウンドおよびアウトバウンドのトラフィックをリアルタイムで監視することもできます。" local docker_url="公式サイト紹介:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" @@ -11099,8 +11120,8 @@ while true; do 62|ragflow) local app_id="62" local app_name="RAGFlow ナレッジベース" - local app_text="ドキュメントの深い理解に基づいたオープンソース RAG (Retrieval Augmented Generation) エンジン" - local app_url="公式サイト:https://github.com/infiniflow/ragflow" + local app_text="ドキュメントの深い理解に基づくオープンソース RAG (Retrieval Augmented Generation) エンジン" + local app_url="公式ウェブサイト:https://github.com/infiniflow/ragflow" local docker_name="ragflow-server" local docker_port="8062" local app_size="8" @@ -11312,7 +11333,7 @@ while true; do } - local docker_describe="オープンソース AI チャットボット フレームワーク。WeChat、QQ、TG による大規模 AI モデルへのアクセスをサポート" + local docker_describe="オープンソースの AI チャットボット フレームワーク。WeChat、QQ、TG による AI の大規模モデルへのアクセスをサポート" local docker_url="公式サイト紹介:https://astrbot.app/" local docker_use="echo \"ユーザー名: astrbot パスワード: astrbot\"" local docker_passwd="" @@ -11368,7 +11389,7 @@ while true; do } - local docker_describe="データを管理できるパスワード マネージャー" + local docker_describe="データを管理できるパスワードマネージャー" local docker_url="公式サイト紹介:https://bitwarden.com/" local docker_use="" local docker_passwd="" @@ -11546,7 +11567,7 @@ while true; do local docker_describe="Xunlei、オフライン高速 BT 磁気ダウンロード ツール" local docker_url="公式サイト紹介:https://github.com/cnk3x/xunlei" - local docker_use="echo \"携帯電話で Xunlei にログインし、招待コードを入力します。招待コード: Xunlei Niutong\"" + local docker_use="echo \"携帯電話で Xunlei にログインし、招待コードを入力してください。招待コード: Xunlei Niutong\"" local docker_passwd="" local app_size="1" docker_app @@ -11616,7 +11637,7 @@ while true; do local app_id="80" local app_name="リンクワーデンのブックマーク管理" - local app_text="タグ付け、検索、チーム コラボレーションをサポートする、オープン ソースの自己ホスト型ブックマーク管理プラットフォーム。" + local app_text="タグ付け、検索、チーム コラボレーションをサポートするオープンソースの自己ホスト型ブックマーク管理プラットフォーム。" local app_url="公式サイト:https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" @@ -11831,7 +11852,7 @@ while true; do 85|immich) local app_id="85" - local app_name="イミッチ・ピクチャー・ビデオ・マネージャー" + local app_name="イミッチピクチャービデオマネージャー" local app_text="高性能の自己ホスト型写真およびビデオ管理ソリューション。" local app_url="公式サイト紹介:https://github.com/immich-app/immich" local docker_name="immich_server" @@ -11955,7 +11976,7 @@ while true; do } - local docker_describe="オープンソース、無料の自社構築ライブ ブロードキャスト プラットフォーム" + local docker_describe="オープンソースの無料の自作ライブ ブロードキャスト プラットフォーム" local docker_url="公式サイト紹介:https://owncast.online" local docker_use="echo \"管理者ページにアクセスするには、アクセス アドレスの後に /admin を続けます\"" local docker_passwd="echo \"初期アカウント: admin 初期パスワード: abc123 ログイン後、時間内にログイン パスワードを変更してください\"" @@ -12471,7 +12492,7 @@ while true; do local app_id="99" - local app_name="dsm Synology 仮想マシン" + local app_name="DSM Synology 仮想マシン" local app_text="Dockerコンテナ内の仮想DSM" local app_url="公式ウェブサイト:https://github.com/vdsm/virtual-dsm" local docker_name="dsm" @@ -12556,7 +12577,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI動画生成ツール" - local app_text="MoneyPrinterTurbo は、AI ラージモデルを使用して高解像度のショートビデオを合成するツールです" + local app_text="MoneyPrinterTurbo は、AI ラージモデルを使用して高解像度のショートビデオを合成するツールです。" local app_url="公式ウェブサイト:https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12889,7 +12910,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="これは、強力なマルチフォーマット ファイル変換ツール (ドキュメント、画像、オーディオ、ビデオなどをサポート) です。ドメイン名アクセスを追加することを強くお勧めします。" + local docker_describe="これは強力なマルチフォーマット ファイル変換ツールです (ドキュメント、画像、オーディオ、ビデオなどをサポート)。ドメイン名アクセスを追加することを強くお勧めします。" local docker_url="プロジェクトアドレス: https://github.com/c4illin/ConvertX" local docker_use="" local docker_passwd="" @@ -12899,7 +12920,66 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 112|lucky) + local app_id="112" + local docker_name="lucky" + local docker_img="gdy666/lucky:v2" + # Lucky はホスト ネットワーク モードを使用するため、ここでのポートは記録と説明の参照のみを目的としており、実際にはアプリケーション自体によって制御されます (デフォルトは 16601)。 + local docker_port=8112 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + --network host \ + -v /home/docker/lucky/conf:/app/conf \ + -v /var/run/docker.sock:/var/run/docker.sock \ + ${docker_img} + + echo "Lucky が初期化されるのを待っています..." + sleep 10 + docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} + + } + + local docker_describe="Lucky は、DDNS、リバース プロキシ、WOL、その他の機能をサポートする大規模なイントラネット ペネトレーションおよびポート フォワーディング管理ツールです。" + local docker_url="プロジェクトアドレス: https://github.com/gdy666/lucky" + local docker_use="echo \"デフォルトのアカウントパスワード: 666\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 113|firefox) + + local app_id="113" + local docker_name="firefox" + local docker_img="jlesage/firefox:latest" + local docker_port=8113 + + docker_rum() { + + read -e -p "ログインパスワードを設定します:" admin_password + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:5800 \ + -v /home/docker/firefox:/config:rw \ + -e ENABLE_CJK_FONT=1 \ + -e WEB_AUDIO=1 \ + -e VNC_PASSWORD="${admin_password}" \ + ${docker_img} + } + + local docker_describe="これは、Web ページを介したデスクトップ ブラウザ インターフェイスへの直接アクセスをサポートする、Docker で実行される Firefox ブラウザです。" + local docker_url="プロジェクトアドレス: https://github.com/jlesage/docker-firefox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) @@ -12973,11 +13053,24 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; - 0) kejilion ;; *) + cd ~ + install git + if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git + else + cd apps + git pull origin main > /dev/null 2>&1 + fi + local custom_app="$HOME/apps/${sub_choice}.conf" + if [ -f "$custom_app" ]; then + . "$custom_app" + else + echo -e "${gl_hong}エラー: 番号が見つかりません${sub_choice}アプリケーション構成${gl_bai}" + fi ;; esac break_end @@ -12987,6 +13080,7 @@ done } + linux_work() { while true; do @@ -12995,7 +13089,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d を単独で押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -13010,7 +13104,7 @@ linux_work() { echo -e "${gl_kjlan}7. ${gl_bai}作業エリア 7" echo -e "${gl_kjlan}8. ${gl_bai}作業エリア8" echo -e "${gl_kjlan}9. ${gl_bai}ワークスペースNo.9" - echo -e "${gl_kjlan}10. ${gl_bai}ワークスペースNo.10" + 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}ワークスペースの作成/入力" @@ -13140,7 +13234,7 @@ linux_work() { 23) - read -e -p "バックグラウンドで実行するコマンドを入力してください (例:curl -fsSL https://get.docker.com | )し:" tmuxd + read -e -p "バックグラウンドで実行するコマンドを入力してください。たとえば、curl -fsSL https://get.docker.com |し:" tmuxd tmux_run_d send_stats "バックグラウンドワークスペースにコマンドを挿入する" ;; @@ -13280,9 +13374,9 @@ linux_Settings() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}スクリプト起動のショートカットキーを設定する${gl_kjlan}2. ${gl_bai}ログインパスワードを変更する" echo -e "${gl_kjlan}3. ${gl_bai}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" - echo -e "${gl_kjlan}5. ${gl_bai}すべてのポートを開く${gl_kjlan}6. ${gl_bai}SSH接続ポートの変更" + 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}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}ユーザー/パスワード生成器" @@ -14032,7 +14126,7 @@ EOF 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません${gl_bai}" fi echo @@ -14274,7 +14368,7 @@ EOF echo "ワンストップのシステムチューニング" echo "------------------------------------------------" echo "以下のコンテンツを運用・最適化していきます" - echo "1. システムアップデートソースを最適化し、システムを最新にアップデートします。" + echo "1. システムアップデートソースを最適化し、システムを最新の状態にアップデートします。" echo "2. システムジャンクファイルをクリーンアップする" echo -e "3. 仮想メモリを設定する${gl_huang}1G${gl_bai}" echo -e "4. SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" @@ -14292,7 +14386,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングが始まります" + send_stats "ワンストップチューニングスタート" echo "------------------------------------------------" switch_mirror false false linux_update @@ -14567,7 +14661,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14587,7 +14681,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14726,7 +14820,7 @@ while true; do 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}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}" @@ -14830,7 +14924,7 @@ echo "------------------------" echo -e "${gl_lan}Laika Cloud 香港 CN2 GIA 韓国のデュアル ISP 米国 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_lan}RackNerd 年間 10.99 ドル、米国、1 コア、1G メモリ、20G ハードドライブ、月あたり 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: https://my.racknerd.com/aff.php?aff=5501&pid=879${gl_bai}" echo "------------------------" echo -e "${gl_zi}Hostinger 年間 $52.7 米国 1 コア 4G メモリ 50G ハードドライブ 月額 4T トラフィック${gl_bai}" @@ -14842,10 +14936,10 @@ echo "------------------------" echo -e "${gl_lan}DMIT 四半期あたり 28 ドル 米国 CN2GIA 1 コア 2G メモリ 20G ハード ドライブ 1 か月あたり 800G トラフィック${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額トラフィック 1T${gl_bai}" +echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS セール${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -14960,7 +15054,7 @@ while true; do fi echo "------------------------" - echo "1. 今すぐ更新します 2. 自動更新をオンにします 3. 自動更新をオフにします" + echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" echo "------------------------" echo "0. メインメニューに戻る" echo "------------------------" @@ -15090,8 +15184,8 @@ echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" echo "スクリプトkを開始します" echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" -echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | k nano wget をアンインストールする | nano wgetをアンインストールします" -echo "システム k 更新を更新します。 kアップデート" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" +echo "システム k アップデートを更新 | kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" @@ -15100,7 +15194,7 @@ echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" echo "システムごみ箱のゴミ箱 | k hz | k ごみ箱" echo "システムバックアップ機能 kバックアップ | k bf | k バックアップ" -echo "ssh リモート接続ツール k ssh | kリモート接続" +echo "ssh リモート接続ツール k ssh | k リモート接続" echo "rsync リモート同期ツール k rsync | k リモート同期" echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" echo "イントラネット普及率 (サーバー) k frps" @@ -15119,9 +15213,9 @@ echo "docker イメージ管理 k docker img |k docker image" echo "LDNMP サイト管理 k Web" echo "LDNMP キャッシュのクリーニング k Web キャッシュ" echo "WordPress をインストールします。 kワードプレス | k wp xxx.com" -echo "リバース プロキシ k fd |k rp |k リバース プロキシ |k fd xxx.com をインストールします。" +echo "リバース プロキシをインストールします k fd |k rp |k リバース プロキシ |k fd xxx.com" echo "ロード バランシングのインストール k ロード バランシング |k ロード バランシング" -echo "L4 ロード バランシングのインストール k ストリーム |k L4 ロード バランシング" +echo "L4 ロード バランシング k ストリーム |k L4 ロード バランシングをインストールする" echo "ファイアウォール パネル k fhq |k ファイアウォール" echo "ポートを開きます k dkdk 8080 |k ポートを開きます 8080" echo "ポート k gbdk 7800 を閉じる |k ポート 7800 を閉じる" @@ -15220,7 +15314,7 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "仮想メモリを素早く設定する" add_swap "$@" ;; @@ -15319,7 +15413,7 @@ else shift case $1 in install|安装) - send_stats "Dockerを素早くインストールする" + send_stats "Docker をすばやくインストールする" install_docker ;; ps|容器) @@ -15372,5 +15466,3 @@ else ;; esac fi - - diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 3801168a4..93e99c13b 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.10" +sh_v="4.3.0" gl_hui='\e[37m' @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기기 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. # send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -921,12 +921,12 @@ allow_ip() { # 허용 규칙 추가 if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "공개된 IP$ip" + echo "IP 공개$ip" fi done save_iptables_rules - send_stats "공개된 IP" + send_stats "IP 공개" } block_ip() { @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP를 삭제합니다." + echo "7. 지정된 IP 지우기" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1197,7 +1197,7 @@ iptables_panel() { ;; 17) - read -e -p "지워진 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code + read -e -p "삭제된 국가 코드를 입력하십시오(여러 국가 코드는 CN US JP와 같이 공백으로 구분될 수 있음)." country_code manage_country_rules unblock $country_code send_stats "명확한 국가$country_codeIP" ;; @@ -1259,7 +1259,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 생성해야 하는지 결정 +# 가상 메모리를 만들어야 하는지 결정 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1313,7 +1313,7 @@ install_ldnmp_conf() { 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 파일에서 교체 + # 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 @@ -1545,7 +1545,7 @@ certs_status() { echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." echo -e "1. 도메인 이름이 잘못 입력되었습니다. ➠ 도메인 이름이 올바르게 입력되었는지 확인하세요." echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인하세요." - echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하시기 바랍니다" + echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." @@ -2134,7 +2134,7 @@ web_security() { echo "------------------------" echo "11. 차단 매개변수 구성 12. 차단된 IP 모두 삭제" echo "------------------------" - echo "21. cloudflare 모드 22. 고부하에서 5초 보호 활성화" + echo "21. cloudflare 모드 22. 고부하에서 5초 쉴드 활성화" echo "------------------------" echo "31. WAF 켜기 32. WAF 끄기" echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" @@ -2248,7 +2248,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 실드가 열립니다. 부하가 낮으면 자동으로 5초 동안 쉴드를 닫습니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -2514,7 +2514,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker="${gl_hui}가 ${gl_bai}" 설치되지 않았습니다. +# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -2676,7 +2676,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2695,7 +2695,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 특정 IP를 허용하는 규칙 지우기 + # 지정된 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 @@ -2792,7 +2792,7 @@ clear_host_port_rules() { install iptables - # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi @@ -2808,7 +2808,7 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -3325,7 +3325,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" echo "$webname설치정보는 다음과 같습니다." @@ -3338,7 +3338,7 @@ nginx_web_on() { local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf @@ -3412,7 +3412,7 @@ ldnmp_Proxy() { check_ip_and_get_access_port "$yuming" if [ -z "$reverseproxy" ]; then - read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3676,7 +3676,7 @@ ldnmp_Proxy_backend_stream() { docker exec nginx nginx -s reload clear - echo "당신의$webname건설되었습니다!" + echo "당신의$webname지어졌습니다!" echo "------------------------" echo "방문 주소:" ip_address @@ -4054,7 +4054,7 @@ add_forwarding_service() { send_stats "FRP 인트라넷 서비스 추가" # 사용자에게 서비스 이름 및 전달 정보를 묻는 메시지를 표시합니다. read -e -p "서비스 이름을 입력하세요:" service_name - read -e -p "전달 유형(tcp/udp)을 입력하십시오. [기본값을 tcp로 입력]:" service_type + read -e -p "전달 유형(tcp/udp)을 입력하십시오. [tcp를 기본값으로 설정하려면 Enter를 누르십시오]:" service_type local service_type=${service_type:-tcp} read -e -p "인트라넷 IP를 입력하십시오. [Enter를 누르면 기본값은 127.0.0.1입니다]:" local_ip local local_ip=${local_ip:-127.0.0.1} @@ -4919,6 +4919,7 @@ dd_xitong() { dd_xitong_1() { echo -e "재설치 후 초기 사용자 이름:${gl_huang}root${gl_bai}초기 비밀번호:${gl_huang}LeitboGi0ro${gl_bai}초기 포트:${gl_huang}22${gl_bai}" + echo -e "${gl_huang}재설치 후에는 초기 비밀번호를 적시에 변경하여 폭력적인 침입을 방지하시기 바랍니다. 비밀번호를 변경하려면 명령줄에 passwd를 입력하세요.${gl_bai}" echo -e "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install wget @@ -4952,7 +4953,9 @@ dd_xitong() { echo "시스템 재설치" echo "--------------------------------" echo -e "${gl_hong}알아채다:${gl_bai}재설치 시 연결이 끊어질 수 있으니 걱정되시는 분들은 주의해서 사용해주세요. 재설치에는 약 15분 정도 소요될 예정이오니, 사전에 데이터를 백업해 주시기 바랍니다." - echo -e "${gl_hui}스크립트를 지원해주신 leitbogioro 보스와 bin456789 보스에게 감사드립니다!${gl_bai} " + echo -e "${gl_hui}스크립트 지원을 해주신 bin456789 보스와 leitbogioro 보스에게 감사드립니다!${gl_bai} " + echo -e "${gl_hui}bin456789 프로젝트 주소: https://github.com/bin456789/reinstall${gl_bai}" + echo -e "${gl_hui}leitbogioro 프로젝트 주소: https://github.com/leitbogioro/Tools${gl_bai}" echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -5276,7 +5279,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod 커널이 업데이트되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -5286,7 +5289,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod 커널이 제거되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" server_reboot ;; @@ -5303,7 +5306,7 @@ bbrv3() { echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "데비안/우분투만 지원" - echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화해 드리겠습니다." + echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5340,7 +5343,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -5429,7 +5432,7 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo 커널이 제거되었습니다. 다시 시작한 후 적용" + echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" send_stats "Red Hat 커널 제거" server_reboot @@ -5447,7 +5450,7 @@ elrepo() { echo "영상 소개: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" echo "------------------------------------------------" echo "Red Hat 시리즈 배포판 CentOS/RedHat/Alma/Rocky/oracle만 지원" - echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경도 주의해서 업그레이드하시는 것을 추천드립니다!" + echo "Linux 커널을 업그레이드하면 시스템 성능과 보안이 향상될 수 있습니다. 가능하다면 시도해 보시고, 프로덕션 환경을 주의해서 업그레이드하시는 것을 추천드립니다!" echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5483,7 +5486,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5989,7 +5992,7 @@ linux_trash() { clear echo -e "현재 휴지통${trash_status}" - echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 저장됩니다!" + echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 들어갑니다!" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "휴지통이 비어 있습니다." echo "------------------------" @@ -6225,14 +6228,14 @@ add_connection() { echo # 换行 ;; 2) - echo "주요 내용을 붙여넣으세요(붙여넣은 후 Enter를 두 번 누르세요)." + echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -6510,7 +6513,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6573,14 +6576,14 @@ add_task() { auth_method="password" ;; 2) - echo "주요 내용을 붙여넣으세요(붙여넣은 후 Enter를 두 번 누르세요)." + echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." 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 @@ -6717,7 +6720,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근할 수 있나요?" + echo "2. 원격 호스트에 접근 가능한지 여부" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -7266,7 +7269,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Docker 컨테이너 백업 중...${NC}" docker ps --format '{{.Names}}' - read -e -p "백업할 컨테이너의 이름을 입력하십시오(여러 개의 공백을 구분하고 Enter를 눌러 실행 중인 모든 컨테이너를 백업하십시오)." containers + read -e -p "백업할 컨테이너의 이름을 입력하십시오(실행 중인 모든 컨테이너를 백업하려면 여러 개의 공백을 구분하고 Enter 키를 누르십시오)." containers install tar jq gzip install_docker @@ -7308,7 +7311,7 @@ docker_ssh_migration() { # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 건너뛰세요...${NC}" continue fi @@ -7421,7 +7424,7 @@ docker_ssh_migration() { [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리용기:$container${NC}" + echo -e "${GREEN}처리 용기:$container${NC}" # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then @@ -7495,7 +7498,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "도커 마이그레이션" install jq - read -e -p "마이그레이션할 백업 디렉터리를 입력하십시오:" BACKUP_DIR + read -e -p "마이그레이션할 백업 디렉터리를 입력하세요." BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } read -e -p "대상 서버 IP:" TARGET_IP @@ -7694,7 +7697,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -8055,7 +8058,7 @@ linux_Oracle() { 1) clear echo "활성 스크립트: CPU 사용량 10-20% 메모리 사용량 20%" - read -e -p "설치하시겠습니까? (예/아니요):" choice + read -e -p "정말로 설치하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -8440,7 +8443,7 @@ linux_ldnmp() { echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "" - echo "레디스 주소 : 레디스" + echo "레디스 주소: 레디스" echo "redis 비밀번호: 기본적으로 입력되지 않음" echo "레디스 포트: 6379" echo "" @@ -8450,7 +8453,7 @@ linux_ldnmp() { echo "사용자 이름: 관리자" echo "비밀번호: 관리자" echo "------------------------" - echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용하시기 바랍니다." + echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용해주세요." echo "유니콘 숫자카드가 왜 이렇게 귀찮고 이런 문제가 있는지에 대해서도 너무 화가 납니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -8779,7 +8782,7 @@ linux_ldnmp() { echo "배포 시작$webname" add_yuming echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" - read -e -p "역방향 프록시 도메인 이름을 입력하세요:" fandai_yuming + read -e -p "역방향 프록시 도메인 이름을 입력하세요." fandai_yuming nginx_install_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-domain.conf @@ -9234,16 +9237,24 @@ linux_ldnmp() { linux_panel() { - local sub_choice="$1" +clear +cd ~ +install git +if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git +else + cd apps + git pull origin main > /dev/null 2>&1 +fi while true; do if [ -z "$sub_choice" ]; then clear echo -e "응용 시장" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") @@ -9261,69 +9272,79 @@ while true; do echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}11. ${color11}ZenTao 프로젝트 관리 소프트웨어${gl_kjlan}12. ${color12}Qinglong 패널 예정된 작업 관리 플랫폼" echo -e "${gl_kjlan}13. ${color13}Cloudreve 네트워크 디스크${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}간단한 그림 침대 그림 관리 프로그램" echo -e "${gl_kjlan}15. ${color15}emby 멀티미디어 관리 시스템${gl_kjlan}16. ${color16}Speedtest 속도 테스트 패널" echo -e "${gl_kjlan}17. ${color17}AdGuardHome은 애드웨어를 제거합니다${gl_kjlan}18. ${color18}onlyoffice온라인 오피스 OFFICE" echo -e "${gl_kjlan}19. ${color19}Leichi WAF 방화벽 패널${gl_kjlan}20. ${color20}포테이너 컨테이너 관리 패널" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}21. ${color21}VScode 웹 버전${gl_kjlan}22. ${color22}UptimeKuma 모니터링 도구" echo -e "${gl_kjlan}23. ${color23}메모 웹 메모${gl_kjlan}24. ${color24}Webtop 원격 데스크톱 웹 버전${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud 네트워크 디스크${gl_kjlan}26. ${color26}QD-오늘 예약된 작업 관리 프레임워크" echo -e "${gl_kjlan}27. ${color27}Dockge 컨테이너 스택 관리 패널${gl_kjlan}28. ${color28}LibreSpeed ​​​​속도 테스트 도구" echo -e "${gl_kjlan}29. ${color29}searxng 집계 검색 스테이션${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism 개인 앨범 시스템" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF 도구 모음${gl_kjlan}32. ${color32}drawio 무료 온라인 차트 작성 소프트웨어${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun 패널 탐색 패널${gl_kjlan}34. ${color34}Pingvin-Share 파일 공유 플랫폼" echo -e "${gl_kjlan}35. ${color35}미니멀리스트 친구들${gl_kjlan}36. ${color36}LobeChatAI 채팅 집계 웹사이트" echo -e "${gl_kjlan}37. ${color37}MyIP 도구 상자${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}Xiaoya alist 가족 버킷" echo -e "${gl_kjlan}39. ${color39}Bililive 라이브 방송 녹음 도구${gl_kjlan}40. ${color40}webssh 웹 버전 SSH 연결 도구" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}41. ${color41}마우스 관리 패널${gl_kjlan}42. ${color42}Nexterm 원격 연결 도구" echo -e "${gl_kjlan}43. ${color43}RustDesk 원격 데스크톱(서버)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk 원격 데스크톱(릴레이)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}도커 가속 스테이션${gl_kjlan}46. ${color46}GitHub 가속 스테이션${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}프로메테우스 모니터링${gl_kjlan}48. ${color48}프로메테우스(호스트 모니터링)" echo -e "${gl_kjlan}49. ${color49}프로메테우스(컨테이너 모니터링)${gl_kjlan}50. ${color50}보충 모니터링 도구" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}51. ${color51}PVE 오픈 병아리 패널${gl_kjlan}52. ${color52}DPanel 컨테이너 관리 패널" echo -e "${gl_kjlan}53. ${color53}라마3 채팅 AI 대형 모델${gl_kjlan}54. ${color54}AMH 호스트 웹사이트 구축 관리 패널" echo -e "${gl_kjlan}55. ${color55}FRP 인트라넷 침투(서버)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP 인트라넷 침투(클라이언트)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek 채팅 AI 대형 모델${gl_kjlan}58. ${color58}대규모 모델 지식 기반 확장${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI 대형 모델 자산 관리${gl_kjlan}60. ${color60}JumpServer 오픈 소스 요새 머신" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}61. ${color61}온라인 번역 서버${gl_kjlan}62. ${color62}RAGFlow 대규모 모델 지식 기반" echo -e "${gl_kjlan}63. ${color63}OpenWebUI 자체 호스팅 AI 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools 도구 상자" echo -e "${gl_kjlan}65. ${color65}n8n 자동화된 워크플로우 플랫폼${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp 비디오 다운로드 도구" echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}AstrBot 챗봇 프레임워크" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워드 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 마법사${gl_kjlan}76. ${color76}온라인 DOS 오래된 게임" echo -e "${gl_kjlan}77. ${color77}Thunder 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" echo -e "${gl_kjlan}79. ${color79}베젤 서버 모니터링${gl_kjlan}80. ${color80}링크워든 북마크 관리" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet 화상 회의${gl_kjlan}82. ${color82}gpt-load 고성능 AI 투명 프록시" echo -e "${gl_kjlan}83. ${color83}코마리 서버 모니터링 도구${gl_kjlan}84. ${color84}Wallos 개인 재무 관리 도구" echo -e "${gl_kjlan}85. ${color85}이미치 픽처 비디오 매니저${gl_kjlan}86. ${color86}젤리핀 미디어 관리 시스템" echo -e "${gl_kjlan}87. ${color87}SyncTV는 함께 영화를 볼 수 있는 훌륭한 도구입니다${gl_kjlan}88. ${color88}Owncast 자체 호스팅 라이브 스트리밍 플랫폼" echo -e "${gl_kjlan}89. ${color89}FileCodeBox 파일 익스프레스${gl_kjlan}90. ${color90}매트릭스 분산형 채팅 프로토콜" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}91. ${color91}gitea 비공개 코드 저장소${gl_kjlan}92. ${color92}FileBrowser 파일 관리자" echo -e "${gl_kjlan}93. ${color93}Dufs 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}Gopeed 고속 다운로드 도구" echo -e "${gl_kjlan}95. ${color95}종이 없는 문서 관리 플랫폼${gl_kjlan}96. ${color96}2FAuth 자체 호스팅 2단계 인증자" echo -e "${gl_kjlan}97. ${color97}WireGuard 네트워킹(서버)${gl_kjlan}98. ${color98}WireGuard 네트워킹(클라이언트)" echo -e "${gl_kjlan}99. ${color99}DSM Synology 가상 컴퓨터${gl_kjlan}100. ${color100}P2P 파일 동기화 도구 동기화" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" - echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}111. ${color111}다중 형식 파일 변환 도구" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}111. ${color111}다중 형식 파일 변환 도구${gl_kjlan}112. ${color112}행운의 대형 인트라넷 침투 도구" + echo -e "${gl_kjlan}113. ${color113}파이어폭스 브라우저" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}타사 애플리케이션 목록" + echo -e "${gl_kjlan}귀하의 앱이 여기에 표시되기를 원하십니까? 개발자 가이드를 확인하세요.${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do + [ -e "$f" ] || continue + local base_name=$(basename "$f" .conf) + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + done + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}메인 메뉴로 돌아가기" @@ -9515,7 +9536,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9524,7 +9545,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "네자 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9935,7 +9956,7 @@ while true; do } - local docker_describe="Speedtest 속도 측정 패널은 다양한 테스트 기능을 갖춘 VPS 네트워크 속도 테스트 도구이며 VPS 인바운드 및 아웃바운드 트래픽을 실시간으로 모니터링할 수도 있습니다." + local docker_describe="Speedtest 속도 테스트 패널은 다양한 테스트 기능을 갖춘 VPS 네트워크 속도 테스트 도구이며 VPS 인바운드 및 아웃바운드 트래픽을 실시간으로 모니터링할 수도 있습니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" @@ -10370,7 +10391,7 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 Docker를 사용하여 로컬로 호스팅되는 강력한 웹 기반 PDF 조작 도구입니다." + local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 docker를 사용하는 강력한 로컬 호스팅 웹 기반 PDF 조작 도구입니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" @@ -10546,7 +10567,7 @@ while true; do } - local docker_describe="Bililive-go는 다양한 라이브 방송 플랫폼을 지원하는 라이브 방송 녹음 도구입니다." + local docker_describe="Bililive-go는 다양한 라이브 방송 플랫폼을 지원하는 라이브 방송 녹화 도구입니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/hr3lxphr6j/bililive-go" local docker_use="" local docker_passwd="" @@ -10874,7 +10895,7 @@ while true; do } - local docker_describe="OpenWebUI는 새로운 llama3 대규모 언어 모델에 연결된 대규모 언어 모델 웹 페이지 프레임워크입니다." + 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="" @@ -11312,7 +11333,7 @@ while true; do } - local docker_describe="대규모 AI 모델에 대한 WeChat, QQ 및 TG 액세스를 지원하는 오픈 소스 AI 챗봇 프레임워크" + local docker_describe="AI 대형 모델에 대한 WeChat, QQ 및 TG 액세스를 지원하는 오픈 소스 AI 챗봇 프레임워크" local docker_url="공식 홈페이지 소개: https://astrbot.app/" local docker_use="echo \"사용자 이름: astrbot 비밀번호: astrbot\"" local docker_passwd="" @@ -11368,7 +11389,7 @@ while true; do } - local docker_describe="귀하의 데이터를 통제할 수 있는 비밀번호 관리자" + local docker_describe="데이터를 제어할 수 있는 비밀번호 관리자" local docker_url="공식 홈페이지 소개: https://bitwarden.com/" local docker_use="" local docker_passwd="" @@ -11546,7 +11567,7 @@ while true; do local docker_describe="오프라인 고속 BT 자기 다운로드 도구인 Xunlei" local docker_url="공식 홈페이지 소개: https://github.com/cnk3x/xunlei" - local docker_use="echo \"휴대폰으로 Xunlei에 로그인한 후 초대 코드를 입력하세요. 초대 코드: Xunlei Niutong\"" + local docker_use="echo \"휴대폰으로 Xunlei에 로그인하고 초대 코드를 입력하세요. 초대 코드: Xunlei Niutong\"" local docker_passwd="" local app_size="1" docker_app @@ -11927,7 +11948,7 @@ while true; do local docker_describe="영화와 생방송을 원격으로 함께 시청할 수 있는 프로그램입니다. 동시 시청, 라이브 방송, 채팅 및 기타 기능을 제공합니다." local docker_url="공식 홈페이지 소개: https://github.com/synctv-org/synctv" - local docker_use="echo \"초기 계정 및 비밀번호: root. 로그인 후 시간에 맞춰 로그인 비밀번호를 변경하세요\"" + local docker_use="echo \"초기 계정 및 비밀번호: root. 로그인 후 적시에 로그인 비밀번호를 변경하세요\"" local docker_passwd="" local app_size="1" docker_app @@ -11984,7 +12005,7 @@ while true; do } - local docker_describe="익명의 비밀번호로 텍스트와 파일을 공유하고, 빠른 배송과 같은 파일 픽업" + local docker_describe="익명의 비밀번호로 텍스트와 파일을 공유하고 빠른 배송과 같은 파일 픽업" local docker_url="공식 홈페이지 소개: https://github.com/vastsa/FileCodeBox" local docker_use="echo \"접속 주소 뒤에는 /#/admin이 붙어서 관리자 페이지에 접속합니다\"" local docker_passwd="echo \"관리자 비밀번호: FileCodeBox2023\"" @@ -12057,7 +12078,7 @@ while true; do local app_name="gitea 비공개 코드 저장소" local app_text="GitHub에 가까운 경험을 제공하는 무료 차세대 코드 호스팅 플랫폼입니다." - local app_url="영상 소개: https://github.com/go-gitea/gitea" + local app_url="영상소개 : https://github.com/go-gitea/gitea" local docker_name="gitea" local docker_port="8091" local app_size="2" @@ -12241,7 +12262,7 @@ while true; do local app_id="96" local app_name="2FAuth 자체 호스팅 2단계 인증자" - local app_text="자체 호스팅 2단계 인증(2FA) 계정 관리 및 확인 코드 생성 도구입니다." + local app_text="자체 호스팅 2FA(2단계 인증) 계정 관리 및 확인 코드 생성 도구입니다." local app_url="공식 홈페이지: https://github.com/Bubka/2FAuth" local docker_name="2fauth" local docker_port="8096" @@ -12471,7 +12492,7 @@ while true; do local app_id="99" - local app_name="dsm Synology 가상 머신" + local app_name="dsm 시놀로지 가상 머신" local app_text="Docker 컨테이너의 가상 DSM" local app_url="공식 웹사이트: https://github.com/vdsm/virtual-dsm" local docker_name="dsm" @@ -12556,7 +12577,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI 영상 생성 도구" - local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 단편 동영상을 합성하는 도구입니다." + local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 짧은 동영상을 합성하는 도구입니다." local app_url="공식 웹사이트: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12899,7 +12920,66 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 112|lucky) + local app_id="112" + local docker_name="lucky" + local docker_img="gdy666/lucky:v2" + # Lucky는 호스트 네트워크 모드를 사용하므로 여기서 포트는 기록/설명 참조용으로만 사용되며 실제로는 애플리케이션 자체에 의해 제어됩니다(기본값 16601). + local docker_port=8112 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + --network host \ + -v /home/docker/lucky/conf:/app/conf \ + -v /var/run/docker.sock:/var/run/docker.sock \ + ${docker_img} + + echo "Lucky가 초기화되기를 기다리는 중..." + sleep 10 + docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} + + } + + local docker_describe="Lucky는 DDNS, 역방향 프록시, WOL 및 기타 기능을 지원하는 대규모 인트라넷 침투 및 포트 전달 관리 도구입니다." + local docker_url="프로젝트 주소: https://github.com/gdy666/lucky" + local docker_use="echo \"기본 계정 비밀번호: 666\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 113|firefox) + + local app_id="113" + local docker_name="firefox" + local docker_img="jlesage/firefox:latest" + local docker_port=8113 + + docker_rum() { + + read -e -p "로그인 비밀번호 설정:" admin_password + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:5800 \ + -v /home/docker/firefox:/config:rw \ + -e ENABLE_CJK_FONT=1 \ + -e WEB_AUDIO=1 \ + -e VNC_PASSWORD="${admin_password}" \ + ${docker_img} + } + + local docker_describe="웹 페이지를 통해 데스크톱 브라우저 인터페이스에 대한 직접 액세스를 지원하는 Docker에서 실행되는 Firefox 브라우저입니다." + local docker_url="프로젝트 주소: https://github.com/jlesage/docker-firefox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) @@ -12973,11 +13053,24 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; - 0) kejilion ;; *) + cd ~ + install git + if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git + else + cd apps + git pull origin main > /dev/null 2>&1 + fi + local custom_app="$HOME/apps/${sub_choice}.conf" + if [ -f "$custom_app" ]; then + . "$custom_app" + else + echo -e "${gl_hong}오류: 번호가 없습니다.${sub_choice}애플리케이션 구성${gl_bai}" + fi ;; esac break_end @@ -12987,6 +13080,7 @@ done } + linux_work() { while true; do @@ -13010,7 +13104,7 @@ linux_work() { 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}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}작업공간 생성/입력" @@ -13279,10 +13373,10 @@ linux_Settings() { 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}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" + echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 Python 버전을 설치합니다." 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}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}사용자/비밀번호 생성기" @@ -13292,7 +13386,7 @@ linux_Settings() { 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}ROOT 개인 키 로그인 모드" - echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" + echo -e "${gl_kjlan}25. ${gl_bai}TG-bot 시스템 모니터링 및 조기 경보${gl_kjlan}26. ${gl_bai}OpenSSH 고위험 취약점 수정" echo -e "${gl_kjlan}27. ${gl_bai}Red Hat Linux 커널 업그레이드${gl_kjlan}28. ${gl_bai}Linux 시스템 커널 매개변수 최적화${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}29. ${gl_bai}바이러스 검사 도구${gl_huang}★${gl_bai} ${gl_kjlan}30. ${gl_bai}파일 관리자" echo -e "${gl_kjlan}------------------------" @@ -13346,7 +13440,7 @@ linux_Settings() { echo "파이썬 버전 관리" echo "영상 소개: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "이 기능은 Python에서 공식적으로 지원하는 모든 버전을 원활하게 설치할 수 있습니다!" + echo "이 기능은 Python이 공식적으로 지원하는 모든 버전을 원활하게 설치할 수 있습니다!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "현재 Python 버전 번호:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13579,7 +13673,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다." + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; @@ -14032,7 +14126,7 @@ EOF 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}" + echo -e "${gl_hui}현재 제한 종료 기능이 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -14053,7 +14147,7 @@ EOF rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "아웃바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." tx_threshold_gb tx_threshold_gb=${tx_threshold_gb:-100} - read -e -p "트래픽 재설정 날짜를 입력하세요(기본적으로 매월 1일에 재설정됨)." cz_day + read -e -p "트래픽 재설정 날짜를 입력하세요(기본적으로 매월 1일 재설정)." cz_day cz_day=${cz_day:-1} cd ~ @@ -14138,7 +14232,7 @@ EOF root_use send_stats "전신 경고" echo "TG-bot 모니터링 및 조기경보 기능" - echo "영상소개: https://youtu.be/vLL-eb3Z_TY" + echo "영상 소개: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" echo "로컬 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인에 대한 실시간 모니터링 및 경고를 달성하려면 경고를 수신하도록 tg 로봇 API 및 사용자 ID를 구성해야 합니다." echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." @@ -14292,7 +14386,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "원스톱 튜닝 시작" + send_stats "원스톱 튜닝이 시작되었습니다" echo "------------------------------------------------" switch_mirror false false linux_update @@ -14842,10 +14936,10 @@ echo "------------------------" echo -e "${gl_lan}DMIT 분기당 $28 US CN2GIA 1 코어 2G 메모리 20G 하드 드라이브 월별 800G 트래픽${gl_bai}" echo -e "${gl_bai}URL: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" echo "------------------------" -echo -e "${gl_zi}V.PS 월 6.9달러 Tokyo Softbank 2코어 1G 메모리 20G 하드 드라이브 월 1T 트래픽${gl_bai}" +echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 거래${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15089,7 +15183,7 @@ echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." echo "시작 스크립트 k" -echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 나노 wget을 설치합니다." +echo "패키지 설치 k install nano wget | k 나노 wget 추가 | k는 nano wget을 설치합니다." echo "패키지 제거 k 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" echo "시스템 k 업데이트 업데이트 | k 업데이트" echo "클린 시스템 정크 k 클린 | 케이 깨끗하다" @@ -15118,17 +15212,17 @@ echo "도커 컨테이너 관리 k 도커 ps |k 도커 컨테이너" echo "도커 이미지 관리 k docker img |k 도커 이미지" echo "LDNMP 사이트 관리 k web" echo "LDNMP 캐시 정리 k 웹 캐시" -echo "WordPress k wp 설치 | k 워드프레스 | kwp xxx.com" +echo "WordPress k wp 설치 | k 워드프레스 | k wp xxx.com" echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "L4 로드 밸런싱 설치 k 스트림 |k L4 로드 밸런싱" echo "방화벽 패널 k fhq |k 방화벽" -echo "포트 k 열기 ddk 8080 |k 포트 8080 열기" +echo "포트 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 "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" +echo "애플리케이션 시장관리 kapp" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "Fail2ban 관리 k Fail2ban | 케이 F2B" echo "시스템 정보 표시 k 정보" @@ -15372,5 +15466,3 @@ else ;; esac fi - - diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 116a47b13..fee310e9d 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.2.10" +sh_v="4.3.0" gl_hui='\e[37m' @@ -4919,6 +4919,7 @@ dd_xitong() { dd_xitong_1() { echo -e "重裝後初始用戶名:${gl_huang}root${gl_bai}初始密碼:${gl_huang}LeitboGi0ro${gl_bai}初始端口:${gl_huang}22${gl_bai}" + echo -e "${gl_huang}重裝後請及時修改初始密碼,防止暴力入侵。命令行輸入passwd修改密碼${gl_bai}" echo -e "按任意鍵繼續..." read -n 1 -s -r -p "" install wget @@ -4952,7 +4953,9 @@ dd_xitong() { echo "重裝系統" echo "--------------------------------" echo -e "${gl_hong}注意:${gl_bai}重裝有風險失聯,不放心者慎用。重裝預計花費15分鐘,請提前備份數據。" - echo -e "${gl_hui}感謝leitbogioro大佬和bin456789大佬的腳本支持!${gl_bai} " + echo -e "${gl_hui}感謝bin456789大佬和leitbogioro大佬的腳本支持!${gl_bai} " + echo -e "${gl_hui}bin456789項目地址: https://github.com/bin456789/reinstall${gl_bai}" + echo -e "${gl_hui}leitbogioro項目地址: https://github.com/leitbogioro/Tools${gl_bai}" echo "------------------------" echo "1. Debian 13 2. Debian 12" echo "3. Debian 11 4. Debian 10" @@ -9234,16 +9237,24 @@ linux_ldnmp() { linux_panel() { - local sub_choice="$1" +clear +cd ~ +install git +if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git +else + cd apps + git pull origin main > /dev/null 2>&1 +fi while true; do if [ -z "$sub_choice" ]; then clear echo -e "應用市場" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" local app_numbers=$([ -f /home/docker/appno.txt ] && cat /home/docker/appno.txt || echo "") @@ -9261,69 +9272,79 @@ while true; do echo -e "${gl_kjlan}5. ${color5}OpenList多存儲文件列表程序${gl_kjlan}6. ${color6}Ubuntu遠程桌面網頁版" echo -e "${gl_kjlan}7. ${color7}哪吒探針VPS監控面板${gl_kjlan}8. ${color8}QB離線BT磁力下載面板" echo -e "${gl_kjlan}9. ${color9}Poste.io郵件服務器程序${gl_kjlan}10. ${color10}RocketChat多人在線聊天系統" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}11. ${color11}禪道項目管理軟件${gl_kjlan}12. ${color12}青龍面板定時任務管理平台" echo -e "${gl_kjlan}13. ${color13}Cloudreve網盤${gl_huang}★${gl_bai} ${gl_kjlan}14. ${color14}簡單圖床圖片管理程序" echo -e "${gl_kjlan}15. ${color15}emby多媒體管理系統${gl_kjlan}16. ${color16}Speedtest測速面板" echo -e "${gl_kjlan}17. ${color17}AdGuardHome去廣告軟件${gl_kjlan}18. ${color18}onlyoffice在線辦公OFFICE" echo -e "${gl_kjlan}19. ${color19}雷池WAF防火牆面板${gl_kjlan}20. ${color20}portainer容器管理面板" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}21. ${color21}VScode網頁版${gl_kjlan}22. ${color22}UptimeKuma監控工具" echo -e "${gl_kjlan}23. ${color23}Memos網頁備忘錄${gl_kjlan}24. ${color24}Webtop遠程桌面網頁版${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}25. ${color25}Nextcloud網盤${gl_kjlan}26. ${color26}QD-Today定時任務管理框架" echo -e "${gl_kjlan}27. ${color27}Dockge容器堆棧管理面板${gl_kjlan}28. ${color28}LibreSpeed測速工具" echo -e "${gl_kjlan}29. ${color29}searxng聚合搜索站${gl_huang}★${gl_bai} ${gl_kjlan}30. ${color30}PhotoPrism私有相冊系統" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}31. ${color31}StirlingPDF工具大全${gl_kjlan}32. ${color32}drawio免費的在線圖表軟件${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}33. ${color33}Sun-Panel導航面板${gl_kjlan}34. ${color34}Pingvin-Share文件分享平台" echo -e "${gl_kjlan}35. ${color35}極簡朋友圈${gl_kjlan}36. ${color36}LobeChatAI聊天聚合網站" echo -e "${gl_kjlan}37. ${color37}MyIP工具箱${gl_huang}★${gl_bai} ${gl_kjlan}38. ${color38}小雅alist全家桶" echo -e "${gl_kjlan}39. ${color39}Bililive直播錄製工具${gl_kjlan}40. ${color40}webssh網頁版SSH連接工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}41. ${color41}耗子管理面板${gl_kjlan}42. ${color42}Nexterm遠程連接工具" echo -e "${gl_kjlan}43. ${color43}RustDesk遠程桌面(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}44. ${color44}RustDesk遠程桌面(中繼端)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}45. ${color45}Docker加速站${gl_kjlan}46. ${color46}GitHub加速站${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}47. ${color47}普羅米修斯監控${gl_kjlan}48. ${color48}普羅米修斯(主機監控)" echo -e "${gl_kjlan}49. ${color49}普羅米修斯(容器監控)${gl_kjlan}50. ${color50}補貨監控工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}51. ${color51}PVE開小雞面板${gl_kjlan}52. ${color52}DPanel容器管理面板" echo -e "${gl_kjlan}53. ${color53}llama3聊天AI大模型${gl_kjlan}54. ${color54}AMH主機建站管理面板" echo -e "${gl_kjlan}55. ${color55}FRP內網穿透(服務端)${gl_huang}★${gl_bai} ${gl_kjlan}56. ${color56}FRP內網穿透(客戶端)${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}57. ${color57}Deepseek聊天AI大模型${gl_kjlan}58. ${color58}Dify大模型知識庫${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}59. ${color59}NewAPI大模型資產管理${gl_kjlan}60. ${color60}JumpServer開源堡壘機" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}61. ${color61}在線翻譯服務器${gl_kjlan}62. ${color62}RAGFlow大模型知識庫" echo -e "${gl_kjlan}63. ${color63}OpenWebUI自託管AI平台${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools工具箱" echo -e "${gl_kjlan}65. ${color65}n8n自動化工作流平台${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp視頻下載工具" echo -e "${gl_kjlan}67. ${color67}ddns-go動態DNS管理工具${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL證書管理平台" echo -e "${gl_kjlan}69. ${color69}SFTPGo文件傳輸工具${gl_kjlan}70. ${color70}AstrBot聊天機器人框架" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome私有音樂服務器${gl_kjlan}72. ${color72}bitwarden密碼管理器${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV私有影視${gl_kjlan}74. ${color74}MoonTV私有影視" echo -e "${gl_kjlan}75. ${color75}Melody音樂精靈${gl_kjlan}76. ${color76}在線DOS老遊戲" echo -e "${gl_kjlan}77. ${color77}迅雷離線下載工具${gl_kjlan}78. ${color78}PandaWiki智能文檔管理系統" echo -e "${gl_kjlan}79. ${color79}Beszel服務器監控${gl_kjlan}80. ${color80}linkwarden書籤管理" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet視頻會議${gl_kjlan}82. ${color82}gpt-load高性能AI透明代理" echo -e "${gl_kjlan}83. ${color83}komari服務器監控工具${gl_kjlan}84. ${color84}Wallos個人財務管理工具" echo -e "${gl_kjlan}85. ${color85}immich圖片視頻管理器${gl_kjlan}86. ${color86}jellyfin媒體管理系統" echo -e "${gl_kjlan}87. ${color87}SyncTV一起看片神器${gl_kjlan}88. ${color88}Owncast自託管直播平台" echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快遞${gl_kjlan}90. ${color90}matrix去中心化聊天協議" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}91. ${color91}gitea私有代碼倉庫${gl_kjlan}92. ${color92}FileBrowser文件管理器" echo -e "${gl_kjlan}93. ${color93}Dufs極簡靜態文件服務器${gl_kjlan}94. ${color94}Gopeed高速下載工具" echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台${gl_kjlan}96. ${color96}2FAuth自託管二步驗證器" echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)" echo -e "${gl_kjlan}99. ${color99}DSM群暉虛擬機${gl_kjlan}100. ${color100}Syncthing點對點文件同步工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI視頻生成工具${gl_kjlan}102. ${color102}VoceChat多人在線聊天系統" echo -e "${gl_kjlan}103. ${color103}Umami網站統計工具${gl_kjlan}104. ${color104}Stream四層代理轉發工具" echo -e "${gl_kjlan}105. ${color105}思源筆記${gl_kjlan}106. ${color106}Drawnix開源白板工具" echo -e "${gl_kjlan}107. ${color107}PanSou網盤搜索${gl_kjlan}108. ${color108}LangBot聊天機器人" echo -e "${gl_kjlan}109. ${color109}ZFile在線網盤${gl_kjlan}110. ${color110}Karakeep書籤管理" - echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}111. ${color111}多格式文件轉換工具" - echo -e "${gl_kjlan}------------------------" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}111. ${color111}多格式文件轉換工具${gl_kjlan}112. ${color112}Lucky大內網穿透工具" + echo -e "${gl_kjlan}113. ${color113}Firefox瀏覽器" + echo -e "${gl_kjlan}-------------------------" + echo -e "${gl_kjlan}第三方應用列表" + echo -e "${gl_kjlan}想要讓你的應用出現在這裡?查看開發者指南:${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do + [ -e "$f" ] || continue + local base_name=$(basename "$f" .conf) + local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + done + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}0. ${gl_bai}返回主菜單" @@ -12899,7 +12920,66 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; + 112|lucky) + local app_id="112" + local docker_name="lucky" + local docker_img="gdy666/lucky:v2" + # 由於 Lucky 使用 host 網絡模式,這裡的端口僅作記錄/說明參考,實際由應用自身控制(默認16601) + local docker_port=8112 + + docker_rum() { + + docker run -d --name=${docker_name} --restart=always \ + --network host \ + -v /home/docker/lucky/conf:/app/conf \ + -v /var/run/docker.sock:/var/run/docker.sock \ + ${docker_img} + + echo "正在等待 Lucky 初始化..." + sleep 10 + docker exec lucky /app/lucky -rSetHttpAdminPort ${docker_port} + + } + + local docker_describe="Lucky 是一個大內網穿透及端口轉發管理工具,支持 DDNS、反向代理、WOL 等功能。" + local docker_url="項目地址: https://github.com/gdy666/lucky" + local docker_use="echo \"默認賬號密碼: 666\"" + local docker_passwd="" + local app_size="1" + docker_app + + ;; + + + 113|firefox) + + local app_id="113" + local docker_name="firefox" + local docker_img="jlesage/firefox:latest" + local docker_port=8113 + + docker_rum() { + + read -e -p "設置登錄密碼:" admin_password + + docker run -d --name=${docker_name} --restart=always \ + -p ${docker_port}:5800 \ + -v /home/docker/firefox:/config:rw \ + -e ENABLE_CJK_FONT=1 \ + -e WEB_AUDIO=1 \ + -e VNC_PASSWORD="${admin_password}" \ + ${docker_img} + } + + local docker_describe="是一個運行在 Docker 中的 Firefox 瀏覽器,支持通過網頁直接訪問桌面版瀏覽器界面。" + local docker_url="項目地址: https://github.com/jlesage/docker-firefox" + local docker_use="" + local docker_passwd="" + local app_size="1" + docker_app + + ;; b) @@ -12973,11 +13053,24 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ;; - 0) kejilion ;; *) + cd ~ + install git + if [ ! -d apps/.git ]; then + git clone https://github.com/kejilion/apps.git + else + cd apps + git pull origin main > /dev/null 2>&1 + fi + local custom_app="$HOME/apps/${sub_choice}.conf" + if [ -f "$custom_app" ]; then + . "$custom_app" + else + echo -e "${gl_hong}錯誤: 未找到編號為${sub_choice}的應用配置${gl_bai}" + fi ;; esac break_end @@ -12987,6 +13080,7 @@ done } + linux_work() { while true; do @@ -15372,5 +15466,3 @@ else ;; esac fi - - From 5dce492311f602b117c67ba7dbf87d0212b7e808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Dec 2025 17:44:46 +0800 Subject: [PATCH 510/553] Update git clone URLs to use gh_proxy --- cn/kejilion.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index cc30e0143..1ae4148b2 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9243,7 +9243,7 @@ clear cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -10967,7 +10967,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env + 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 docker compose up -d @@ -11011,7 +11011,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/Calcium-Ion/new-api.git && cd new-api + 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' \ @@ -11128,7 +11128,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker + 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 @@ -12585,7 +12585,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12652,7 +12652,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12795,7 +12795,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langbot-app/LangBot && cd LangBot/docker sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml docker compose up -d @@ -12865,7 +12865,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml docker compose up -d @@ -13060,7 +13060,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 From 33e38e63da76a1335eeb7af6376147a3d3bc4b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Sun, 28 Dec 2025 17:45:16 +0800 Subject: [PATCH 511/553] Replace direct GitHub URLs with gh_proxy variable --- kejilion.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 62f7ef5ab..cfb9bf128 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9243,7 +9243,7 @@ clear cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -10967,7 +10967,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env + 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 docker compose up -d @@ -11011,7 +11011,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/Calcium-Ion/new-api.git && cd new-api + 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' \ @@ -11128,7 +11128,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker + 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 @@ -12585,7 +12585,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12652,7 +12652,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12795,7 +12795,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langbot-app/LangBot && cd LangBot/docker sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml docker compose up -d @@ -12865,7 +12865,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml docker compose up -d @@ -13060,7 +13060,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 From 104219a842d6ab494d9281577f42caa9cb861dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 29 Dec 2025 13:03:59 +0800 Subject: [PATCH 512/553] Enhance application listing with installation status --- kejilion.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index cfb9bf128..1deb190a0 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9338,12 +9338,26 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}第三方应用列表" echo -e "${gl_kjlan}想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) + # 获取应用描述 local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + + # 检查安装状态 (匹配 appno.txt 中的 ID) + # 这里假设 appno.txt 中记录的是 base_name (即文件名) + if echo "$app_numbers" | grep -q "^$base_name$"; then + # 如果已安装:显示 base_name - 描述 [已安装] (绿色) + echo -e "${gl_kjlan}$base_name${gl_bai} - ${gl_lv}$app_text [已安装]${gl_bai}" + else + # 如果未安装:正常显示 + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + fi done + + + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" From 856ac9c906ea2410a40f948bd3e68a9087359385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 29 Dec 2025 13:06:35 +0800 Subject: [PATCH 513/553] Enhance application listing with installation status --- cn/kejilion.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 1ae4148b2..ca6d12873 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9338,12 +9338,26 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}第三方应用列表" echo -e "${gl_kjlan}想要让你的应用出现在这里?查看开发者指南: ${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) + # 获取应用描述 local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + + # 检查安装状态 (匹配 appno.txt 中的 ID) + # 这里假设 appno.txt 中记录的是 base_name (即文件名) + if echo "$app_numbers" | grep -q "^$base_name$"; then + # 如果已安装:显示 base_name - 描述 [已安装] (绿色) + echo -e "${gl_kjlan}$base_name${gl_bai} - ${gl_lv}$app_text [已安装]${gl_bai}" + else + # 如果未安装:正常显示 + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + fi done + + + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据" echo -e "${gl_kjlan}------------------------" From 8fafecc266a5675680c7b21a0fa2f53d66e60510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 31 Dec 2025 16:07:52 +0800 Subject: [PATCH 514/553] Update upgrade_openssh9.8p1.sh --- upgrade_openssh9.8p1.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/upgrade_openssh9.8p1.sh b/upgrade_openssh9.8p1.sh index 78b5d7138..f56dc3d5a 100644 --- a/upgrade_openssh9.8p1.sh +++ b/upgrade_openssh9.8p1.sh @@ -70,6 +70,8 @@ install_openssh() { # 重启SSH服务 restart_ssh() { + mv /usr/bin/ssh /usr/bin/ssh.bak + ln -s /usr/local/bin/ssh /usr/bin/ssh case $OS in ubuntu|debian) systemctl restart ssh From 8fe0bb743842d1e2ae5a286cc6f04cb7cc10f610 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 4 Jan 2026 04:27:44 +0000 Subject: [PATCH 515/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202026-01-04=2004:27:44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 92 +++++++++++++++++------------- jp/kejilion.sh | 112 ++++++++++++++++++++---------------- kr/kejilion.sh | 150 +++++++++++++++++++++++++++---------------------- tw/kejilion.sh | 34 +++++++---- 4 files changed, 222 insertions(+), 166 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 921dc0eb6..73a923fc4 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# A function that collects function buried information and records the current script version number, usage time, system version, CPU architecture, machine country and function name used by the user. It does not involve any sensitive information, so don’t worry! Please believe me! +# This function collects function buried information and records the current script version number, usage time, system version, CPU architecture, machine country and function name used by the user. It does not involve any sensitive information, so don’t worry! Please believe me! # Why is this function designed? The purpose is to better understand the functions that users like to use, and to further optimize the functions and launch more functions that meet user needs. # The full text can be searched for the send_stats function call location. It is transparent and open source. If you have any concerns, you can refuse to use it. @@ -733,7 +733,7 @@ install_crontab() { return fi - echo -e "${gl_lv}crontab is installed and the cron service is running.${gl_bai}" + echo -e "${gl_lv}crontab is installed and cron service is running.${gl_bai}" } @@ -921,12 +921,12 @@ allow_ip() { # Add allow rule if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "IP released$ip" + echo "Released IP$ip" fi done save_iptables_rules - send_stats "IP released" + send_stats "Released IP" } block_ip() { @@ -3505,7 +3505,7 @@ ldnmp_Proxy_backend() { list_stream_services() { STREAM_DIR="/home/web/stream.d" - printf "%-25s %-18s %-25s %-20s\n" "Service name" "Communication type" "local address" "Backend address" + printf "%-25s %-18s %-25s %-20s\n" "Service name" "Communication type" "Local address" "Backend address" if [ -z "$(ls -A "$STREAM_DIR")" ]; then return @@ -4054,7 +4054,7 @@ add_forwarding_service() { send_stats "Add frp intranet service" # Prompts user for service name and forwarding information read -e -p "Please enter service name:" service_name - read -e -p "Please enter the forwarding type (tcp/udp) [Press enter to default to tcp]:" service_type + read -e -p "Please enter the forwarding type (tcp/udp) [Enter to default to tcp]:" service_type local service_type=${service_type:-tcp} read -e -p "Please enter the intranet IP [default is 127.0.0.1 when pressing Enter]:" local_ip local local_ip=${local_ip:-127.0.0.1} @@ -4851,7 +4851,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, and reconnection will take effect.${gl_bai}" + echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, reconnection will take effect${gl_bai}" } @@ -4894,7 +4894,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -5172,7 +5172,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall Windows 11" + send_stats "Reinstall windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5563,7 +5563,7 @@ clamav() { ;; 3) send_stats "Custom directory scan" - read -e -p "Please enter the directories to scan, separated by spaces (for example: /etc /var /usr /home /root):" directories + read -e -p "Please enter the directories to be scanned, separated by spaces (for example: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -6048,9 +6048,9 @@ send_stats "Command Favorites" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# Create a backup +# Create backup create_backup() { - send_stats "Create a backup" + send_stats "Create backup" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # Prompt user for backup directory @@ -6092,7 +6092,7 @@ create_backup() { echo "- $path" done - # Create a backup + # Create backup echo "Creating backup$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6720,7 +6720,7 @@ run_task() { else echo "Sync failed! Please check the following:" echo "1. Is the network connection normal?" - echo "2. Whether the remote host is accessible" + echo "2. Is the remote host accessible?" echo "3. Is the authentication information correct?" echo "4. Do the local and remote directories have correct access permissions?" fi @@ -9243,7 +9243,7 @@ clear cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -9338,12 +9338,26 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}Third-party application list" echo -e "${gl_kjlan}Want your app to appear here? Check out the developer guide:${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) + # Get app description local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + + # Check installation status (match ID in appno.txt) + # It is assumed here that what is recorded in appno.txt is base_name (i.e. file name) + if echo "$app_numbers" | grep -q "^$base_name$"; then + # If installed: show base_name - description [Installed] (green) + echo -e "${gl_kjlan}$base_name${gl_bai} - ${gl_lv}$app_text[Installed]${gl_bai}" + else + # If not installed: display normally + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + fi done + + + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all app data" echo -e "${gl_kjlan}------------------------" @@ -10967,7 +10981,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env + 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 docker compose up -d @@ -11011,7 +11025,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/Calcium-Ion/new-api.git && cd new-api + 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' \ @@ -11128,7 +11142,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker + 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 @@ -11946,7 +11960,7 @@ while true; do } - local docker_describe="A program to watch movies and live broadcasts together remotely. It provides simultaneous viewing, live broadcast, chat and other functions" + local docker_describe="A program for watching movies and live broadcasts together remotely. It provides simultaneous viewing, live broadcast, chat and other functions" local docker_url="Official website introduction: https://github.com/synctv-org/synctv" local docker_use="echo \"Initial account and password: root. Please change the login password in time after logging in\"" local docker_passwd="" @@ -12577,7 +12591,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI video generation tool" - local app_text="MoneyPrinterTurbo is a tool that uses AI large models to synthesize high-definition short videos." + local app_text="MoneyPrinterTurbo is a tool that uses AI large models to synthesize high-definition short videos" local app_url="Official website: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12585,7 +12599,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12652,7 +12666,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12795,7 +12809,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langbot-app/LangBot && cd LangBot/docker sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml docker compose up -d @@ -12865,7 +12879,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml docker compose up -d @@ -12925,7 +12939,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ local app_id="112" local docker_name="lucky" local docker_img="gdy666/lucky:v2" - # Since Lucky uses the host network mode, the port here is only for record/explanation reference, and is actually controlled by the application itself (default 16601) + # Since Lucky uses the host network mode, the port here is only for record/explanation reference and is actually controlled by the application itself (default 16601) local docker_port=8112 docker_rum() { @@ -12972,7 +12986,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ ${docker_img} } - local docker_describe="It is a Firefox browser running in Docker that supports direct access to the desktop browser interface through web pages." + local docker_describe="It is a Firefox browser running in Docker that supports direct access to the desktop browser interface through the web page." local docker_url="Project address: https://github.com/jlesage/docker-firefox" local docker_use="" local docker_passwd="" @@ -13027,7 +13041,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ r) root_use send_stats "Restore all apps" - echo "Available app backups" + echo "Available application backups" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -13060,7 +13074,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -13629,8 +13643,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 first" - send_stats "Switched to IPv6 first" + echo "Switched to IPv6 priority" + send_stats "Switched to IPv6 priority" ;; 3) @@ -13838,7 +13852,7 @@ EOF send_stats "Change time zone" while true; do clear - echo "系统时间信息" + echo "System time information" # Get the current system time zone local timezone=$(current_timezone) @@ -14126,7 +14140,7 @@ EOF echo -e "${gl_lv}The currently set inbound traffic limit threshold is:${gl_huang}${rx_threshold_gb}${gl_lv}G${gl_bai}" echo -e "${gl_lv}The currently set outbound traffic limiting threshold is:${gl_huang}${tx_threshold_gb}${gl_lv}GB${gl_bai}" else - echo -e "${gl_hui}Current limiting shutdown function is not currently enabled${gl_bai}" + echo -e "${gl_hui}The current limiting shutdown function is not currently enabled${gl_bai}" fi echo @@ -14377,7 +14391,7 @@ EOF echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" + echo -e "10. Set the network to${gl_huang}ipv4 priority${gl_bai}" echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" @@ -14386,7 +14400,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "One-stop tuning started" + send_stats "One-stop tuning starts" echo "------------------------------------------------" switch_mirror false false linux_update @@ -14426,7 +14440,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" prefer_ipv4 - echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}ipv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker @@ -14674,7 +14688,7 @@ linux_file() { 24) # 复制文件目录 - read -e -p "Please enter the file or directory path to copy:" src_path + read -e -p "Please enter the file or directory path to be copied:" src_path if [ ! -e "$src_path" ]; then echo "Error: File or directory does not exist." send_stats "Copying file or directory failed: File or directory does not exist" @@ -14788,7 +14802,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}connect to$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}Connect to$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14939,7 +14953,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" +echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 7b233ad85..62add0daa 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 関数の埋もれた情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、ユーザーが使用した関数名を記録する機能。機密情報は含まれませんので、ご安心ください。信じてください! +# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 # send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -863,7 +863,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンしました" + send_stats "ポートがオープンされました" } @@ -921,12 +921,12 @@ allow_ip() { # 許可ルールを追加する if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "IP公開$ip" + echo "リリース済みIP$ip" fi done save_iptables_rules - send_stats "IP公開" + send_stats "リリース済みIP" } block_ip() { @@ -3008,7 +3008,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -4054,7 +4054,7 @@ add_forwarding_service() { send_stats "FRPイントラネットサービスを追加" # ユーザーにサービス名と転送情報の入力を求めるプロンプトを表示します read -e -p "サービス名を入力してください:" service_name - read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp にするには Enter キーを押してください]:" service_type + read -e -p "転送タイプ (tcp/udp) を入力してください [デフォルトで tcp を入力する]:" service_type local service_type=${service_type:-tcp} read -e -p "イントラネット IP を入力してください [Enter キーを押すときのデフォルトは 127.0.0.1]:" local_ip local local_ip=${local_ip:-127.0.0.1} @@ -4851,7 +4851,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT 秘密キー ログインがオンになり、ROOT パスワード ログインがオフになり、再接続が有効になります。${gl_bai}" + echo -e "${gl_lv}ROOT秘密キーログインがオンになり、ROOTパスワードログインがオフになり、再接続が有効になります${gl_bai}" } @@ -4894,7 +4894,7 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5563,7 +5563,7 @@ clamav() { ;; 3) send_stats "カスタムディレクトリスキャン" - read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root)。" directories install_docker clamav_freshclam clamav_scan $directories @@ -6048,9 +6048,9 @@ send_stats "コマンドのお気に入り" bash <(curl -l -s ${gh_proxy}raw.githubusercontent.com/byJoey/cmdbox/refs/heads/main/install.sh) } -# バックアップを作成する +# バックアップの作成 create_backup() { - send_stats "バックアップを作成する" + send_stats "バックアップの作成" local TIMESTAMP=$(date +"%Y%m%d%H%M%S") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -6092,7 +6092,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6401,7 +6401,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6532,7 +6532,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6720,7 +6720,7 @@ run_task() { else echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2. リモートホストにアクセスできるかどうか" + echo "2. リモート ホストにアクセスできますか?" echo "3. 認証情報は正しいですか?" echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi @@ -6819,7 +6819,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -7584,7 +7584,7 @@ linux_docker() { echo -e "${gl_kjlan}5. ${gl_bai}Dockerネットワーク管理" echo -e "${gl_kjlan}6. ${gl_bai}Docker ボリューム管理" echo -e "${gl_kjlan}------------------------" - echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします。" + echo -e "${gl_kjlan}7. ${gl_bai}不要な Docker コンテナをクリーンアップし、ネットワーク データ ボリュームをミラーリングします" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Dockerソースを変更する" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json ファイルを編集する" @@ -7727,7 +7727,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -9243,7 +9243,7 @@ clear cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -9338,12 +9338,26 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}サードパーティ製アプリケーションのリスト" echo -e "${gl_kjlan}あなたのアプリをここに表示したいですか?開発者ガイドを確認してください。${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) + # アプリの説明を取得する local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + + # インストールステータスを確認します (appno.txt の ID と一致します)。 + # ここでは、appno.txtに記録されているのはbase_name(つまりファイル名)であると仮定します。 + if echo "$app_numbers" | grep -q "^$base_name$"; then + # インストールされている場合: showbase_name - description [インストール済み] (緑色) + echo -e "${gl_kjlan}$base_name${gl_bai} - ${gl_lv}$app_text[インストール済み]${gl_bai}" + else + # インストールされていない場合:通常通り表示 + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + fi done + + + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーション データをバックアップする${gl_kjlan}r. ${gl_bai}すべてのアプリデータを復元する" echo -e "${gl_kjlan}------------------------" @@ -9554,7 +9568,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -10490,7 +10504,7 @@ while true; do local docker_describe="ミニマリストの瞬間、模倣性の高いWeChatの瞬間、あなたの素晴らしい人生を記録してください" local docker_url="公式サイト紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" - local docker_use="echo 「アカウント: admin パスワード: a123456」" + local docker_use="echo \"アカウント: admin パスワード: a123456\"" local docker_passwd="" local app_size="1" docker_app @@ -10967,7 +10981,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env + 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 docker compose up -d @@ -11011,7 +11025,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/Calcium-Ion/new-api.git && cd new-api + 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' \ @@ -11128,7 +11142,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker + 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 @@ -11623,7 +11637,7 @@ while true; do } - local docker_describe="Beszel は軽量で使いやすいサーバー監視です" + local docker_describe="Beszel轻量易用的服务器监控" local docker_url="公式サイト紹介:https://beszel.dev/zh/" local docker_use="" local docker_passwd="" @@ -11637,7 +11651,7 @@ while true; do local app_id="80" local app_name="リンクワーデンのブックマーク管理" - local app_text="タグ付け、検索、チーム コラボレーションをサポートするオープンソースの自己ホスト型ブックマーク管理プラットフォーム。" + local app_text="タグ付け、検索、チーム コラボレーションをサポートする、オープン ソースの自己ホスト型ブックマーク管理プラットフォーム。" local app_url="公式サイト:https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" @@ -11946,7 +11960,7 @@ while true; do } - local docker_describe="リモートで映画や生放送を一緒に見るプログラム。同時視聴、ライブブロードキャスト、チャットなどの機能を提供します" + local docker_describe="リモートで映画や生放送を一緒に視聴するプログラム。同時視聴、ライブブロードキャスト、チャットなどの機能を提供します" local docker_url="公式サイト紹介:https://github.com/synctv-org/synctv" local docker_use="echo \"初期アカウントとパスワード: root。ログイン後、時間内にログイン パスワードを変更してください\"" local docker_passwd="" @@ -12434,7 +12448,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12577,7 +12591,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI動画生成ツール" - local app_text="MoneyPrinterTurbo は、AI ラージモデルを使用して高解像度のショートビデオを合成するツールです。" + local app_text="MoneyPrinterTurbo は、AI ラージモデルを使用して高解像度のショートビデオを合成するツールです" local app_url="公式ウェブサイト:https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12585,7 +12599,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12652,7 +12666,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12795,7 +12809,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langbot-app/LangBot && cd LangBot/docker sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml docker compose up -d @@ -12865,7 +12879,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml docker compose up -d @@ -13027,7 +13041,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリのバックアップ" + echo "利用可能なアプリケーションのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -13060,7 +13074,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -13089,7 +13103,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -13629,8 +13643,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -14126,7 +14140,7 @@ EOF 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}" + echo -e "${gl_hui}電流制限シャットダウン機能は現在有効になっていません。${gl_bai}" fi echo @@ -14368,7 +14382,7 @@ EOF echo "ワンストップのシステムチューニング" echo "------------------------------------------------" echo "以下のコンテンツを運用・最適化していきます" - echo "1. システムアップデートソースを最適化し、システムを最新の状態にアップデートします。" + echo "1. システムアップデートソースを最適化し、システムを最新にアップデートします。" echo "2. システムジャンクファイルをクリーンアップする" echo -e "3. 仮想メモリを設定する${gl_huang}1G${gl_bai}" echo -e "4. SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" @@ -14386,7 +14400,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" switch_mirror false false linux_update @@ -14661,7 +14675,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14681,7 +14695,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14788,7 +14802,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}に接続する$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}に接続します$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14817,7 +14831,7 @@ while true; do 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}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}システムをクリーンアップする" @@ -14855,7 +14869,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14939,7 +14953,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS オファー${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15314,7 +15328,7 @@ else swap) shift - send_stats "仮想メモリを素早く設定する" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 93e99c13b..80b3e79f3 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기기 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. # send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -921,12 +921,12 @@ allow_ip() { # 허용 규칙 추가 if ! iptables -C INPUT -s $ip -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -s $ip -j ACCEPT - echo "IP 공개$ip" + echo "공개된 IP$ip" fi done save_iptables_rules - send_stats "IP 공개" + send_stats "공개된 IP" } block_ip() { @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP 지우기" + echo "7. 지정된 IP 삭제" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1313,7 +1313,7 @@ install_ldnmp_conf() { 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 파일에서 바꾸기 + # 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 @@ -1544,11 +1544,11 @@ certs_status() { send_stats "도메인 이름 인증서 신청 실패" echo -e "${gl_hong}알아채다:${gl_bai}인증서 신청이 실패했습니다. 다음 가능한 이유를 확인하고 다시 시도하십시오." echo -e "1. 도메인 이름이 잘못 입력되었습니다. ➠ 도메인 이름이 올바르게 입력되었는지 확인하세요." - echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인하세요." + echo -e "2. DNS 확인 문제 ➠ 도메인 이름이 서버 IP로 올바르게 확인되었는지 확인" echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." - echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." + echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하세요." echo "------------------------" echo "1. 다시 적용 2. 기존 인증서 가져오기 3. 인증서 없이 HTTP 액세스 사용 0. 종료" echo "------------------------" @@ -2134,7 +2134,7 @@ web_security() { echo "------------------------" echo "11. 차단 매개변수 구성 12. 차단된 IP 모두 삭제" echo "------------------------" - echo "21. cloudflare 모드 22. 고부하에서 5초 쉴드 활성화" + echo "21. cloudflare 모드 22. 고부하에서 5초 보호 활성화" echo "------------------------" echo "31. WAF 켜기 32. WAF 끄기" echo "33. DDOS 방어 켜기 34. DDOS 방어 끄기" @@ -2248,7 +2248,7 @@ web_security() { 22) send_stats "고부하로 5초 쉴드 가능" - echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 높은 부하를 감지하면 자동으로 쉴드가 열리고, 낮은 부하가 감지되면 자동으로 5초 동안 쉴드가 닫힙니다.${gl_bai}" + echo -e "${gl_huang}웹사이트는 5분마다 자동으로 감지합니다. 고부하를 감지하면 자동으로 실드를 열고, 저부하를 감지하면 자동으로 5초 동안 실드를 닫습니다.${gl_bai}" echo "--------------" echo "CF 매개변수 가져오기:" echo -e "cf 백엔드 오른쪽 상단에 있는 내 프로필로 이동하여 왼쪽에 있는 API 토큰을 선택하고${gl_huang}Global API Key${gl_bai}" @@ -2514,7 +2514,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. +# check_docker="${gl_hui}가 ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -3325,7 +3325,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" echo "------------------------" echo "$webname설치정보는 다음과 같습니다." @@ -3338,7 +3338,7 @@ nginx_web_on() { local ipv4_pattern='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' local ipv6_pattern='^(([0-9A-Fa-f]{1,4}:){1,7}:|([0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}|::1)$' - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" if [[ "$yuming" =~ $ipv4_pattern || "$yuming" =~ $ipv6_pattern ]]; then mv /home/web/conf.d/"$yuming".conf /home/web/conf.d/"${yuming}_${access_port}".conf @@ -3412,7 +3412,7 @@ ldnmp_Proxy() { check_ip_and_get_access_port "$yuming" if [ -z "$reverseproxy" ]; then - read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3532,7 +3532,7 @@ list_stream_services() { proto="tcp" fi - # 스플라이스 청취 IP:포트 + # 접속 수신 IP:포트 local_addr="$local_ip:$listen_port" printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" @@ -3676,7 +3676,7 @@ ldnmp_Proxy_backend_stream() { docker exec nginx nginx -s reload clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "------------------------" echo "방문 주소:" ip_address @@ -4009,7 +4009,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -4054,7 +4054,7 @@ add_forwarding_service() { send_stats "FRP 인트라넷 서비스 추가" # 사용자에게 서비스 이름 및 전달 정보를 묻는 메시지를 표시합니다. read -e -p "서비스 이름을 입력하세요:" service_name - read -e -p "전달 유형(tcp/udp)을 입력하십시오. [tcp를 기본값으로 설정하려면 Enter를 누르십시오]:" service_type + read -e -p "전달 유형(tcp/udp)을 입력하십시오. [기본값을 tcp로 입력]:" service_type local service_type=${service_type:-tcp} read -e -p "인트라넷 IP를 입력하십시오. [Enter를 누르면 기본값은 127.0.0.1입니다]:" local_ip local local_ip=${local_ip:-127.0.0.1} @@ -4071,7 +4071,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -4318,7 +4318,7 @@ frps_panel() { 8) send_stats "IP 접근 차단" - echo "역방향 도메인 이름 접근을 가지고 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." + echo "역방향 도메인 이름 접근이 있는 경우, 이 기능을 사용하면 IP+포트 접근을 차단할 수 있어 더욱 안전합니다." read -e -p "차단할 포트를 입력하세요:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; @@ -4851,7 +4851,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT 개인키 로그인이 활성화되어 있고, ROOT 비밀번호 로그인이 비활성화되어 재접속이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT 개인 키 로그인이 활성화되었습니다. ROOT 비밀번호 로그인이 비활성화되었습니다. 다시 연결이 적용됩니다.${gl_bai}" } @@ -5279,7 +5279,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" + echo "XanMod 커널이 업데이트되었습니다. 다시 시작한 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -5289,7 +5289,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" + echo "XanMod 커널이 제거되었습니다. 다시 시작한 후 적용" server_reboot ;; @@ -5306,7 +5306,7 @@ bbrv3() { echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "데비안/우분투만 지원" - echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." + echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화해 드리겠습니다." echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5343,7 +5343,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 다시 시작한 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -5432,7 +5432,7 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" + echo "elrepo 커널이 제거되었습니다. 다시 시작한 후 적용" send_stats "Red Hat 커널 제거" server_reboot @@ -6720,7 +6720,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근 가능한지 여부" + echo "2. 원격 호스트에 접근할 수 있나요?" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -7311,7 +7311,7 @@ docker_ssh_migration() { # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 건너뛰세요...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" continue fi @@ -7424,7 +7424,7 @@ docker_ssh_migration() { [[ ! -f "$json" ]] && continue has_container=true container=$(basename "$json" | sed 's/_inspect.json//') - echo -e "${GREEN}처리 용기:$container${NC}" + echo -e "${GREEN}처리용기:$container${NC}" # 컨테이너가 이미 존재하고 실행 중인지 확인하세요. if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then @@ -7498,7 +7498,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "도커 마이그레이션" install jq - read -e -p "마이그레이션할 백업 디렉터리를 입력하세요." BACKUP_DIR + read -e -p "마이그레이션할 백업 디렉터리를 입력하십시오:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } read -e -p "대상 서버 IP:" TARGET_IP @@ -7543,7 +7543,7 @@ docker_ssh_migration() { echo -e "1. 도커 프로젝트 백업" echo -e "2. 도커 프로젝트 마이그레이션" echo -e "3. 도커 프로젝트 복원" - echo -e "4. Docker 프로젝트의 백업 파일을 삭제합니다." + echo -e "4. docker 프로젝트 백업 파일 삭제" echo "------------------------" echo -e "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -8443,7 +8443,7 @@ linux_ldnmp() { echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "" - echo "레디스 주소: 레디스" + echo "레디스 주소 : 레디스" echo "redis 비밀번호: 기본적으로 입력되지 않음" echo "레디스 포트: 6379" echo "" @@ -8689,7 +8689,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}6/6${gl_bai}] 데이터베이스 관리" echo "-------------" - read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 구축하고 데이터베이스 백업이 있습니다." use_db + read -e -p "1. 새 사이트를 구축합니다. 2. 이전 사이트를 구축하고 데이터베이스 백업을 가지고 있습니다." use_db case $use_db in 1) echo @@ -9243,7 +9243,7 @@ clear cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -9329,7 +9329,7 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" - echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawnix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}-------------------------" @@ -9338,12 +9338,26 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}타사 애플리케이션 목록" echo -e "${gl_kjlan}귀하의 앱이 여기에 표시되기를 원하십니까? 개발자 가이드를 확인하세요.${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) + # 앱 설명 가져오기 local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + + # 설치 상태 확인(appno.txt의 ID 일치) + # 여기서는 appno.txt에 기록되는 내용이 base_name(즉, 파일 이름)이라고 가정합니다. + if echo "$app_numbers" | grep -q "^$base_name$"; then + # 설치된 경우: show base_name - 설명 [설치됨](녹색) + echo -e "${gl_kjlan}$base_name${gl_bai} - ${gl_lv}$app_text[설치됨]${gl_bai}" + else + # 설치되지 않은 경우: 정상적으로 표시됩니다. + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + fi done + + + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}모든 애플리케이션 데이터 백업${gl_kjlan}r. ${gl_bai}모든 앱 데이터 복원" echo -e "${gl_kjlan}------------------------" @@ -9525,7 +9539,7 @@ while true; do } - local docker_describe="webtop은 Ubuntu 기반 컨테이너입니다. 해당 IP에 접속할 수 없는 경우, 접속할 도메인 이름을 추가해 주세요." + local docker_describe="webtop은 Ubuntu 기반 컨테이너입니다. 해당 IP에 접근할 수 없는 경우, 접근할 도메인 이름을 추가해주세요." local docker_url="공식 홈페이지 소개: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" @@ -9545,7 +9559,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "나타 모니터링$check_docker $update_status" + echo -e "네자 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -10225,7 +10239,7 @@ while true; do } - local docker_describe="웹탑은 중국어 버전의 Alpine 컨테이너를 기반으로 합니다. 해당 IP에 접속할 수 없는 경우, 접속할 도메인 이름을 추가해 주세요." + local docker_describe="웹탑은 중국어 버전의 Alpine 컨테이너를 기반으로 합니다. 해당 IP에 접근할 수 없는 경우, 접근할 도메인 이름을 추가해주세요." local docker_url="공식 홈페이지 소개: https://docs.linuxserver.io/images/docker-webtop/" local docker_use="" local docker_passwd="" @@ -10391,7 +10405,7 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 docker를 사용하는 강력한 로컬 호스팅 웹 기반 PDF 조작 도구입니다." + local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 Docker를 사용하여 로컬로 호스팅되는 강력한 웹 기반 PDF 조작 도구입니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" @@ -10567,7 +10581,7 @@ while true; do } - local docker_describe="Bililive-go는 다양한 라이브 방송 플랫폼을 지원하는 라이브 방송 녹화 도구입니다." + local docker_describe="Bililive-go는 다양한 라이브 방송 플랫폼을 지원하는 라이브 방송 녹음 도구입니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/hr3lxphr6j/bililive-go" local docker_use="" local docker_passwd="" @@ -10967,7 +10981,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env + 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 docker compose up -d @@ -11011,7 +11025,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/Calcium-Ion/new-api.git && cd new-api + 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' \ @@ -11128,7 +11142,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker + 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 @@ -11946,9 +11960,9 @@ while true; do } - local docker_describe="영화와 생방송을 원격으로 함께 시청할 수 있는 프로그램입니다. 동시 시청, 라이브 방송, 채팅 및 기타 기능을 제공합니다." + local docker_describe="원격으로 영화와 생방송을 함께 시청할 수 있는 프로그램입니다. 동시 시청, 라이브 방송, 채팅 및 기타 기능을 제공합니다." local docker_url="공식 홈페이지 소개: https://github.com/synctv-org/synctv" - local docker_use="echo \"초기 계정 및 비밀번호: root. 로그인 후 적시에 로그인 비밀번호를 변경하세요\"" + local docker_use="echo \"초기 계정 및 비밀번호: root. 로그인 후 시간에 맞춰 로그인 비밀번호를 변경하세요\"" local docker_passwd="" local app_size="1" docker_app @@ -12005,7 +12019,7 @@ while true; do } - local docker_describe="익명의 비밀번호로 텍스트와 파일을 공유하고 빠른 배송과 같은 파일 픽업" + local docker_describe="익명의 비밀번호로 텍스트와 파일을 공유하고, 빠른 배송과 같은 파일 픽업" local docker_url="공식 홈페이지 소개: https://github.com/vastsa/FileCodeBox" local docker_use="echo \"접속 주소 뒤에는 /#/admin이 붙어서 관리자 페이지에 접속합니다\"" local docker_passwd="echo \"관리자 비밀번호: FileCodeBox2023\"" @@ -12078,7 +12092,7 @@ while true; do local app_name="gitea 비공개 코드 저장소" local app_text="GitHub에 가까운 경험을 제공하는 무료 차세대 코드 호스팅 플랫폼입니다." - local app_url="영상소개 : https://github.com/go-gitea/gitea" + local app_url="영상 소개: https://github.com/go-gitea/gitea" local docker_name="gitea" local docker_port="8091" local app_size="2" @@ -12577,7 +12591,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI 영상 생성 도구" - local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 짧은 동영상을 합성하는 도구입니다." + local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 단편 동영상을 합성하는 도구입니다." local app_url="공식 웹사이트: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12585,7 +12599,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12652,7 +12666,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12795,7 +12809,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langbot-app/LangBot && cd LangBot/docker sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml docker compose up -d @@ -12865,7 +12879,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml docker compose up -d @@ -12925,7 +12939,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ local app_id="112" local docker_name="lucky" local docker_img="gdy666/lucky:v2" - # Lucky는 호스트 네트워크 모드를 사용하므로 여기서 포트는 기록/설명 참조용으로만 사용되며 실제로는 애플리케이션 자체에 의해 제어됩니다(기본값 16601). + # Lucky는 호스트 네트워크 모드를 사용하므로 여기의 포트는 기록/설명 참조용으로만 사용되며 실제로는 애플리케이션 자체에 의해 제어됩니다(기본값 16601). local docker_port=8112 docker_rum() { @@ -13027,7 +13041,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 앱 백업" + echo "사용 가능한 애플리케이션 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -13060,7 +13074,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -13629,8 +13643,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -13673,7 +13687,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "1G 가상 메모리가 설정되었습니다." add_swap 1024 ;; @@ -13863,7 +13877,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13931,7 +13945,7 @@ EOF echo "$new_hostname" > /etc/hostname hostname "$new_hostname" else - # Debian, Ubuntu, CentOS 등과 같은 기타 시스템 + # Debian, Ubuntu, CentOS 등과 같은 다른 시스템 hostnamectl set-hostname "$new_hostname" sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname systemctl restart systemd-hostnamed @@ -14026,7 +14040,7 @@ EOF case $dingshi in 1) - read -e -p "작업을 실행하기로 선택한 날은 언제입니까? (1-30):" day + read -e -p "작업을 실행하기로 선택한 달의 날짜는 무엇입니까? (1-30):" day (crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1 ;; 2) @@ -14126,7 +14140,7 @@ EOF 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}" + echo -e "${gl_hui}현재 제한 종료 기능이 현재 활성화되어 있지 않습니다.${gl_bai}" fi echo @@ -14142,7 +14156,7 @@ EOF case "$Limiting" in 1) # 새 가상 메모리 크기 입력 - echo "실제 서버에 트래픽이 100G만 있는 경우 임계값을 95G로 설정하고 미리 종료하여 트래픽 오류나 오버플로를 방지할 수 있습니다." + echo "실제 서버의 트래픽이 100G만 있는 경우 임계값을 95G로 설정하고 미리 종료하여 트래픽 오류나 오버플로를 방지할 수 있습니다." read -e -p "인바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." rx_threshold_gb rx_threshold_gb=${rx_threshold_gb:-100} read -e -p "아웃바운드 트래픽 임계값을 입력하십시오(단위는 G, 기본값은 100G)." tx_threshold_gb @@ -14232,7 +14246,7 @@ EOF root_use send_stats "전신 경고" echo "TG-bot 모니터링 및 조기경보 기능" - echo "영상 소개: https://youtu.be/vLL-eb3Z_TY" + echo "영상소개: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" echo "로컬 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인에 대한 실시간 모니터링 및 경고를 달성하려면 경고를 수신하도록 tg 로봇 API 및 사용자 ID를 구성해야 합니다." echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." @@ -14386,7 +14400,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "원스톱 튜닝이 시작되었습니다" + send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" switch_mirror false false linux_update @@ -14788,7 +14802,7 @@ run_commands_on_servers() { local username=${SERVER_ARRAY[i+3]} local password=${SERVER_ARRAY[i+4]} echo - echo -e "${gl_huang}연결하다$name ($hostname)...${gl_bai}" + echo -e "${gl_huang}연결 대상$name ($hostname)...${gl_bai}" # sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" sshpass -p "$password" ssh -t -o StrictHostKeyChecking=no "$username@$hostname" -p "$port" "$1" done @@ -14939,7 +14953,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 혜택${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15222,7 +15236,7 @@ echo "k 포트 닫기 gbdk 7800 |k 포트 7800 닫기" echo "릴리스 IP k fxip 127.0.0.0/8 |k 릴리스 IP 127.0.0.0/8" echo "IP 차단 k zzip 177.5.25.36 |k IP 177.5.25.36 차단" echo "명령 즐겨찾기 k 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장관리 kapp" +echo "애플리케이션 시장 관리 k app" echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" echo "Fail2ban 관리 k Fail2ban | 케이 F2B" echo "시스템 정보 표시 k 정보" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index fee310e9d..aa78f0041 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -9243,7 +9243,7 @@ clear cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 @@ -9338,12 +9338,26 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}第三方應用列表" echo -e "${gl_kjlan}想要讓你的應用出現在這裡?查看開發者指南:${gl_huang}https://dev.kejilion.sh/${gl_bai}" + for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue local base_name=$(basename "$f" .conf) + # 獲取應用描述 local app_text=$(grep "app_text=" "$f" | cut -d'=' -f2 | tr -d '"' | tr -d "'") - echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + + # 檢查安裝狀態 (匹配 appno.txt 中的 ID) + # 這裡假設 appno.txt 中記錄的是 base_name (即文件名) + if echo "$app_numbers" | grep -q "^$base_name$"; then + # 如果已安裝:顯示 base_name - 描述 [已安裝] (綠色) + echo -e "${gl_kjlan}$base_name${gl_bai} - ${gl_lv}$app_text[已安裝]${gl_bai}" + else + # 如果未安裝:正常顯示 + echo -e "${gl_kjlan}$base_name${gl_bai} - $app_text" + fi done + + + echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據" echo -e "${gl_kjlan}------------------------" @@ -10967,7 +10981,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langgenius/dify.git && cd dify/docker && cp .env.example .env + 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 docker compose up -d @@ -11011,7 +11025,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/Calcium-Ion/new-api.git && cd new-api + 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' \ @@ -11128,7 +11142,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/infiniflow/ragflow.git && cd ragflow/docker + 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 @@ -12585,7 +12599,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git && cd MoneyPrinterTurbo/ sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml docker compose up -d @@ -12652,7 +12666,7 @@ while true; do docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/umami-software/umami.git && cd umami + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/umami-software/umami.git && cd umami sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/umami/docker-compose.yml docker compose up -d @@ -12795,7 +12809,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/langbot-app/LangBot && cd LangBot/docker + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/langbot-app/LangBot && cd LangBot/docker sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml docker compose up -d @@ -12865,7 +12879,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_install() { install git - mkdir -p /home/docker/ && cd /home/docker/ && git clone https://github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env + mkdir -p /home/docker/ && cd /home/docker/ && git clone ${gh_proxy}github.com/karakeep-app/karakeep.git && cd karakeep/docker && cp .env.sample .env sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml docker compose up -d @@ -13060,7 +13074,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ cd ~ install git if [ ! -d apps/.git ]; then - git clone https://github.com/kejilion/apps.git + git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps git pull origin main > /dev/null 2>&1 From 0089136518dfc04b73ee41c35f135f50ee3323db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:26:49 +0800 Subject: [PATCH 516/553] Refactor Docker image update checks and logic --- cn/kejilion.sh | 75 +++++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index ca6d12873..520c44bc9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -2551,54 +2551,61 @@ done check_docker_image_update() { - local container_name=$1 + update_status="" - local country=$(curl -s ipinfo.io/country) - if [[ "$country" == "CN" ]]; then - update_status="" - return - fi + # 1. 区域检查 + local country=$(curl -s --max-time 2 ipinfo.io/country) + [[ "$country" == "CN" ]] && return - # 获取容器的创建时间和镜像名称 + # 2. 获取本地镜像信息 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##*:} + [[ -z "$container_info" ]] && return - # 默认标签为 latest - [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - - # 添加对官方镜像的支持 - [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" + local container_created=$(echo "$container_info" | cut -d',' -f1) + local full_image_name=$(echo "$container_info" | cut -d',' -f2) + local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) + + # 3. 智能路由判断 + if [[ "$full_image_name" == ghcr.io* ]]; then + # --- 场景 A: 镜像在 GitHub (ghcr.io) --- + # 提取仓库路径,例如 ghcr.io/onexru/oneimg -> onexru/oneimg + local repo_path=$(echo "$full_image_name" | sed 's/ghcr.io\///' | cut -d':' -f1) + # 注意:ghcr.io 的 API 比较复杂,通常最快的方法是查 GitHub Repo 的 Release + local api_url="https://api.github.com/repos/$repo_path/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) + + elif [[ "$full_image_name" == *"oneimg"* ]]; then + # --- 场景 B: 特殊指定 (即便在 Docker Hub,也想通过 GitHub Release 判断) --- + local api_url="https://api.github.com/repos/onexru/oneimg/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) - # 从 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) + else + # --- 场景 C: 标准 Docker Hub --- + local image_repo=${full_image_name%%:*} + local image_tag=${full_image_name##*:} + [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" + [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 验证获取的时间 - 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) + local api_url="https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag" + local remote_date=$(curl -s "$api_url" | jq -r '.last_updated' 2>/dev/null) + fi - # 比较时间戳 - if [[ $container_created_ts -lt $last_updated_ts ]]; then + # 4. 时间戳对比 + if [[ -n "$remote_date" && "$remote_date" != "null" ]]; then + local remote_ts=$(date -d "$remote_date" +%s 2>/dev/null) + if [[ $container_created_ts -lt $remote_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 @@ -10189,12 +10196,12 @@ while true; do 23|memos) local app_id="23" local docker_name="memos" - local docker_img="ghcr.io/usememos/memos:latest" + local docker_img="neosmemo/memos:stable" local docker_port=8023 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always neosmemo/memos:stable } From 167f05b514d4a9758e87173d63c99442a4f02cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:27:19 +0800 Subject: [PATCH 517/553] Update sh_v version from 4.3.0 to 4.3.1 --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 520c44bc9..cf3b0b390 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.0" +sh_v="4.3.1" gl_hui='\e[37m' From a56cd967101c86b4119d99f714c07d7d30da0f24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:29:02 +0800 Subject: [PATCH 518/553] Update version and Docker image references in kejilion.sh Updated version from 4.3.0 to 4.3.1 and modified Docker image references for memos. --- kejilion.sh | 77 +++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 1deb190a0..e2667fefa 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.0" +sh_v="4.3.1" gl_hui='\e[37m' @@ -2551,54 +2551,61 @@ done check_docker_image_update() { - local container_name=$1 + update_status="" - local country=$(curl -s ipinfo.io/country) - if [[ "$country" == "CN" ]]; then - update_status="" - return - fi + # 1. 区域检查 + local country=$(curl -s --max-time 2 ipinfo.io/country) + [[ "$country" == "CN" ]] && return - # 获取容器的创建时间和镜像名称 + # 2. 获取本地镜像信息 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##*:} + [[ -z "$container_info" ]] && return - # 默认标签为 latest - [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - - # 添加对官方镜像的支持 - [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" + local container_created=$(echo "$container_info" | cut -d',' -f1) + local full_image_name=$(echo "$container_info" | cut -d',' -f2) + local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) + + # 3. 智能路由判断 + if [[ "$full_image_name" == ghcr.io* ]]; then + # --- 场景 A: 镜像在 GitHub (ghcr.io) --- + # 提取仓库路径,例如 ghcr.io/onexru/oneimg -> onexru/oneimg + local repo_path=$(echo "$full_image_name" | sed 's/ghcr.io\///' | cut -d':' -f1) + # 注意:ghcr.io 的 API 比较复杂,通常最快的方法是查 GitHub Repo 的 Release + local api_url="https://api.github.com/repos/$repo_path/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) + + elif [[ "$full_image_name" == *"oneimg"* ]]; then + # --- 场景 B: 特殊指定 (即便在 Docker Hub,也想通过 GitHub Release 判断) --- + local api_url="https://api.github.com/repos/onexru/oneimg/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) - # 从 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) + else + # --- 场景 C: 标准 Docker Hub --- + local image_repo=${full_image_name%%:*} + local image_tag=${full_image_name##*:} + [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" + [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 验证获取的时间 - 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) + local api_url="https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag" + local remote_date=$(curl -s "$api_url" | jq -r '.last_updated' 2>/dev/null) + fi - # 比较时间戳 - if [[ $container_created_ts -lt $last_updated_ts ]]; then + # 4. 时间戳对比 + if [[ -n "$remote_date" && "$remote_date" != "null" ]]; then + local remote_ts=$(date -d "$remote_date" +%s 2>/dev/null) + if [[ $container_created_ts -lt $remote_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 @@ -10189,12 +10196,12 @@ while true; do 23|memos) local app_id="23" local docker_name="memos" - local docker_img="ghcr.io/usememos/memos:latest" + local docker_img="neosmemo/memos:stable" local docker_port=8023 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always neosmemo/memos:stable } From 7a953f470c62596f3bda8ba4fa255c5c16634587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:33:53 +0800 Subject: [PATCH 519/553] Update changelog for v4.3.1 enhancements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化应用市场新版本逻辑以兼容github.io,并调整memos镜像源。 --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 4729ce6d6..ba2c5258e 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1393,4 +1393,8 @@ SSL申请失败后追加导入已有证书选项,你可以导入域名有效 应用市场支持第三方入驻功能,开发者可以将自己的项目加入到脚本中让大家使用。 入驻指南: https://github.com/kejilion/sh/tree/main/apps ------------------------ +2026-01-06 v4.3.1 +应用市场应用发现新版本逻辑进行优化可以兼容github.io的新版本发现。 +应用市场memos拉取镜像源进行调整,采用官方更推荐的做法。 +------------------------ From a694aac8f3ca178ee5ce41d21d182821fbb81337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:02:37 +0800 Subject: [PATCH 520/553] Update git pull commands to use proxy URLs --- cn/kejilion.sh | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index cf3b0b390..698968cdc 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -9253,7 +9253,8 @@ if [ ! -d apps/.git ]; then git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi while true; do @@ -11006,7 +11007,7 @@ while true; do docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ - git pull origin main + git pull ${gh_proxy}github.com/langgenius/dify.git main > /dev/null 2>&1 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 } @@ -11049,7 +11050,8 @@ while true; do docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ - git pull origin main + + git pull ${gh_proxy}github.com/Calcium-Ion/new-api.git main > /dev/null 2>&1 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' \ @@ -11160,7 +11162,7 @@ while true; do docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ - git pull origin main + git pull ${gh_proxy}github.com/infiniflow/ragflow.git main > /dev/null 2>&1 cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d @@ -12618,7 +12620,8 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - git pull origin main + + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d } @@ -12687,7 +12690,7 @@ while true; do docker_app_update() { cd /home/docker/umami/ && docker compose down --rmi all cd /home/docker/umami/ - git pull origin main + git pull ${gh_proxy}github.com/umami-software/umami.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml cd /home/docker/umami/ && docker compose up -d } @@ -12828,7 +12831,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/LangBot/docker && docker compose down --rmi all cd /home/docker/LangBot/ - git pull origin main + git pull ${gh_proxy}github.com/langbot-app/LangBot main > /dev/null 2>&1 sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml cd /home/docker/LangBot/docker/ && docker compose up -d } @@ -12898,7 +12901,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all cd /home/docker/karakeep/ - git pull origin main + git pull ${gh_proxy}github.com/karakeep-app/karakeep.git main > /dev/null 2>&1 sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml cd /home/docker/karakeep/docker/ && docker compose up -d } @@ -13084,7 +13087,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then From 6cc93a69fee4cad7f24a3e0113675d8657d0941b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:03:12 +0800 Subject: [PATCH 521/553] Update git pull commands to use gh_proxy --- kejilion.sh | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index e2667fefa..5c65f43da 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -9253,7 +9253,8 @@ if [ ! -d apps/.git ]; then git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi while true; do @@ -11006,7 +11007,7 @@ while true; do docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ - git pull origin main + git pull ${gh_proxy}github.com/langgenius/dify.git main > /dev/null 2>&1 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 } @@ -11049,7 +11050,8 @@ while true; do docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ - git pull origin main + + git pull ${gh_proxy}github.com/Calcium-Ion/new-api.git main > /dev/null 2>&1 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' \ @@ -11160,7 +11162,7 @@ while true; do docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ - git pull origin main + git pull ${gh_proxy}github.com/infiniflow/ragflow.git main > /dev/null 2>&1 cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d @@ -12618,7 +12620,8 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - git pull origin main + + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d } @@ -12687,7 +12690,7 @@ while true; do docker_app_update() { cd /home/docker/umami/ && docker compose down --rmi all cd /home/docker/umami/ - git pull origin main + git pull ${gh_proxy}github.com/umami-software/umami.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml cd /home/docker/umami/ && docker compose up -d } @@ -12828,7 +12831,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/LangBot/docker && docker compose down --rmi all cd /home/docker/LangBot/ - git pull origin main + git pull ${gh_proxy}github.com/langbot-app/LangBot main > /dev/null 2>&1 sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml cd /home/docker/LangBot/docker/ && docker compose up -d } @@ -12898,7 +12901,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all cd /home/docker/karakeep/ - git pull origin main + git pull ${gh_proxy}github.com/karakeep-app/karakeep.git main > /dev/null 2>&1 sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml cd /home/docker/karakeep/docker/ && docker compose up -d } @@ -13084,7 +13087,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then From c68270befd5f771f137b753b9d6d1c634b65b118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 7 Jan 2026 22:04:45 +0800 Subject: [PATCH 522/553] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=B8=82=E5=9C=BAgit=E6=9B=B4=E6=96=B0=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化应用市场的git更新机制以解决拉取卡顿问题。 --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index ba2c5258e..bc1df54bb 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1396,5 +1396,6 @@ SSL申请失败后追加导入已有证书选项,你可以导入域名有效 2026-01-06 v4.3.1 应用市场应用发现新版本逻辑进行优化可以兼容github.io的新版本发现。 应用市场memos拉取镜像源进行调整,采用官方更推荐的做法。 +应用市场优化部分项目的git更新机制,解决国内拉取卡顿的问题。 ------------------------ From afa8d86bbcd1d05d5e54d983eb066a3b81dadbe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:34:28 +0800 Subject: [PATCH 523/553] Enhance send_stats for app management actions Added send_stats calls for app installation, update, uninstallation, and domain access settings. Updated the git installation section to include opencode installation. --- cn/kejilion.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 698968cdc..b253f6f8d 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3024,25 +3024,30 @@ docker_app_plus() { echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id + send_stats "$app_name 安装" ;; + 2) docker_app_update - add_app_id + send_stats "$app_name 更新" ;; + 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - + send_stats "$app_name 卸载" ;; + 5) echo "${docker_name}域名访问设置" send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" + ;; 6) echo "域名格式 example.com 不带https://" @@ -6954,7 +6959,7 @@ linux_tools() { echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统 ${gl_kjlan}18. ${gl_bai}opencode AI编程助手 ${gl_huang}★${gl_bai}" 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}贪吃蛇小游戏" @@ -7113,6 +7118,15 @@ linux_tools() { send_stats "安装git" ;; + 18) + clear + curl -fsSL https://opencode.ai/install | bash + source ~/.bashrc + opencode + send_stats "安装opencode" + ;; + + 21) clear install cmatrix @@ -7141,6 +7155,7 @@ linux_tools() { nsnake send_stats "安装nsnake" ;; + 28) clear install ninvaders @@ -12620,7 +12635,7 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d From 0753822c170595cfd07393331a333cae56f6b2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:35:43 +0800 Subject: [PATCH 524/553] Add send_stats calls for app installation and updates --- kejilion.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 5c65f43da..a57b8bd4a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3024,25 +3024,30 @@ docker_app_plus() { echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id + send_stats "$app_name 安装" ;; + 2) docker_app_update - add_app_id + send_stats "$app_name 更新" ;; + 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - + send_stats "$app_name 卸载" ;; + 5) echo "${docker_name}域名访问设置" send_stats "${docker_name}域名访问设置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" + ;; 6) echo "域名格式 example.com 不带https://" @@ -6954,7 +6959,7 @@ linux_tools() { echo -e "${gl_kjlan}11. ${gl_bai}btop 现代化监控工具 ${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" 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}nano 文本编辑器 ${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统" + echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系统 ${gl_kjlan}18. ${gl_bai}opencode AI编程助手 ${gl_huang}★${gl_bai}" 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}贪吃蛇小游戏" @@ -7113,6 +7118,15 @@ linux_tools() { send_stats "安装git" ;; + 18) + clear + curl -fsSL https://opencode.ai/install | bash + source ~/.bashrc + opencode + send_stats "安装opencode" + ;; + + 21) clear install cmatrix @@ -7141,6 +7155,7 @@ linux_tools() { nsnake send_stats "安装nsnake" ;; + 28) clear install ninvaders @@ -12620,7 +12635,7 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d From 27eff918134938ee60ba936c42af2d5cd3affb95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:37:41 +0800 Subject: [PATCH 525/553] Add opencode AI assistant for server-side development Added a new AI programming assistant to the basic tools. --- kejilion_sh_log.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index bc1df54bb..231f3143e 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1397,5 +1397,6 @@ SSL申请失败后追加导入已有证书选项,你可以导入域名有效 应用市场应用发现新版本逻辑进行优化可以兼容github.io的新版本发现。 应用市场memos拉取镜像源进行调整,采用官方更推荐的做法。 应用市场优化部分项目的git更新机制,解决国内拉取卡顿的问题。 +基础工具中添加了目前流行的opencode编程AI助手可以在服务器上直接AI可视化开发编程。 ------------------------ From 768a48f0cc4ee4ecd588d8bcb1ec0affab46f39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:57:40 +0800 Subject: [PATCH 526/553] Add installation and uninstallation for opencode --- cn/kejilion.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index b253f6f8d..1aa1500c3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -7120,8 +7120,10 @@ linux_tools() { 18) clear + cd ~ curl -fsSL https://opencode.ai/install | bash source ~/.bashrc + source ~/.profile opencode send_stats "安装opencode" ;; @@ -7181,6 +7183,8 @@ linux_tools() { clear send_stats "全部卸载" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git + opencode uninstall + rm -rf ~/.opencode ;; 41) From 4e449931f357e60a87952bf4e1f7ec253f2681a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:58:23 +0800 Subject: [PATCH 527/553] Add opencode installation and uninstallation commands --- kejilion.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion.sh b/kejilion.sh index a57b8bd4a..e25c7b01a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -7120,8 +7120,10 @@ linux_tools() { 18) clear + cd ~ curl -fsSL https://opencode.ai/install | bash source ~/.bashrc + source ~/.profile opencode send_stats "安装opencode" ;; @@ -7181,6 +7183,8 @@ linux_tools() { clear send_stats "全部卸载" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git + opencode uninstall + rm -rf ~/.opencode ;; 41) From ee62662fd2485fd719d3cbed80c0aec0e264f16e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 11 Jan 2026 04:25:39 +0000 Subject: [PATCH 528/553] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20u?= =?UTF-8?q?pdate=20-=202026-01-11=2004:25:39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 232 +++++++++++++++++++++++++------------------- jp/kejilion.sh | 258 +++++++++++++++++++++++++++---------------------- kr/kejilion.sh | 254 +++++++++++++++++++++++++++--------------------- tw/kejilion.sh | 124 +++++++++++++++--------- 4 files changed, 494 insertions(+), 374 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 73a923fc4..c2f4a0387 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.0" +sh_v="4.3.1" gl_hui='\e[37m' @@ -2334,7 +2334,7 @@ check_nginx_compression() { # Check whether zstd is on and uncommented (the whole line starts with zstd on;) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status="zstd compression is enabled" + zstd_status="zstd compression is on" else zstd_status="" fi @@ -2551,54 +2551,61 @@ done check_docker_image_update() { - local container_name=$1 + update_status="" - local country=$(curl -s ipinfo.io/country) - if [[ "$country" == "CN" ]]; then - update_status="" - return - fi + # 1. Regional inspection + local country=$(curl -s --max-time 2 ipinfo.io/country) + [[ "$country" == "CN" ]] && return - # Get the creation time and image name of the container + # 2. Get local mirror information 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) - - # Extract image repository and tags - local image_repo=${image_name%%:*} - local image_tag=${image_name##*:} + [[ -z "$container_info" ]] && return - # The default tag is latest - [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - - # Add support for official images - [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" + local container_created=$(echo "$container_info" | cut -d',' -f1) + local full_image_name=$(echo "$container_info" | cut -d',' -f2) + local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) + + # 3. Intelligent routing judgment + if [[ "$full_image_name" == ghcr.io* ]]; then + # --- Scenario A: Mirror on GitHub (ghcr.io) --- + # Extract the warehouse path, for example ghcr.io/onexru/oneimg -> onexru/oneimg + local repo_path=$(echo "$full_image_name" | sed 's/ghcr.io\///' | cut -d':' -f1) + # Note: The API of ghcr.io is relatively complex. Usually the fastest way is to check the Release of GitHub Repo + local api_url="https://api.github.com/repos/$repo_path/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) + + elif [[ "$full_image_name" == *"oneimg"* ]]; then + # --- Scenario B: Special designation (even in Docker Hub, I want to judge by GitHub Release) --- + local api_url="https://api.github.com/repos/onexru/oneimg/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) - # Get image release time from 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) + else + # --- Scenario C: Standard Docker Hub --- + local image_repo=${full_image_name%%:*} + local image_tag=${full_image_name##*:} + [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" + [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # Verify the time obtained - 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) + local api_url="https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag" + local remote_date=$(curl -s "$api_url" | jq -r '.last_updated' 2>/dev/null) + fi - # Compare timestamps - if [[ $container_created_ts -lt $last_updated_ts ]]; then + # 4. Timestamp comparison + if [[ -n "$remote_date" && "$remote_date" != "null" ]]; then + local remote_ts=$(date -d "$remote_date" +%s 2>/dev/null) + if [[ $container_created_ts -lt $remote_ts ]]; then update_status="${gl_huang}New version found!${gl_bai}" - else - update_status="" fi - else - update_status="" fi - } + + + block_container_port() { local container_name_or_id=$1 local allowed_ip=$2 @@ -2676,7 +2683,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 @@ -2695,7 +2702,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # Clear the rules that allow the specified IP + # Clear the rules that allow specified IPs 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 @@ -2936,7 +2943,7 @@ while true; do rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3017,25 +3024,30 @@ docker_app_plus() { echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id + send_stats "$app_nameInstall" ;; + 2) docker_app_update - add_app_id + send_stats "$app_namerenew" ;; + 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - + send_stats "$app_nameuninstall" ;; + 5) echo "${docker_name}Domain name access settings" send_stats "${docker_name}Domain name access settings" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" + ;; 6) echo "Domain name format example.com without https://" @@ -4295,7 +4307,7 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" ;; 5) echo "Reverse intranet penetration service into domain name access" @@ -4392,7 +4404,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" ;; 4) @@ -4851,7 +4863,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, reconnection will take effect${gl_bai}" + echo -e "${gl_lv}ROOT private key login has been turned on, ROOT password login has been turned off, and reconnection will take effect.${gl_bai}" } @@ -4894,14 +4906,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOT login setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This feature requires root user to run!" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}hint:${gl_bai}This function requires root user to run!" && break_end && kejilion } @@ -5172,7 +5184,7 @@ dd_xitong() { ;; 41) - send_stats "Reinstall windows 11" + send_stats "Reinstall Windows 11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -5563,7 +5575,7 @@ clamav() { ;; 3) send_stats "Custom directory scan" - read -e -p "Please enter the directories to be scanned, separated by spaces (for example: /etc /var /usr /home /root):" directories + read -e -p "Please enter the directories to scan, separated by spaces (for example: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5706,7 +5718,7 @@ restore_defaults() { # Website building optimization function optimize_web_server() { - echo -e "${gl_lv}Switch to website building optimization mode...${gl_bai}" + echo -e "${gl_lv}Switch to website construction optimization mode...${gl_bai}" echo -e "${gl_lv}Optimize file descriptors...${gl_bai}" ulimit -n 65535 @@ -5785,7 +5797,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -6720,7 +6732,7 @@ run_task() { else echo "Sync failed! Please check the following:" echo "1. Is the network connection normal?" - echo "2. Is the remote host accessible?" + echo "2. Whether the remote host is accessible" echo "3. Is the authentication information correct?" echo "4. Do the local and remote directories have correct access permissions?" fi @@ -6935,7 +6947,7 @@ linux_tools() { while true; do clear - # send_stats "Basic Tools" + # send_stats "Basic tools" echo -e "basic tools" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}curl download tool${gl_huang}★${gl_bai} ${gl_kjlan}2. ${gl_bai}wget download tool${gl_huang}★${gl_bai}" @@ -6947,7 +6959,7 @@ linux_tools() { echo -e "${gl_kjlan}11. ${gl_bai}btop modern monitoring tool${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger file management tool" echo -e "${gl_kjlan}13. ${gl_bai}ncdu disk usage viewing tool${gl_kjlan}14. ${gl_bai}fzf global search tool" echo -e "${gl_kjlan}15. ${gl_bai}vim text editor${gl_kjlan}16. ${gl_bai}nano text editor${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git version control system" + echo -e "${gl_kjlan}17. ${gl_bai}git version control system${gl_kjlan}18. ${gl_bai}opencode AI programming assistant${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}21. ${gl_bai}The Matrix Screensaver${gl_kjlan}22. ${gl_bai}Running train screensaver" echo -e "${gl_kjlan}26. ${gl_bai}Tetris mini game${gl_kjlan}27. ${gl_bai}Snake mini game" @@ -7106,6 +7118,17 @@ linux_tools() { send_stats "Install git" ;; + 18) + clear + cd ~ + curl -fsSL https://opencode.ai/install | bash + source ~/.bashrc + source ~/.profile + opencode + send_stats "Install opencode" + ;; + + 21) clear install cmatrix @@ -7134,6 +7157,7 @@ linux_tools() { nsnake send_stats "Install nsnake" ;; + 28) clear install ninvaders @@ -7159,6 +7183,8 @@ linux_tools() { clear send_stats "Uninstall all" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git + opencode uninstall + rm -rf ~/.opencode ;; 41) @@ -7510,7 +7536,7 @@ docker_ssh_migration() { echo -e "${YELLOW}Transferring backup...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # Log in with key + # Log in using key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7877,7 +7903,7 @@ linux_test() { echo -e "${gl_kjlan}14. ${gl_bai}nxtrace fast backhaul test script" echo -e "${gl_kjlan}15. ${gl_bai}nxtrace specifies IP backhaul test script" echo -e "${gl_kjlan}16. ${gl_bai}ludashi2020 three network line test" - echo -e "${gl_kjlan}17. ${gl_bai}i-abc multifunctional speed test script" + echo -e "${gl_kjlan}17. ${gl_bai}i-abc multi-function speed test script" echo -e "${gl_kjlan}18. ${gl_bai}NetQuality network quality check script${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}------------------------" @@ -9246,7 +9272,8 @@ if [ ! -d apps/.git ]; then git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi while true; do @@ -9269,7 +9296,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}Pagoda panel official version${gl_kjlan}2. ${color2}aaPanel Pagoda International Version" echo -e "${gl_kjlan}3. ${color3}1Panel new generation management panel${gl_kjlan}4. ${color4}NginxProxyManager visualization panel" - echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Version" + echo -e "${gl_kjlan}5. ${color5}OpenList multi-store file list program${gl_kjlan}6. ${color6}Ubuntu Remote Desktop Web Edition" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS Monitoring Panel${gl_kjlan}8. ${color8}QB offline BT magnetic download panel" echo -e "${gl_kjlan}9. ${color9}Poste.io mail server program${gl_kjlan}10. ${color10}RocketChat multi-person online chat system" echo -e "${gl_kjlan}-------------------------" @@ -9639,7 +9666,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "postal service$check_docker $update_status" + echo -e "postal services$check_docker $update_status" echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9743,7 +9770,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "App uninstalled" + echo "App has been uninstalled" ;; *) @@ -9797,7 +9824,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -9895,7 +9922,7 @@ while true; do docker_app_uninstall() { cd /home/docker/cloud/ && docker compose down --rmi all rm -rf /home/docker/cloud - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -9970,7 +9997,7 @@ while true; do } - local docker_describe="Speedtest speed test panel is a VPS network speed test tool with multiple test functions and can also monitor VPS inbound and outbound traffic in real time." + local docker_describe="Speedtest speed measurement panel is a VPS network speed test tool with multiple test functions and can also monitor VPS inbound and outbound traffic in real time." local docker_url="Official website introduction:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" @@ -10189,12 +10216,12 @@ while true; do 23|memos) local app_id="23" local docker_name="memos" - local docker_img="ghcr.io/usememos/memos:latest" + local docker_img="neosmemo/memos:stable" local docker_port=8023 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always neosmemo/memos:stable } @@ -10780,7 +10807,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10999,7 +11026,7 @@ while true; do docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ - git pull origin main + git pull ${gh_proxy}github.com/langgenius/dify.git main > /dev/null 2>&1 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 } @@ -11007,7 +11034,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dify/docker/ && docker compose down --rmi all rm -rf /home/docker/dify - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11042,7 +11069,8 @@ while true; do docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ - git pull origin main + + git pull ${gh_proxy}github.com/Calcium-Ion/new-api.git main > /dev/null 2>&1 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' \ @@ -11058,7 +11086,7 @@ while true; do docker_app_uninstall() { cd /home/docker/new-api/ && docker compose down --rmi all rm -rf /home/docker/new-api - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11099,7 +11127,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11153,7 +11181,7 @@ while true; do docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ - git pull origin main + git pull ${gh_proxy}github.com/infiniflow/ragflow.git main > /dev/null 2>&1 cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d @@ -11162,7 +11190,7 @@ while true; do docker_app_uninstall() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all rm -rf /home/docker/ragflow - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11347,7 +11375,7 @@ while true; do } - local docker_describe="Open source AI chatbot framework, supporting WeChat, QQ, and TG access to AI large models" + local docker_describe="Open source AI chatbot framework, supporting WeChat, QQ, and TG access to large AI models" local docker_url="Official website introduction: https://astrbot.app/" local docker_use="echo \"Username: astrbot Password: astrbot\"" local docker_passwd="" @@ -11403,7 +11431,7 @@ while true; do } - local docker_describe="A password manager where you can control your data" + local docker_describe="A password manager that puts you in control of your data" local docker_url="Official website introduction: https://bitwarden.com/" local docker_use="" local docker_passwd="" @@ -11490,7 +11518,7 @@ while true; do docker_app_uninstall() { cd /home/docker/moontv/ && docker compose down --rmi all rm -rf /home/docker/moontv - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11761,7 +11789,7 @@ while true; do cd "$(ls -dt */ | head -n 1)" docker compose down --rmi all rm -rf /home/docker/jitsi - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11897,7 +11925,7 @@ while true; do docker_app_uninstall() { cd /home/docker/${docker_name} && docker compose down --rmi all rm -rf /home/docker/${docker_name} - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -11960,7 +11988,7 @@ while true; do } - local docker_describe="A program for watching movies and live broadcasts together remotely. It provides simultaneous viewing, live broadcast, chat and other functions" + local docker_describe="A program to watch movies and live broadcasts together remotely. It provides simultaneous viewing, live broadcast, chat and other functions" local docker_url="Official website introduction: https://github.com/synctv-org/synctv" local docker_use="echo \"Initial account and password: root. Please change the login password in time after logging in\"" local docker_passwd="" @@ -12124,7 +12152,7 @@ while true; do docker_app_uninstall() { cd /home/docker/gitea/ && docker compose down --rmi all rm -rf /home/docker/gitea - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12262,7 +12290,7 @@ while true; do docker_app_uninstall() { cd /home/docker/paperless/ && docker compose down --rmi all rm -rf /home/docker/paperless - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12316,7 +12344,7 @@ while true; do docker_app_uninstall() { cd /home/docker/2fauth/ && docker compose down --rmi all rm -rf /home/docker/2fauth - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12549,7 +12577,7 @@ while true; do docker_app_uninstall() { cd /home/docker/dsm/ && docker compose down --rmi all rm -rf /home/docker/dsm - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12611,7 +12639,8 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - git pull origin main + + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d } @@ -12619,7 +12648,7 @@ while true; do docker_app_uninstall() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all rm -rf /home/docker/MoneyPrinterTurbo - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12680,7 +12709,7 @@ while true; do docker_app_update() { cd /home/docker/umami/ && docker compose down --rmi all cd /home/docker/umami/ - git pull origin main + git pull ${gh_proxy}github.com/umami-software/umami.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml cd /home/docker/umami/ && docker compose up -d } @@ -12688,7 +12717,7 @@ while true; do docker_app_uninstall() { cd /home/docker/umami/ && docker compose down --rmi all rm -rf /home/docker/umami - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12821,7 +12850,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/LangBot/docker && docker compose down --rmi all cd /home/docker/LangBot/ - git pull origin main + git pull ${gh_proxy}github.com/langbot-app/LangBot main > /dev/null 2>&1 sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml cd /home/docker/LangBot/docker/ && docker compose up -d } @@ -12829,7 +12858,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_uninstall() { cd /home/docker/LangBot/docker/ && docker compose down --rmi all rm -rf /home/docker/LangBot - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -12891,7 +12920,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all cd /home/docker/karakeep/ - git pull origin main + git pull ${gh_proxy}github.com/karakeep-app/karakeep.git main > /dev/null 2>&1 sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml cd /home/docker/karakeep/docker/ && docker compose up -d } @@ -12899,7 +12928,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_uninstall() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all rm -rf /home/docker/karakeep - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -13077,7 +13106,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then @@ -13113,7 +13143,7 @@ linux_work() { echo -e "${gl_kjlan}2. ${gl_bai}Work Area 2" echo -e "${gl_kjlan}3. ${gl_bai}Work Area 3" echo -e "${gl_kjlan}4. ${gl_bai}Work Area 4" - echo -e "${gl_kjlan}5. ${gl_bai}Work Area 5" + echo -e "${gl_kjlan}5. ${gl_bai}Workspace No. 5" echo -e "${gl_kjlan}6. ${gl_bai}Work Area 6" echo -e "${gl_kjlan}7. ${gl_bai}Work Area 7" echo -e "${gl_kjlan}8. ${gl_bai}Work Area 8" @@ -13454,7 +13484,7 @@ linux_Settings() { echo "python version management" echo "Video introduction: https://www.bilibili.com/video/BV1Pm42157cK?t=0.1" echo "---------------------------------------" - echo "This function can seamlessly install any version officially supported by Python!" + echo "This function can seamlessly install any version officially supported by python!" local VERSION=$(python3 -V 2>&1 | awk '{print $2}') echo -e "Current python version number:${gl_huang}$VERSION${gl_bai}" echo "------------" @@ -13643,8 +13673,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 priority" - send_stats "Switched to IPv6 priority" + echo "Switched to IPv6 first" + send_stats "Switched to IPv6 first" ;; 3) @@ -13882,7 +13912,7 @@ EOF echo "America" echo "21. US Western Time 22. US Eastern Time" echo "23. Canada time 24. Mexico time" - echo "25. Brazil Time 26. Argentina Time" + echo "25. Brazil time 26. Argentina time" echo "------------------------" echo "31. UTC global standard time" echo "------------------------" @@ -14391,7 +14421,7 @@ EOF echo -e "7. Turn on${gl_huang}BBR${gl_bai}accelerate" echo -e "8. Set time zone to${gl_huang}Shanghai${gl_bai}" echo -e "9. Automatically optimize DNS addresses${gl_huang}Overseas: 1.1.1.1 8.8.8.8 Domestic: 223.5.5.5${gl_bai}" - echo -e "10. Set the network to${gl_huang}ipv4 priority${gl_bai}" + echo -e "10. Set the network to${gl_huang}IPv4 priority${gl_bai}" echo -e "11. Install basic tools${gl_huang}docker wget sudo tar unzip socat btop nano vim${gl_bai}" echo -e "12. Linux system kernel parameter optimization switches to${gl_huang}Balanced optimization mode${gl_bai}" echo "------------------------------------------------" @@ -14440,7 +14470,7 @@ EOF echo -e "[${gl_lv}OK${gl_bai}] 9/12. Automatically optimize DNS address${gl_huang}${gl_bai}" echo "------------------------------------------------" prefer_ipv4 - echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}ipv4 priority${gl_bai}}" + echo -e "[${gl_lv}OK${gl_bai}] 10/12. Set the network to${gl_huang}IPv4 priority${gl_bai}}" echo "------------------------------------------------" install_docker @@ -14688,7 +14718,7 @@ linux_file() { 24) # 复制文件目录 - read -e -p "Please enter the file or directory path to be copied:" src_path + read -e -p "Please enter the file or directory path to copy:" src_path if [ ! -e "$src_path" ]; then echo "Error: File or directory does not exist." send_stats "Copying file or directory failed: File or directory does not exist" @@ -14836,7 +14866,7 @@ while true; do echo -e "${gl_kjlan}Execute tasks in batches${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}Install technology lion script${gl_kjlan}12. ${gl_bai}Update system${gl_kjlan}13. ${gl_bai}Clean the system" echo -e "${gl_kjlan}14. ${gl_bai}Install docker${gl_kjlan}15. ${gl_bai}Install BBR3${gl_kjlan}16. ${gl_bai}Set 1G virtual memory" - echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}Custom instructions" + echo -e "${gl_kjlan}17. ${gl_bai}Set time zone to Shanghai${gl_kjlan}18. ${gl_bai}Open all ports${gl_kjlan}51. ${gl_bai}custom directive" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" @@ -14953,7 +14983,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 6.9 dollars per month Tokyo Softbank 2 cores 1G memory 20G hard drive 1T traffic per month${gl_bai}" echo -e "${gl_bai}URL: https://vps.hosting/cart/tokyo-cloud-kvm-vps/?id=148&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" -echo -e "${gl_kjlan}More popular VPS offers${gl_bai}" +echo -e "${gl_kjlan}More popular VPS deals${gl_bai}" echo -e "${gl_bai}Website: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15192,7 +15222,7 @@ done k_info() { -send_stats "k command reference use case" +send_stats "k command reference examples" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "The following is a reference use case for the k command:" @@ -15226,7 +15256,7 @@ echo "docker container management k docker ps |k docker container" echo "docker image management k docker img |k docker image" echo "LDNMP site management k web" echo "LDNMP cache cleaning k web cache" -echo "Install WordPress k wp | k wordpress | k wp xxx.com" +echo "安装WordPress k wp |k wordpress |k wp xxx.com" echo "Install reverse proxy k fd |k rp |k reverse proxy |k fd xxx.com" echo "Install load balancing k loadbalance |k load balancing" echo "Install L4 load balancing k stream |k L4 load balancing" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 62add0daa..634379b25 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.0" +sh_v="4.3.1" gl_hui='\e[37m' @@ -858,12 +858,12 @@ open_port() { 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" + echo "ポートがオープンしました$port" fi done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -2334,7 +2334,7 @@ check_nginx_compression() { # zstd がオンでコメントが解除されているかどうかを確認します (行全体が zstd on で始まります)。 if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status="zstd圧縮が有効になっています" + zstd_status="zstd圧縮がオンになっています" else zstd_status="" fi @@ -2551,54 +2551,61 @@ done check_docker_image_update() { - local container_name=$1 + update_status="" - local country=$(curl -s ipinfo.io/country) - if [[ "$country" == "CN" ]]; then - update_status="" - return - fi + # 1. 地域検査 + local country=$(curl -s --max-time 2 ipinfo.io/country) + [[ "$country" == "CN" ]] && return - # コンテナの作成時刻とイメージ名を取得します。 + # 2. ローカルミラー情報の取得 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##*:} + [[ -z "$container_info" ]] && return - # デフォルトのタグはlatestです - [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - - # 公式画像のサポートを追加 - [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" + local container_created=$(echo "$container_info" | cut -d',' -f1) + local full_image_name=$(echo "$container_info" | cut -d',' -f2) + local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) + + # 3. インテリジェントな配線判断 + if [[ "$full_image_name" == ghcr.io* ]]; then + # --- シナリオ A: GitHub (ghcr.io) 上のミラー --- + # ウェアハウスのパスを抽出します (例: ghcr.io/onexru/oneimg -> onexru/oneimg) + local repo_path=$(echo "$full_image_name" | sed 's/ghcr.io\///' | cut -d':' -f1) + # 注: ghcr.io の API は比較的複雑です。通常、最も早い方法は、GitHub リポジトリのリリースを確認することです + local api_url="https://api.github.com/repos/$repo_path/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) + + elif [[ "$full_image_name" == *"oneimg"* ]]; then + # --- シナリオB:特別指定(Docker HubでもGitHub Releaseで判断したい) --- + local api_url="https://api.github.com/repos/onexru/oneimg/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) - # 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) + else + # --- シナリオ C: 標準 Docker ハブ --- + local image_repo=${full_image_name%%:*} + local image_tag=${full_image_name##*:} + [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" + [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 取得した時間を確認する - 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) + local api_url="https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag" + local remote_date=$(curl -s "$api_url" | jq -r '.last_updated' 2>/dev/null) + fi - # タイムスタンプを比較する - if [[ $container_created_ts -lt $last_updated_ts ]]; then + # 4. タイムスタンプの比較 + if [[ -n "$remote_date" && "$remote_date" != "null" ]]; then + local remote_ts=$(date -d "$remote_date" +%s 2>/dev/null) + if [[ $container_created_ts -lt $remote_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 @@ -2895,7 +2902,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -3008,7 +3015,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${docker_port}ポート:" app_port + read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${docker_port}ポート:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3017,25 +3024,30 @@ docker_app_plus() { echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id + send_stats "$app_nameインストール" ;; + 2) docker_app_update - add_app_id + send_stats "$app_name更新する" ;; + 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - + send_stats "$app_nameアンインストールする" ;; + 5) echo "${docker_name}ドメイン名アクセス設定" send_stats "${docker_name}ドメイン名アクセス設定" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" + ;; 6) echo "ドメイン名の形式 example.com (https:// なし)" @@ -4733,7 +4745,7 @@ while true; do 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 "3. DNS 構成を手動で編集する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -4851,7 +4863,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT秘密キーログインがオンになり、ROOTパスワードログインがオフになり、再接続が有効になります${gl_bai}" + echo -e "${gl_lv}ROOT 秘密キー ログインがオンになり、ROOT パスワード ログインがオフになり、再接続が有効になります。${gl_bai}" } @@ -4894,14 +4906,14 @@ sed -i 's/^\s*#\?\s*PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_confi 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}ROOTログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } root_use() { clear -[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を使用するには、root ユーザーが実行する必要があります。" && break_end && kejilion +[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能を実行するには root ユーザーが必要です。" && break_end && kejilion } @@ -5563,7 +5575,7 @@ clamav() { ;; 3) send_stats "カスタムディレクトリスキャン" - read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root)。" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5758,7 +5770,7 @@ Kernel_optimize() { echo -e "${gl_huang}ヒント:${gl_bai}本番環境では注意して使用してください。" echo "--------------------" echo "1. ハイパフォーマンス最適化モード: システムのパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU 設定を最適化します。" - echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常の使用に適しています。" + echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常的な使用に適しています。" echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" echo "5. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" @@ -5785,7 +5797,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モデル" + send_stats "ウェブサイト最適化モード" ;; 4) cd ~ @@ -5875,7 +5887,7 @@ while true; do case $choice in 1) update_locale "en_US.UTF-8" "en_US.UTF-8" - send_stats "英語に切り替えて" + send_stats "英語に切り替えてください" ;; 2) update_locale "zh_CN.UTF-8" "zh_CN.UTF-8" @@ -6180,7 +6192,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6380,9 +6392,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションのマウント +# パーティションをマウントする mount_partition() { - send_stats "パーティションのマウント" + send_stats "パーティションをマウントする" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6532,7 +6544,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6561,7 +6573,7 @@ add_task() { read -e -p "ローカル ディレクトリを入力してください:" local_path read -e -p "リモート ディレクトリを入力してください:" remote_path read -e -p "リモート ユーザー@IP を入力してください:" remote - read -e -p "SSH ポート (デフォルトは 22) を入力してください:" port + read -e -p "SSH ポートを入力してください (デフォルトは 22):" port port=${port:-22} echo "認証方法を選択してください:" @@ -6720,7 +6732,7 @@ run_task() { else echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2. リモート ホストにアクセスできますか?" + echo "2. リモートホストにアクセスできるかどうか" echo "3. 認証情報は正しいですか?" echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi @@ -6729,7 +6741,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期スケジュールされたタスクを追加する" + send_stats "同期のスケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6819,7 +6831,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6935,7 +6947,7 @@ linux_tools() { while true; do clear - # send_stats 「基本ツール」 + # 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}" @@ -6947,7 +6959,7 @@ linux_tools() { 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}17. ${gl_bai}git バージョン管理システム${gl_kjlan}18. ${gl_bai}opencode AI プログラミング アシスタント${gl_huang}★${gl_bai}" 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}ヘビのミニゲーム" @@ -7007,7 +7019,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftopをインストールする" + send_stats "iftop をインストールする" ;; 7) clear @@ -7106,6 +7118,17 @@ linux_tools() { send_stats "gitをインストールする" ;; + 18) + clear + cd ~ + curl -fsSL https://opencode.ai/install | bash + source ~/.bashrc + source ~/.profile + opencode + send_stats "オープンコードをインストールする" + ;; + + 21) clear install cmatrix @@ -7134,6 +7157,7 @@ linux_tools() { nsnake send_stats "nsnakeをインストールする" ;; + 28) clear install ninvaders @@ -7159,6 +7183,8 @@ linux_tools() { clear send_stats "すべてアンインストールする" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git + opencode uninstall + rm -rf ~/.opencode ;; 41) @@ -7301,7 +7327,7 @@ docker_ssh_migration() { docker inspect "$c" > "$inspect_file" if is_compose_container "$c"; then - echo -e "${BLUE}検出されました$cdocker-compose コンテナーです${NC}" + echo -e "${BLUE}検出されました$cdocker-composeコンテナです${NC}" local project_dir=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project.working_dir"] // empty') local project_name=$(docker inspect "$c" | jq -r '.[0].Config.Labels["com.docker.compose.project"] // empty') @@ -7311,7 +7337,7 @@ docker_ssh_migration() { # Compose プロジェクトがすでにパッケージ化されている場合は、スキップしてください if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているため、繰り返しのパッケージ化をスキップします...${NC}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${NC}" continue fi @@ -7478,7 +7504,7 @@ docker_ssh_migration() { [[ "$has_container" == false ]] && echo -e "${YELLOW}共通コンテナのバックアップ情報が見つかりません${NC}" - # /home/docker 下のファイルを復元します + # /home/docker 下のファイルを復元する if [ -f "$BACKUP_DIR/home_docker_files.tar.gz" ]; then echo -e "${BLUE}/home/docker の下にファイルを復元しています...${NC}" mkdir -p /home/docker @@ -7503,14 +7529,14 @@ docker_ssh_migration() { read -e -p "ターゲットサーバーIP:" TARGET_IP read -e -p "ターゲットサーバーの SSH ユーザー名:" TARGET_USER - read -e -p "ターゲット サーバーの SSH ポート [デフォルト 22]:" TARGET_PORT + read -e -p "ターゲットサーバーの SSH ポート [デフォルト 22]:" TARGET_PORT local TARGET_PORT=${TARGET_PORT:-22} local LATEST_TAR="$BACKUP_DIR" echo -e "${YELLOW}バックアップを転送中...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # キーでログイン + # キーを使用してログインする scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -8070,7 +8096,7 @@ linux_Oracle() { local DEFAULT_MEM_UTIL=20 local DEFAULT_SPEEDTEST_INTERVAL=120 - # ユーザーに CPU コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 + # CPU コアの数と占有率を入力するようユーザーに求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 read -e -p "CPU コアの数を入力してください [デフォルト:$DEFAULT_CPU_CORE]: " cpu_core local cpu_core=${cpu_core:-$DEFAULT_CPU_CORE} @@ -8454,7 +8480,7 @@ linux_ldnmp() { echo "パスワード: 管理者" echo "------------------------" echo "ログイン時に右上隅に赤色の error0 が表示される場合は、次のコマンドを使用してください。" - echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、問題が多いのか、とても腹が立っています。" + echo "私も、なぜユニコーンナンバーカードがこんなに面倒で、こんな問題を抱えているのか、とても腹が立っています。" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" ;; @@ -9246,7 +9272,8 @@ if [ ! -d apps/.git ]; then git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi while true; do @@ -9269,7 +9296,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}パゴダパネル正式版${gl_kjlan}2. ${color2}aaPanel パゴダ国際版" echo -e "${gl_kjlan}3. ${color3}1Panel 新世代管理パネル${gl_kjlan}4. ${color4}NginxProxyManager 視覚化パネル" - echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web バージョン" + echo -e "${gl_kjlan}5. ${color5}OpenList マルチストア ファイル リスト プログラム${gl_kjlan}6. ${color6}Ubuntu リモート デスクトップ Web エディション" echo -e "${gl_kjlan}7. ${color7}Nezha Probe VPS 監視パネル${gl_kjlan}8. ${color8}QBオフラインBT磁気ダウンロードパネル" echo -e "${gl_kjlan}9. ${color9}Poste.io メール サーバー プログラム${gl_kjlan}10. ${color10}RocketChat 複数人オンライン チャット システム" echo -e "${gl_kjlan}-------------------------" @@ -9307,7 +9334,7 @@ while true; do echo -e "${gl_kjlan}63. ${color63}OpenWebUI セルフホスト型 AI プラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}ITツールツールボックス" echo -e "${gl_kjlan}65. ${color65}n8n自動ワークフロープラットフォーム${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp ビデオ ダウンロード ツール" echo -e "${gl_kjlan}67. ${color67}ddns-go ダイナミック DNS 管理ツール${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 証明書管理プラットフォーム" - echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstBot チャットボット フレームワーク" + echo -e "${gl_kjlan}69. ${color69}SFTPGo ファイル転送ツール${gl_kjlan}70. ${color70}AstrBot チャットボット フレームワーク" echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}71. ${color71}Navidrome プライベート ミュージック サーバー${gl_kjlan}72. ${color72}bitwarden パスワードマネージャー${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV プライベートムービー${gl_kjlan}74. ${color74}MoonTV のプライベート ムービー" @@ -9317,7 +9344,7 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}81. ${color81}JitsiMeet ビデオ会議${gl_kjlan}82. ${color82}gpt-load 高性能 AI 透過プロキシ" echo -e "${gl_kjlan}83. ${color83}komariサーバー監視ツール${gl_kjlan}84. ${color84}Wallos の個人財務管理ツール" - echo -e "${gl_kjlan}85. ${color85}イミッチピクチャービデオマネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" + echo -e "${gl_kjlan}85. ${color85}イミッチ・ピクチャー・ビデオ・マネージャー${gl_kjlan}86. ${color86}ジェリーフィンメディア管理システム" echo -e "${gl_kjlan}87. ${color87}SyncTV は一緒に映画を見るための素晴らしいツールです${gl_kjlan}88. ${color88}Owncast の自己ホスト型ライブ ストリーミング プラットフォーム" echo -e "${gl_kjlan}89. ${color89}FileCodeBox ファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル" echo -e "${gl_kjlan}-------------------------" @@ -9970,7 +9997,7 @@ while true; do } - local docker_describe="Speedtest スピード テスト パネルは、複数のテスト機能を備えた VPS ネットワーク速度テスト ツールで、VPS のインバウンドおよびアウトバウンドのトラフィックをリアルタイムで監視することもできます。" + local docker_describe="Speedtest 速度測定パネルは、複数のテスト機能を備えた VPS ネットワーク速度テスト ツールで、VPS のインバウンドおよびアウトバウンドのトラフィックをリアルタイムで監視することもできます。" local docker_url="公式サイト紹介:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" @@ -10030,7 +10057,7 @@ while true; do } - local docker_describe="Onlyoffice はオープンソースのオンライン オフィス ツールで、非常に強力です。" + local docker_describe="Onlyoffice は、非常に強力なオープンソースのオンライン オフィス ツールです。" local docker_url="公式サイト紹介:https://www.onlyoffice.com/" local docker_use="" local docker_passwd="" @@ -10189,12 +10216,12 @@ while true; do 23|memos) local app_id="23" local docker_name="memos" - local docker_img="ghcr.io/usememos/memos:latest" + local docker_img="neosmemo/memos:stable" local docker_port=8023 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always neosmemo/memos:stable } @@ -10405,7 +10432,7 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="これは、Docker を使用してローカルでホストされる強力な Web ベースの PDF 操作ツールで、分割マージ、変換、再編成、画像の追加、回転、圧縮など、PDF ファイルに対してさまざまな操作を実行できます。" + local docker_describe="これは、Docker を使用してローカルでホストされる強力な Web ベースの PDF 操作ツールで、PDF ファイルに対して分割マージ、変換、再編成、画像の追加、回転、圧縮などのさまざまな操作を実行できます。" local docker_url="公式サイト紹介:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" @@ -10451,7 +10478,7 @@ while true; do } - local docker_describe="Sun-Panel サーバー、NAS ナビゲーション パネル、ホームページ、ブラウザー ホームページ" + local docker_describe="Sun-Panel サーバー、NAS ナビゲーション パネル、ホームページ、ブラウザーのホームページ" local docker_url="公式サイト紹介:https://doc.sun-panel.top/zh_cn/" local docker_use="echo 「アカウント: admin@sun.cc パスワード: 12345678」" local docker_passwd="" @@ -10504,7 +10531,7 @@ while true; do local docker_describe="ミニマリストの瞬間、模倣性の高いWeChatの瞬間、あなたの素晴らしい人生を記録してください" local docker_url="公式サイト紹介:${gh_proxy}github.com/kingwrcy/moments?tab=readme-ov-file" - local docker_use="echo \"アカウント: admin パスワード: a123456\"" + local docker_use="echo 「アカウント: admin パスワード: a123456」" local docker_passwd="" local app_size="1" docker_app @@ -10833,7 +10860,7 @@ while true; do } - local docker_describe="これは Prometheus コンテナーのデータ収集コンポーネントです。監視対象ホストにデプロイしてください。" + local docker_describe="これは Prometheus コンテナのデータ収集コンポーネントです。監視対象ホストにデプロイしてください。" local docker_url="公式サイト紹介:https://github.com/google/cadvisor" local docker_use="" local docker_passwd="" @@ -10999,7 +11026,7 @@ while true; do docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ - git pull origin main + git pull ${gh_proxy}github.com/langgenius/dify.git main > /dev/null 2>&1 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 } @@ -11042,7 +11069,8 @@ while true; do docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ - git pull origin main + + git pull ${gh_proxy}github.com/Calcium-Ion/new-api.git main > /dev/null 2>&1 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' \ @@ -11153,7 +11181,7 @@ while true; do docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ - git pull origin main + git pull ${gh_proxy}github.com/infiniflow/ragflow.git main > /dev/null 2>&1 cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d @@ -11347,7 +11375,7 @@ while true; do } - local docker_describe="オープンソースの AI チャットボット フレームワーク。WeChat、QQ、TG による AI の大規模モデルへのアクセスをサポート" + local docker_describe="オープンソース AI チャットボット フレームワーク。WeChat、QQ、TG による大規模 AI モデルへのアクセスをサポート" local docker_url="公式サイト紹介:https://astrbot.app/" local docker_use="echo \"ユーザー名: astrbot パスワード: astrbot\"" local docker_passwd="" @@ -11403,7 +11431,7 @@ while true; do } - local docker_describe="データを管理できるパスワードマネージャー" + local docker_describe="データを管理できるパスワード マネージャー" local docker_url="公式サイト紹介:https://bitwarden.com/" local docker_use="" local docker_passwd="" @@ -11637,7 +11665,7 @@ while true; do } - local docker_describe="Beszel轻量易用的服务器监控" + local docker_describe="Beszel は軽量で使いやすいサーバー監視です" local docker_url="公式サイト紹介:https://beszel.dev/zh/" local docker_use="" local docker_passwd="" @@ -11651,7 +11679,7 @@ while true; do local app_id="80" local app_name="リンクワーデンのブックマーク管理" - local app_text="タグ付け、検索、チーム コラボレーションをサポートする、オープン ソースの自己ホスト型ブックマーク管理プラットフォーム。" + local app_text="タグ付け、検索、チーム コラボレーションをサポートするオープンソースの自己ホスト型ブックマーク管理プラットフォーム。" local app_url="公式サイト:https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" @@ -11866,7 +11894,7 @@ while true; do 85|immich) local app_id="85" - local app_name="イミッチピクチャービデオマネージャー" + local app_name="イミッチ・ピクチャー・ビデオ・マネージャー" local app_text="高性能の自己ホスト型写真およびビデオ管理ソリューション。" local app_url="公式サイト紹介:https://github.com/immich-app/immich" local docker_name="immich_server" @@ -11960,7 +11988,7 @@ while true; do } - local docker_describe="リモートで映画や生放送を一緒に視聴するプログラム。同時視聴、ライブブロードキャスト、チャットなどの機能を提供します" + local docker_describe="リモートで映画や生放送を一緒に見るプログラム。同時視聴、ライブブロードキャスト、チャットなどの機能を提供します" local docker_url="公式サイト紹介:https://github.com/synctv-org/synctv" local docker_use="echo \"初期アカウントとパスワード: root。ログイン後、時間内にログイン パスワードを変更してください\"" local docker_passwd="" @@ -11990,7 +12018,7 @@ while true; do } - local docker_describe="オープンソースの無料の自作ライブ ブロードキャスト プラットフォーム" + local docker_describe="オープンソース、無料の自社構築ライブ ブロードキャスト プラットフォーム" local docker_url="公式サイト紹介:https://owncast.online" local docker_use="echo \"管理者ページにアクセスするには、アクセス アドレスの後に /admin を続けます\"" local docker_passwd="echo \"初期アカウント: admin 初期パスワード: abc123 ログイン後、時間内にログイン パスワードを変更してください\"" @@ -12336,7 +12364,7 @@ while true; do read -e -p "ネットワーク内のクライアントの数を入力してください (デフォルトは 5):" COUNT COUNT=${COUNT:-5} - read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0)。" NETWORK + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -12611,7 +12639,8 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - git pull origin main + + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d } @@ -12680,7 +12709,7 @@ while true; do docker_app_update() { cd /home/docker/umami/ && docker compose down --rmi all cd /home/docker/umami/ - git pull origin main + git pull ${gh_proxy}github.com/umami-software/umami.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml cd /home/docker/umami/ && docker compose up -d } @@ -12821,7 +12850,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/LangBot/docker && docker compose down --rmi all cd /home/docker/LangBot/ - git pull origin main + git pull ${gh_proxy}github.com/langbot-app/LangBot main > /dev/null 2>&1 sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml cd /home/docker/LangBot/docker/ && docker compose up -d } @@ -12891,7 +12920,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all cd /home/docker/karakeep/ - git pull origin main + git pull ${gh_proxy}github.com/karakeep-app/karakeep.git main > /dev/null 2>&1 sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml cd /home/docker/karakeep/docker/ && docker compose up -d } @@ -12924,7 +12953,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ } - local docker_describe="これは強力なマルチフォーマット ファイル変換ツールです (ドキュメント、画像、オーディオ、ビデオなどをサポート)。ドメイン名アクセスを追加することを強くお勧めします。" + local docker_describe="これは、強力なマルチフォーマット ファイル変換ツール (ドキュメント、画像、オーディオ、ビデオなどをサポート) です。ドメイン名アクセスを追加することを強くお勧めします。" local docker_url="プロジェクトアドレス: https://github.com/c4illin/ConvertX" local docker_use="" local docker_passwd="" @@ -13077,7 +13106,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then @@ -13103,7 +13133,7 @@ linux_work() { echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -13113,7 +13143,7 @@ linux_work() { 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}5. ${gl_bai}ワークスペースNo.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" @@ -13388,7 +13418,7 @@ linux_Settings() { echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}1. ${gl_bai}スクリプト起動のショートカットキーを設定する${gl_kjlan}2. ${gl_bai}ログインパスワードを変更する" echo -e "${gl_kjlan}3. ${gl_bai}ROOTパスワードログインモード${gl_kjlan}4. ${gl_bai}指定されたバージョンの Python をインストールします" - echo -e "${gl_kjlan}5. ${gl_bai}すべてのポートを開く${gl_kjlan}6. ${gl_bai}SSH接続ポートを変更する" + 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}------------------------" @@ -13643,8 +13673,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -13857,7 +13887,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得します + # 現在のシステム時刻を取得する local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -13872,7 +13902,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -14099,7 +14129,7 @@ EOF 1) read -e -p "新しい解析レコード形式を入力してください: 110.25.5.33 kejilion.pro:" addhost echo "$addhost" >> /etc/hosts - send_stats "ローカルホスト解像度が追加されました" + send_stats "ローカルホストの解像度が追加されました" ;; 2) @@ -14382,7 +14412,7 @@ EOF echo "ワンストップのシステムチューニング" echo "------------------------------------------------" echo "以下のコンテンツを運用・最適化していきます" - echo "1. システムアップデートソースを最適化し、システムを最新にアップデートします。" + echo "1. システムアップデートソースを最適化し、システムを最新の状態にアップデートします。" echo "2. システムジャンクファイルをクリーンアップする" echo -e "3. 仮想メモリを設定する${gl_huang}1G${gl_bai}" echo -e "4. SSH ポート番号を次のように設定します。${gl_huang}5522${gl_bai}" @@ -14482,7 +14512,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -14675,7 +14705,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -14695,7 +14725,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -14831,12 +14861,12 @@ while true; do 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}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}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}" @@ -14869,14 +14899,14 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; 5) clear - send_stats "クラスターを復元する" + send_stats "クラスタを復元する" echo "servers.py をアップロードし、任意のキーを押してアップロードを開始してください。" echo -e "をアップロードしてください${gl_huang}servers.py${gl_bai}ファイルに${gl_huang}/root/cluster/${gl_bai}復元完了!" break_end @@ -14953,7 +14983,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 月額 6.9 ドル 東京ソフトバンク 2 コア 1G メモリ 20G ハードドライブ 月額 1T トラフィック${gl_bai}" echo -e "${gl_bai}URL: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_kjlan}さらに人気のある VPS セール${gl_bai}" echo -e "${gl_bai}ウェブサイト:https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15159,7 +15189,7 @@ echo -e "${gl_kjlan}16. ${gl_bai}ゲームサーバー起動スクリプト集" 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}0. ${gl_bai}スクリプトを終了します" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "選択肢を入力してください:" choice @@ -15192,7 +15222,7 @@ done k_info() { -send_stats "k コマンドリファレンスの使用例" +send_stats "k コマンドのリファレンス例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 80b3e79f3..eecc5ec6f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.0" +sh_v="4.3.1" gl_hui='\e[37m' @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -1090,7 +1090,7 @@ iptables_panel() { echo "3. 모든 포트를 엽니다. 4. 모든 포트를 닫습니다." echo "------------------------" echo "5. IP 화이트리스트 6. IP 블랙리스트" - echo "7. 지정된 IP 삭제" + echo "7. 지정된 IP 지우기" echo "------------------------" echo "11. PING 허용 12. PING 비활성화" echo "------------------------" @@ -1259,7 +1259,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야 하는지 결정 +# 가상 메모리를 만들어야 하는지 확인 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1548,7 +1548,7 @@ certs_status() { echo -e "3. 네트워크 구성 문제 ➠ Cloudflare Warp 등 가상 네트워크를 사용하는 경우 일시적으로 종료하세요." echo -e "4. 방화벽 제한사항 ➠ 포트 80/443이 열려 있는지 확인하고 접근이 가능한지 확인하세요." echo -e "5. 신청 횟수가 한도를 초과했습니다. ➠ Let's Encrypt에는 주간 한도(5회/도메인 이름/주)가 있습니다." - echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하세요." + echo -e "6. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." echo "------------------------" echo "1. 다시 적용 2. 기존 인증서 가져오기 3. 인증서 없이 HTTP 액세스 사용 0. 종료" echo "------------------------" @@ -1848,7 +1848,7 @@ nginx_waf() { return 1 fi - # nginx 이미지를 확인하고 그에 따라 처리하세요. + # nginx 이미지를 확인하고 그에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -2021,7 +2021,7 @@ nginx_br() { return 1 fi - # nginx 이미지를 확인하고 그에 따라 처리하세요. + # nginx 이미지를 확인하고 그에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -2078,7 +2078,7 @@ nginx_zstd() { return 1 fi - # nginx 이미지를 확인하고 그에 따라 처리하세요. + # nginx 이미지를 확인하고 그에 따라 처리하십시오. if grep -q "kjlion/nginx:alpine" /home/web/docker-compose.yml; then docker exec nginx nginx -s reload else @@ -2334,7 +2334,7 @@ check_nginx_compression() { # zstd가 켜져 있고 주석 처리가 해제되어 있는지 확인하세요. (전체 줄은 zstd on으로 시작됩니다.) if grep -qE '^\s*zstd\s+on;' "$CONFIG_FILE"; then - zstd_status="zstd 압축이 활성화되었습니다" + zstd_status="zstd 압축이 켜져 있습니다" else zstd_status="" fi @@ -2514,7 +2514,7 @@ check_docker_app() { # if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then # check_docker="${gl_lv}가 ${gl_bai}를 설치했습니다." # else -# check_docker="${gl_hui}가 ${gl_bai}" 설치되지 않았습니다. +# check_docker="${gl_hui}이(가) ${gl_bai}" 설치되지 않았습니다. # fi # } @@ -2551,54 +2551,61 @@ done check_docker_image_update() { - local container_name=$1 + update_status="" - local country=$(curl -s ipinfo.io/country) - if [[ "$country" == "CN" ]]; then - update_status="" - return - fi + # 1. 지역점검 + local country=$(curl -s --max-time 2 ipinfo.io/country) + [[ "$country" == "CN" ]] && return - # 컨테이너의 생성 시간과 이미지 이름을 가져옵니다. + # 2. 로컬 미러 정보 얻기 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##*:} + [[ -z "$container_info" ]] && return - # 기본 태그는 최신입니다. - [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - - # 공식 이미지에 대한 지원 추가 - [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" + local container_created=$(echo "$container_info" | cut -d',' -f1) + local full_image_name=$(echo "$container_info" | cut -d',' -f2) + local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) + + # 3. 지능형 라우팅 판단 + if [[ "$full_image_name" == ghcr.io* ]]; then + # --- 시나리오 A: GitHub(ghcr.io)의 미러링 --- + # 웨어하우스 경로를 추출합니다(예: ghcr.io/onexru/oneimg -> onexru/oneimg). + local repo_path=$(echo "$full_image_name" | sed 's/ghcr.io\///' | cut -d':' -f1) + # 참고: ghcr.io의 API는 비교적 복잡합니다. 일반적으로 가장 빠른 방법은 GitHub Repo 릴리스를 확인하는 것입니다. + local api_url="https://api.github.com/repos/$repo_path/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) + + elif [[ "$full_image_name" == *"oneimg"* ]]; then + # --- 시나리오 B: 특별 지정(Docker Hub에서도 GitHub 릴리스로 판단하고 싶습니다) --- + local api_url="https://api.github.com/repos/onexru/oneimg/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) - # 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) + else + # --- 시나리오 C: 표준 Docker 허브 --- + local image_repo=${full_image_name%%:*} + local image_tag=${full_image_name##*:} + [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" + [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 획득한 시간을 확인 - 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) + local api_url="https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag" + local remote_date=$(curl -s "$api_url" | jq -r '.last_updated' 2>/dev/null) + fi - # 타임스탬프 비교 - if [[ $container_created_ts -lt $last_updated_ts ]]; then + # 4. 타임스탬프 비교 + if [[ -n "$remote_date" && "$remote_date" != "null" ]]; then + local remote_ts=$(date -d "$remote_date" +%s 2>/dev/null) + if [[ $container_created_ts -lt $remote_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 @@ -2676,7 +2683,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p tcp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 @@ -2695,7 +2702,7 @@ clear_container_rules() { iptables -D DOCKER-USER -p udp -d "$container_ip" -j DROP fi - # 지정된 IP를 허용하는 규칙을 지웁니다. + # 특정 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 @@ -2792,7 +2799,7 @@ clear_host_port_rules() { install iptables - # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p tcp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p tcp --dport "$port" -j DROP fi @@ -2808,7 +2815,7 @@ clear_host_port_rules() { fi - # 다른 모든 IP의 접근을 차단하는 규칙을 삭제하세요. + # 다른 모든 IP의 접근을 차단하는 규칙을 해제하세요. if iptables -C INPUT -p udp --dport "$port" -j DROP &>/dev/null; then iptables -D INPUT -p udp --dport "$port" -j DROP fi @@ -2895,7 +2902,7 @@ while true; do 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -3008,7 +3015,7 @@ docker_app_plus() { 1) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port + read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${docker_port}포트:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -3017,25 +3024,30 @@ docker_app_plus() { echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id + send_stats "$app_name설치하다" ;; + 2) docker_app_update - add_app_id + send_stats "$app_name고쳐 쓰다" ;; + 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - + send_stats "$app_name제거" ;; + 5) echo "${docker_name}도메인 이름 액세스 설정" send_stats "${docker_name}도메인 이름 액세스 설정" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" + ;; 6) echo "https://가 없는 도메인 이름 형식 example.com" @@ -3412,7 +3424,7 @@ ldnmp_Proxy() { check_ip_and_get_access_port "$yuming" if [ -z "$reverseproxy" ]; then - read -e -p "안티 세대 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy + read -e -p "세대 방지 IP를 입력하십시오(기본값은 로컬 IP 127.0.0.1로 설정하려면 Enter를 누르십시오)." reverseproxy reverseproxy=${reverseproxy:-127.0.0.1} fi @@ -3532,7 +3544,7 @@ list_stream_services() { proto="tcp" fi - # 접속 수신 IP:포트 + # 스플라이스 청취 IP:포트 local_addr="$local_ip:$listen_port" printf "%-22s %-14s %-21s %-20s\n" "$service_name" "$proto" "$local_addr" "$backend" @@ -3628,7 +3640,7 @@ stream_panel() { ldnmp_Proxy_backend_stream() { clear - webname="스트림 4계층 프록시-로드 밸런싱" + webname="스트리밍 4계층 프록시-로드 밸런싱" send_stats "설치하다$webname" echo "배포 시작$webname" @@ -4851,7 +4863,7 @@ add_sshkey() { -e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/* restart_ssh - echo -e "${gl_lv}ROOT 개인 키 로그인이 활성화되었습니다. ROOT 비밀번호 로그인이 비활성화되었습니다. 다시 연결이 적용됩니다.${gl_bai}" + echo -e "${gl_lv}ROOT 개인키 로그인이 활성화되어 있고, ROOT 비밀번호 로그인이 비활성화되어 재접속이 적용됩니다.${gl_bai}" } @@ -5279,7 +5291,7 @@ bbrv3() { apt update -y apt install -y linux-xanmod-x64v$version - echo "XanMod 커널이 업데이트되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 업데이트되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* @@ -5289,7 +5301,7 @@ bbrv3() { 2) apt purge -y 'linux-*xanmod1*' update-grub - echo "XanMod 커널이 제거되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 제거되었습니다. 재시작 후 적용" server_reboot ;; @@ -5306,7 +5318,7 @@ bbrv3() { echo "영상 소개: https://www.bilibili.com/video/BV14K421x7BS?t=0.1" echo "------------------------------------------------" echo "데비안/우분투만 지원" - echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화해 드리겠습니다." + echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." echo "------------------------------------------------" read -e -p "계속하시겠습니까? (예/아니요):" choice @@ -5343,7 +5355,7 @@ bbrv3() { bbr_on - echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 다시 시작한 후 적용" + echo "XanMod 커널이 설치되고 BBR3이 성공적으로 활성화되었습니다. 재시작 후 적용" rm -f /etc/apt/sources.list.d/xanmod-release.list rm -f check_x86-64_psabi.sh* server_reboot @@ -5432,7 +5444,7 @@ elrepo() { 2) dnf remove -y elrepo-release rpm -qa | grep elrepo | grep kernel | xargs rpm -e --nodeps - echo "elrepo 커널이 제거되었습니다. 다시 시작한 후 적용" + echo "elrepo 커널이 제거되었습니다. 재시작 후 적용" send_stats "Red Hat 커널 제거" server_reboot @@ -5785,7 +5797,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5992,7 +6004,7 @@ linux_trash() { clear echo -e "현재 휴지통${trash_status}" - echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 들어갑니다!" + echo -e "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 rm으로 삭제된 파일이 먼저 휴지통에 저장됩니다!" echo "------------------------------------------------" ls -l --color=auto "$TRASH_DIR" 2>/dev/null || echo "휴지통이 비어 있습니다." echo "------------------------" @@ -6231,7 +6243,7 @@ add_connection() { echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." local password_or_key="" while IFS= read -r line; do - # 입력이 빈 줄이고 키 내용에 이미 시작 부분이 포함되어 있으면 입력을 종료합니다. + # 입력이 빈 줄이고 키 내용에 이미 시작 부분이 포함된 경우 입력을 종료합니다. if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi @@ -6579,7 +6591,7 @@ add_task() { echo "주요 내용을 붙여넣으세요(붙인 후 Enter를 두 번 누르세요)." local password_or_key="" while IFS= read -r line; do - # 입력이 빈 줄이고 키 내용에 이미 시작 부분이 포함되어 있으면 입력을 종료합니다. + # 입력이 빈 줄이고 키 내용에 이미 시작 부분이 포함된 경우 입력을 종료합니다. if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi @@ -6720,7 +6732,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근할 수 있나요?" + echo "2. 원격 호스트에 접근 가능한지 여부" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -6947,7 +6959,7 @@ linux_tools() { 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}17. ${gl_bai}Git 버전 관리 시스템${gl_kjlan}18. ${gl_bai}오픈코드 AI 프로그래밍 도우미${gl_huang}★${gl_bai}" 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}뱀 미니게임" @@ -7106,6 +7118,17 @@ linux_tools() { send_stats "자식 설치" ;; + 18) + clear + cd ~ + curl -fsSL https://opencode.ai/install | bash + source ~/.bashrc + source ~/.profile + opencode + send_stats "오픈코드 설치" + ;; + + 21) clear install cmatrix @@ -7134,6 +7157,7 @@ linux_tools() { nsnake send_stats "nsnake 설치" ;; + 28) clear install ninvaders @@ -7159,6 +7183,8 @@ linux_tools() { clear send_stats "모두 제거" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git + opencode uninstall + rm -rf ~/.opencode ;; 41) @@ -7311,7 +7337,7 @@ docker_ssh_migration() { # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 건너뛰세요...${NC}" continue fi @@ -7408,7 +7434,7 @@ docker_ssh_migration() { mkdir -p "$original_path" tar -xzf "$BACKUP_DIR/compose_project_${project_name}.tar.gz" -C "$original_path" - echo -e "${GREEN}프로젝트 작성 [$project_name]가 다음 위치로 추출되었습니다.$original_path${NC}" + echo -e "${GREEN}프로젝트 작성 [$project_name]는 다음 위치로 추출되었습니다.$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7498,7 +7524,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "도커 마이그레이션" install jq - read -e -p "마이그레이션할 백업 디렉터리를 입력하십시오:" BACKUP_DIR + read -e -p "마이그레이션할 백업 디렉터리를 입력하세요." BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } read -e -p "대상 서버 IP:" TARGET_IP @@ -7510,7 +7536,7 @@ docker_ssh_migration() { echo -e "${YELLOW}백업 전송 중...${NC}" if [[ -z "$TARGET_PASS" ]]; then - # 키로 로그인 + # 키를 사용하여 로그인 scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7697,7 +7723,7 @@ linux_docker() { 3) send_stats "네트워크에 가입하세요" read -e -p "종료 네트워크 이름:" dockernetwork - read -e -p "이러한 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames + read -e -p "해당 컨테이너는 네트워크를 종료합니다(여러 컨테이너 이름을 공백으로 구분하세요)." dockernames for dockername in $dockernames; do docker network disconnect $dockernetwork $dockername @@ -7743,7 +7769,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8453,7 +8479,7 @@ linux_ldnmp() { echo "사용자 이름: 관리자" echo "비밀번호: 관리자" echo "------------------------" - echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용해주세요." + echo "로그인 시 오른쪽 상단에 빨간색 error0이 나타나는 경우, 다음 명령어를 사용하시기 바랍니다." echo "유니콘 숫자카드가 왜 이렇게 귀찮고 이런 문제가 있는지에 대해서도 너무 화가 납니다!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -8782,7 +8808,7 @@ linux_ldnmp() { echo "배포 시작$webname" add_yuming echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" - read -e -p "역방향 프록시 도메인 이름을 입력하세요." fandai_yuming + read -e -p "역방향 프록시 도메인 이름을 입력하세요:" fandai_yuming nginx_install_status wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-domain.conf @@ -9246,7 +9272,8 @@ if [ ! -d apps/.git ]; then git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi while true; do @@ -9269,7 +9296,7 @@ while true; do echo -e "${gl_kjlan}1. ${color1}파고다 패널 공식 버전${gl_kjlan}2. ${color2}aaPanel Pagoda 국제 버전" echo -e "${gl_kjlan}3. ${color3}1패널 차세대 관리 패널${gl_kjlan}4. ${color4}NginxProxyManager 시각화 패널" - echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 버전" + echo -e "${gl_kjlan}5. ${color5}OpenList 다중 저장소 파일 목록 프로그램${gl_kjlan}6. ${color6}Ubuntu 원격 데스크톱 웹 에디션" echo -e "${gl_kjlan}7. ${color7}나타 프로브 VPS 모니터링 패널${gl_kjlan}8. ${color8}QB 오프라인 BT 자기 다운로드 패널" echo -e "${gl_kjlan}9. ${color9}Poste.io 메일 서버 프로그램${gl_kjlan}10. ${color10}RocketChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}-------------------------" @@ -9309,7 +9336,7 @@ while true; do echo -e "${gl_kjlan}67. ${color67}ddns-go 동적 DNS 관리 도구${gl_huang}★${gl_bai} ${gl_kjlan}68. ${color68}AllinSSL 인증서 관리 플랫폼" echo -e "${gl_kjlan}69. ${color69}SFTPGo 파일 전송 도구${gl_kjlan}70. ${color70}AstrBot 챗봇 프레임워크" echo -e "${gl_kjlan}-------------------------" - echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워드 비밀번호 관리자${gl_huang}★${gl_bai}" + echo -e "${gl_kjlan}71. ${color71}Navidrome 개인 음악 서버${gl_kjlan}72. ${color72}비트워든 비밀번호 관리자${gl_huang}★${gl_bai}" echo -e "${gl_kjlan}73. ${color73}LibreTV 개인 영화${gl_kjlan}74. ${color74}MoonTV 개인 영화" echo -e "${gl_kjlan}75. ${color75}멜로디 음악 마법사${gl_kjlan}76. ${color76}온라인 DOS 오래된 게임" echo -e "${gl_kjlan}77. ${color77}Thunder 오프라인 다운로드 도구${gl_kjlan}78. ${color78}PandaWiki 지능형 문서 관리 시스템" @@ -9329,7 +9356,7 @@ while true; do echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}101. ${color101}AI 영상 생성 도구${gl_kjlan}102. ${color102}VoceChat 다자간 온라인 채팅 시스템" echo -e "${gl_kjlan}103. ${color103}Umami 웹사이트 통계 도구${gl_kjlan}104. ${color104}스트림 4계층 프록시 전달 도구" - echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawnix 오픈 소스 화이트보드 도구" + echo -e "${gl_kjlan}105. ${color105}쓰위안 노트${gl_kjlan}106. ${color106}Drawix 오픈 소스 화이트보드 도구" echo -e "${gl_kjlan}107. ${color107}PanSou 네트워크 디스크 검색${gl_kjlan}108. ${color108}LangBot 챗봇" echo -e "${gl_kjlan}109. ${color109}ZFile 온라인 네트워크 디스크${gl_kjlan}110. ${color110}Karakeep 북마크 관리" echo -e "${gl_kjlan}-------------------------" @@ -9337,7 +9364,7 @@ while true; do echo -e "${gl_kjlan}113. ${color113}파이어폭스 브라우저" echo -e "${gl_kjlan}-------------------------" echo -e "${gl_kjlan}타사 애플리케이션 목록" - echo -e "${gl_kjlan}귀하의 앱이 여기에 표시되기를 원하십니까? 개발자 가이드를 확인하세요.${gl_huang}https://dev.kejilion.sh/${gl_bai}" + echo -e "${gl_kjlan}귀하의 앱이 여기에 표시되기를 원하십니까? 개발자 가이드를 확인하세요:${gl_huang}https://dev.kejilion.sh/${gl_bai}" for f in "$HOME"/apps/*.conf; do [ -e "$f" ] || continue @@ -9559,7 +9586,7 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "네자 모니터링$check_docker $update_status" + echo -e "나타 모니터링$check_docker $update_status" echo "오픈 소스, 가볍고 사용하기 쉬운 서버 모니터링 및 운영 및 유지 관리 도구" echo "공식 웹사이트 구축 문서: https://nezha.wiki/guide/dashboard.html" if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "$docker_name"; then @@ -9639,7 +9666,7 @@ while true; do check_docker_image_update $docker_name clear - echo -e "우정$check_docker $update_status" + echo -e "우편 서비스$check_docker $update_status" echo "poste.io는 오픈 소스 메일 서버 솔루션입니다." echo "영상 소개: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" @@ -9671,7 +9698,7 @@ while true; do 1) setup_docker_dir check_disk_space 2 /home/docker - read -e -p "이메일 도메인 이름을 설정하세요(예: mail.yuming.com):" yuming + read -e -p "이메일 도메인 이름을 설정하십시오(예: mail.yuming.com):" yuming mkdir -p /home/docker echo "$yuming" > /home/docker/mail.txt echo "------------------------" @@ -9970,7 +9997,7 @@ while true; do } - local docker_describe="Speedtest 속도 테스트 패널은 다양한 테스트 기능을 갖춘 VPS 네트워크 속도 테스트 도구이며 VPS 인바운드 및 아웃바운드 트래픽을 실시간으로 모니터링할 수도 있습니다." + local docker_describe="Speedtest 속도 측정 패널은 다양한 테스트 기능을 갖춘 VPS 네트워크 속도 테스트 도구이며 VPS 인바운드 및 아웃바운드 트래픽을 실시간으로 모니터링할 수도 있습니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/wikihost-opensource/als" local docker_use="" local docker_passwd="" @@ -10189,12 +10216,12 @@ while true; do 23|memos) local app_id="23" local docker_name="memos" - local docker_img="ghcr.io/usememos/memos:latest" + local docker_img="neosmemo/memos:stable" local docker_port=8023 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always neosmemo/memos:stable } @@ -10405,7 +10432,7 @@ while true; do frooodle/s-pdf:latest } - local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 Docker를 사용하여 로컬로 호스팅되는 강력한 웹 기반 PDF 조작 도구입니다." + local docker_describe="이는 분할 병합, 변환, 재구성, 이미지 추가, 회전, 압축 등과 같은 PDF 파일에 대한 다양한 작업을 수행할 수 있는 docker를 사용하는 강력한 로컬 호스팅 웹 기반 PDF 조작 도구입니다." local docker_url="공식 웹사이트 소개:${gh_proxy}github.com/Stirling-Tools/Stirling-PDF" local docker_use="" local docker_passwd="" @@ -10999,7 +11026,7 @@ while true; do docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ - git pull origin main + git pull ${gh_proxy}github.com/langgenius/dify.git main > /dev/null 2>&1 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 } @@ -11042,7 +11069,8 @@ while true; do docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ - git pull origin main + + git pull ${gh_proxy}github.com/Calcium-Ion/new-api.git main > /dev/null 2>&1 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' \ @@ -11070,7 +11098,7 @@ while true; do local app_id="60" local app_name="JumpServer 오픈 소스 요새 머신" - local app_text="오픈소스 PAM(Privileged Access Management) 도구입니다. 이 프로그램은 포트 80을 사용하며 액세스를 위한 도메인 이름 추가를 지원하지 않습니다." + local app_text="오픈소스 권한 있는 액세스 관리(PAM) 도구입니다. 이 프로그램은 포트 80을 사용하며 액세스를 위한 도메인 이름 추가를 지원하지 않습니다." local app_url="공식 소개: https://github.com/jumpserver/jumpserver" local docker_name="jms_web" local docker_port="80" @@ -11153,7 +11181,7 @@ while true; do docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ - git pull origin main + git pull ${gh_proxy}github.com/infiniflow/ragflow.git main > /dev/null 2>&1 cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d @@ -11347,7 +11375,7 @@ while true; do } - local docker_describe="AI 대형 모델에 대한 WeChat, QQ 및 TG 액세스를 지원하는 오픈 소스 AI 챗봇 프레임워크" + local docker_describe="대규모 AI 모델에 대한 WeChat, QQ 및 TG 액세스를 지원하는 오픈 소스 AI 챗봇 프레임워크" local docker_url="공식 홈페이지 소개: https://astrbot.app/" local docker_use="echo \"사용자 이름: astrbot 비밀번호: astrbot\"" local docker_passwd="" @@ -11403,7 +11431,7 @@ while true; do } - local docker_describe="데이터를 제어할 수 있는 비밀번호 관리자" + local docker_describe="귀하의 데이터를 통제할 수 있는 비밀번호 관리자" local docker_url="공식 홈페이지 소개: https://bitwarden.com/" local docker_use="" local docker_passwd="" @@ -11651,7 +11679,7 @@ while true; do local app_id="80" local app_name="링크워든 북마크 관리" - local app_text="태그 지정, 검색 및 팀 협업을 지원하는 오픈 소스 자체 호스팅 북마크 관리 플랫폼입니다." + local app_text="태그 지정, 검색 및 팀 협업을 지원하는 오픈 소스, 자체 호스팅 북마크 관리 플랫폼입니다." local app_url="공식 홈페이지: https://linkwarden.app/" local docker_name="linkwarden-linkwarden-1" local docker_port="8080" @@ -11960,7 +11988,7 @@ while true; do } - local docker_describe="원격으로 영화와 생방송을 함께 시청할 수 있는 프로그램입니다. 동시 시청, 라이브 방송, 채팅 및 기타 기능을 제공합니다." + local docker_describe="영화와 생방송을 원격으로 함께 시청할 수 있는 프로그램입니다. 동시 시청, 라이브 방송, 채팅 및 기타 기능을 제공합니다." local docker_url="공식 홈페이지 소개: https://github.com/synctv-org/synctv" local docker_use="echo \"초기 계정 및 비밀번호: root. 로그인 후 시간에 맞춰 로그인 비밀번호를 변경하세요\"" local docker_passwd="" @@ -11993,7 +12021,7 @@ while true; do local docker_describe="오픈 소스, 자체 구축한 무료 라이브 방송 플랫폼" local docker_url="공식 홈페이지 소개 : https://owncast.online" local docker_use="echo \"접속 주소 뒤에는 /admin이 붙어서 관리자 페이지에 접근합니다\"" - local docker_passwd="echo \"초기 계정: admin 초기 비밀번호: abc123 로그인 후 시간 내에 로그인 비밀번호를 변경해주세요\"" + local docker_passwd="echo \"초기 계정 : admin 초기 비밀번호 : abc123 로그인 후 시간 내에 로그인 비밀번호를 변경해주세요\"" local app_size="1" docker_app @@ -12591,7 +12619,7 @@ while true; do 101|moneyprinterturbo) local app_id="101" local app_name="AI 영상 생성 도구" - local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 단편 동영상을 합성하는 도구입니다." + local app_text="MoneyPrinterTurbo는 AI 대형 모델을 사용하여 고화질 짧은 동영상을 합성하는 도구입니다." local app_url="공식 웹사이트: https://github.com/harry0703/MoneyPrinterTurbo" local docker_name="moneyprinterturbo" local docker_port="8101" @@ -12611,7 +12639,8 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - git pull origin main + + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d } @@ -12680,7 +12709,7 @@ while true; do docker_app_update() { cd /home/docker/umami/ && docker compose down --rmi all cd /home/docker/umami/ - git pull origin main + git pull ${gh_proxy}github.com/umami-software/umami.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml cd /home/docker/umami/ && docker compose up -d } @@ -12821,7 +12850,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/LangBot/docker && docker compose down --rmi all cd /home/docker/LangBot/ - git pull origin main + git pull ${gh_proxy}github.com/langbot-app/LangBot main > /dev/null 2>&1 sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml cd /home/docker/LangBot/docker/ && docker compose up -d } @@ -12891,7 +12920,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all cd /home/docker/karakeep/ - git pull origin main + git pull ${gh_proxy}github.com/karakeep-app/karakeep.git main > /dev/null 2>&1 sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml cd /home/docker/karakeep/docker/ && docker compose up -d } @@ -12939,7 +12968,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ local app_id="112" local docker_name="lucky" local docker_img="gdy666/lucky:v2" - # Lucky는 호스트 네트워크 모드를 사용하므로 여기의 포트는 기록/설명 참조용으로만 사용되며 실제로는 애플리케이션 자체에 의해 제어됩니다(기본값 16601). + # Lucky는 호스트 네트워크 모드를 사용하므로 여기서 포트는 기록/설명 참조용으로만 사용되며 실제로는 애플리케이션 자체에 의해 제어됩니다(기본값 16601). local docker_port=8112 docker_rum() { @@ -13077,7 +13106,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then @@ -13113,7 +13143,7 @@ linux_work() { 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}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" @@ -13215,7 +13245,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -13387,7 +13417,7 @@ linux_Settings() { 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}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 Python 버전을 설치합니다." + echo -e "${gl_kjlan}3. ${gl_bai}ROOT 비밀번호 로그인 모드${gl_kjlan}4. ${gl_bai}지정된 버전의 Python 설치" 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 전환" @@ -13643,8 +13673,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -13687,7 +13717,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다." + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; @@ -13857,7 +13887,7 @@ EOF # 현재 시스템 시간대 가져오기 local timezone=$(current_timezone) - # 현재 시스템 시간 가져오기 + # 현재 시스템 시간을 가져옵니다 local current_time=$(date +"%Y-%m-%d %H:%M:%S") # 시간대 및 시간 표시 @@ -13877,7 +13907,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -14836,7 +14866,7 @@ while true; do 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}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}" @@ -14953,7 +14983,7 @@ echo "------------------------" echo -e "${gl_zi}V.PS 월 6.9달러 도쿄 소프트뱅크 2코어 1G 메모리 20G 하드드라이브 월 1T 트래픽${gl_bai}" echo -e "${gl_bai}URL: 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_kjlan}더 인기 있는 VPS 거래${gl_bai}" echo -e "${gl_bai}홈페이지: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" @@ -15192,7 +15222,7 @@ done k_info() { -send_stats "k 명령 참조 사용 사례" +send_stats "k 명령 참조 예" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." diff --git a/tw/kejilion.sh b/tw/kejilion.sh index aa78f0041..8f711cf7e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.0" +sh_v="4.3.1" gl_hui='\e[37m' @@ -2551,54 +2551,61 @@ done check_docker_image_update() { - local container_name=$1 + update_status="" - local country=$(curl -s ipinfo.io/country) - if [[ "$country" == "CN" ]]; then - update_status="" - return - fi + # 1. 區域檢查 + local country=$(curl -s --max-time 2 ipinfo.io/country) + [[ "$country" == "CN" ]] && return - # 獲取容器的創建時間和鏡像名稱 + # 2. 獲取本地鏡像信息 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##*:} + [[ -z "$container_info" ]] && return - # 默認標籤為 latest - [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" - - # 添加對官方鏡像的支持 - [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" + local container_created=$(echo "$container_info" | cut -d',' -f1) + local full_image_name=$(echo "$container_info" | cut -d',' -f2) + local container_created_ts=$(date -d "$container_created" +%s 2>/dev/null) + + # 3. 智能路由判斷 + if [[ "$full_image_name" == ghcr.io* ]]; then + # --- 場景 A: 鏡像在 GitHub (ghcr.io) --- + # 提取倉庫路徑,例如 ghcr.io/onexru/oneimg -> onexru/oneimg + local repo_path=$(echo "$full_image_name" | sed 's/ghcr.io\///' | cut -d':' -f1) + # 注意:ghcr.io 的 API 比較複雜,通常最快的方法是查 GitHub Repo 的 Release + local api_url="https://api.github.com/repos/$repo_path/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) + + elif [[ "$full_image_name" == *"oneimg"* ]]; then + # --- 場景 B: 特殊指定 (即便在 Docker Hub,也想通過 GitHub Release 判斷) --- + local api_url="https://api.github.com/repos/onexru/oneimg/releases/latest" + local remote_date=$(curl -s "$api_url" | jq -r '.published_at' 2>/dev/null) - # 從 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) + else + # --- 場景 C: 標準 Docker Hub --- + local image_repo=${full_image_name%%:*} + local image_tag=${full_image_name##*:} + [[ "$image_repo" == "$image_tag" ]] && image_tag="latest" + [[ "$image_repo" != */* ]] && image_repo="library/$image_repo" - # 驗證獲取的時間 - 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) + local api_url="https://hub.docker.com/v2/repositories/$image_repo/tags/$image_tag" + local remote_date=$(curl -s "$api_url" | jq -r '.last_updated' 2>/dev/null) + fi - # 比較時間戳 - if [[ $container_created_ts -lt $last_updated_ts ]]; then + # 4. 時間戳對比 + if [[ -n "$remote_date" && "$remote_date" != "null" ]]; then + local remote_ts=$(date -d "$remote_date" +%s 2>/dev/null) + if [[ $container_created_ts -lt $remote_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 @@ -3017,25 +3024,30 @@ docker_app_plus() { echo "$docker_port" > "/home/docker/${docker_name}_port.conf" add_app_id + send_stats "$app_name安裝" ;; + 2) docker_app_update - add_app_id + send_stats "$app_name更新" ;; + 3) docker_app_uninstall rm -f /home/docker/${docker_name}_port.conf sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - + send_stats "$app_name解除安裝" ;; + 5) echo "${docker_name}域名訪問設置" send_stats "${docker_name}域名訪問設置" add_yuming ldnmp_Proxy ${yuming} 127.0.0.1 ${docker_port} block_container_port "$docker_name" "$ipv4_address" + ;; 6) echo "域名格式 example.com 不帶https://" @@ -6947,7 +6959,7 @@ linux_tools() { echo -e "${gl_kjlan}11. ${gl_bai}btop 現代化監控工具${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}ranger 文件管理工具" 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}nano 文本編輯器${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系統" + echo -e "${gl_kjlan}17. ${gl_bai}git 版本控制系統${gl_kjlan}18. ${gl_bai}opencode AI編程助手${gl_huang}★${gl_bai}" 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}貪吃蛇小遊戲" @@ -7106,6 +7118,17 @@ linux_tools() { send_stats "安裝git" ;; + 18) + clear + cd ~ + curl -fsSL https://opencode.ai/install | bash + source ~/.bashrc + source ~/.profile + opencode + send_stats "安裝opencode" + ;; + + 21) clear install cmatrix @@ -7134,6 +7157,7 @@ linux_tools() { nsnake send_stats "安裝nsnake" ;; + 28) clear install ninvaders @@ -7159,6 +7183,8 @@ linux_tools() { clear send_stats "全部卸載" remove htop iftop tmux ffmpeg btop ranger ncdu fzf cmatrix sl bastet nsnake ninvaders vim nano git + opencode uninstall + rm -rf ~/.opencode ;; 41) @@ -9246,7 +9272,8 @@ if [ ! -d apps/.git ]; then git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi while true; do @@ -10189,12 +10216,12 @@ while true; do 23|memos) local app_id="23" local docker_name="memos" - local docker_img="ghcr.io/usememos/memos:latest" + local docker_img="neosmemo/memos:stable" local docker_port=8023 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 + docker run -d --name memos -p ${docker_port}:5230 -v /home/docker/memos:/var/opt/memos --restart=always neosmemo/memos:stable } @@ -10999,7 +11026,7 @@ while true; do docker_app_update() { cd /home/docker/dify/docker/ && docker compose down --rmi all cd /home/docker/dify/ - git pull origin main + git pull ${gh_proxy}github.com/langgenius/dify.git main > /dev/null 2>&1 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 } @@ -11042,7 +11069,8 @@ while true; do docker_app_update() { cd /home/docker/new-api/ && docker compose down --rmi all cd /home/docker/new-api/ - git pull origin main + + git pull ${gh_proxy}github.com/Calcium-Ion/new-api.git main > /dev/null 2>&1 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' \ @@ -11153,7 +11181,7 @@ while true; do docker_app_update() { cd /home/docker/ragflow/docker/ && docker compose down --rmi all cd /home/docker/ragflow/ - git pull origin main + git pull ${gh_proxy}github.com/infiniflow/ragflow.git main > /dev/null 2>&1 cd /home/docker/ragflow/docker/ sed -i "s/- 80:80/- ${docker_port}:80/; /- 443:443/d" docker-compose.yml docker compose up -d @@ -12611,7 +12639,8 @@ while true; do docker_app_update() { cd /home/docker/MoneyPrinterTurbo/ && docker compose down --rmi all cd /home/docker/MoneyPrinterTurbo/ - git pull origin main + + git pull ${gh_proxy}github.com/harry0703/MoneyPrinterTurbo.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/MoneyPrinterTurbo/docker-compose.yml cd /home/docker/MoneyPrinterTurbo/ && docker compose up -d } @@ -12680,7 +12709,7 @@ while true; do docker_app_update() { cd /home/docker/umami/ && docker compose down --rmi all cd /home/docker/umami/ - git pull origin main + git pull ${gh_proxy}github.com/umami-software/umami.git main > /dev/null 2>&1 sed -i "s/8501:8501/${docker_port}:8501/g" /home/docker/umami/docker-compose.yml cd /home/docker/umami/ && docker compose up -d } @@ -12821,7 +12850,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/LangBot/docker && docker compose down --rmi all cd /home/docker/LangBot/ - git pull origin main + git pull ${gh_proxy}github.com/langbot-app/LangBot main > /dev/null 2>&1 sed -i "s/5300:5300/${docker_port}:5300/g" /home/docker/LangBot/docker/docker-compose.yaml cd /home/docker/LangBot/docker/ && docker compose up -d } @@ -12891,7 +12920,7 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ docker_app_update() { cd /home/docker/karakeep/docker/ && docker compose down --rmi all cd /home/docker/karakeep/ - git pull origin main + git pull ${gh_proxy}github.com/karakeep-app/karakeep.git main > /dev/null 2>&1 sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/karakeep/docker/docker-compose.yml cd /home/docker/karakeep/docker/ && docker compose up -d } @@ -13077,7 +13106,8 @@ discourse,yunsou,ahhhhfs,nsgame,gying" \ git clone ${gh_proxy}github.com/kejilion/apps.git else cd apps - git pull origin main > /dev/null 2>&1 + # git pull origin main > /dev/null 2>&1 + git pull ${gh_proxy}github.com/kejilion/apps.git main > /dev/null 2>&1 fi local custom_app="$HOME/apps/${sub_choice}.conf" if [ -f "$custom_app" ]; then From 62c53d2b66a11c0ba5393468c0337f6bfd8595d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:08:11 +0800 Subject: [PATCH 529/553] Add sleep after starting Docker and update commands Added sleep command after starting Docker and made minor adjustments to Docker commands. --- cn/kejilion.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 1aa1500c3..13859500f 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -413,7 +413,7 @@ fi enable docker start docker restart docker - +sleep 5 } @@ -3436,6 +3436,9 @@ ldnmp_Proxy() { wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf + docker exec nginx mkdir -p /var/cache/nginx/proxy/$yuming > /dev/null 2>&1 + docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy/$yuming > /dev/null 2>&1 + install_ssltls certs_status From c139e5a9e56a040d9bda2dbf080042ad36095c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:10:52 +0800 Subject: [PATCH 530/553] Remove redundant docker exec commands Removed unnecessary docker commands for cache directory creation and ownership. --- cn/kejilion.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 13859500f..839c385a3 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3436,9 +3436,6 @@ ldnmp_Proxy() { wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf - docker exec nginx mkdir -p /var/cache/nginx/proxy/$yuming > /dev/null 2>&1 - docker exec nginx chown -R nginx:nginx /var/cache/nginx/proxy/$yuming > /dev/null 2>&1 - install_ssltls certs_status From 2d5696079e44e5fb9edf5866af6667532153012c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:11:50 +0800 Subject: [PATCH 531/553] Add sleep before Docker restart and fix if statement Added a sleep command before restarting Docker and fixed an if statement. --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index e25c7b01a..1bbaaaed2 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -413,7 +413,7 @@ fi enable docker start docker restart docker - +sleep 5 } From 43c7c141c6a727f2ce6823aa1a78fabc4271dff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:46:11 +0800 Subject: [PATCH 532/553] Adjust sleep timing in kejilion.sh --- cn/kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 839c385a3..8c98f1650 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -413,7 +413,7 @@ fi enable docker start docker restart docker -sleep 5 + } @@ -1433,6 +1433,7 @@ install_certbot() { install_ssltls() { + sleep 5 check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 cd ~ From 1f312775695c5b0bf16683134b57801478ace382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:47:39 +0800 Subject: [PATCH 533/553] Add sleep command before SSL/TLS installation --- kejilion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 1bbaaaed2..60fc9660d 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -413,7 +413,7 @@ fi enable docker start docker restart docker -sleep 5 + } @@ -1433,6 +1433,7 @@ install_certbot() { install_ssltls() { + sleep 5 check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 cd ~ From 8ae9f3dc283ce46a40499ee04930de79b3bd5496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:00:58 +0800 Subject: [PATCH 534/553] Refactor install_ssltls function for efficiency Removed sleep and check_port commands before stopping nginx. Adjusted iptables rule handling and ensured proper execution of certbot command. --- cn/kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8c98f1650..2940f2ad6 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1433,8 +1433,6 @@ install_certbot() { install_ssltls() { - sleep 5 - check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 cd ~ @@ -1454,6 +1452,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi From cbd361daa43254404d25ca9617315c29032186d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:02:42 +0800 Subject: [PATCH 535/553] Refactor install_ssltls function for efficiency Removed sleep and check_port commands from install_ssltls function. Adjusted iptables command and ensured proper execution of docker run for certbot. --- kejilion.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 60fc9660d..a09b98ecd 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1433,8 +1433,6 @@ install_certbot() { install_ssltls() { - sleep 5 - check_port > /dev/null 2>&1 docker stop nginx > /dev/null 2>&1 cd ~ @@ -1454,6 +1452,7 @@ install_ssltls() { if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT fi + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d "$yuming" --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa fi fi From 07a529b7a2be3c5d7cf88329640f8f4ff85443d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 16:57:47 +0800 Subject: [PATCH 536/553] Create letsencrypt directory in install_ldnmp_conf Added 'web/letsencrypt' directory to the installation script. --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index a09b98ecd..7934100da 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1303,7 +1303,7 @@ ldnmp_v() { install_ldnmp_conf() { # 创建必要的目录和文件 - cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.d web/redis web/log/nginx && touch web/docker-compose.yml + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.d web/redis web/log/nginx web/letsencrypt && 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 From 4d431780c65adec1e6d3dda22b3914641dd8c2f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 16:58:28 +0800 Subject: [PATCH 537/553] Add letsencrypt directory in install_ldnmp_conf function --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 2940f2ad6..cb604269e 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1303,7 +1303,7 @@ ldnmp_v() { install_ldnmp_conf() { # 创建必要的目录和文件 - cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.d web/redis web/log/nginx && touch web/docker-compose.yml + cd /home && mkdir -p web/html web/mysql web/certs web/conf.d web/stream.d web/redis web/log/nginx web/letsencrypt && 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 From 0b2d3ccbbc0e997f34c91eb70a8d054368c2bf9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 17:04:40 +0800 Subject: [PATCH 538/553] Change condition in update_docker_compose_with_db_creds --- cn/kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index cb604269e..8af1295ad 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1325,7 +1325,7 @@ update_docker_compose_with_db_creds() { cp /home/web/docker-compose.yml /home/web/docker-compose1.yml - if ! grep -q "stream" /home/web/docker-compose.yml; then + if ! grep -q "letsencrypt" /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:]') From d9985f2e9970cb2a2fafe7cddfc5905cb1e27a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 17:05:40 +0800 Subject: [PATCH 539/553] Change grep condition to check for 'letsencrypt' --- kejilion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kejilion.sh b/kejilion.sh index 7934100da..ea4e5d3e9 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1325,7 +1325,7 @@ update_docker_compose_with_db_creds() { cp /home/web/docker-compose.yml /home/web/docker-compose1.yml - if ! grep -q "stream" /home/web/docker-compose.yml; then + if ! grep -q "letsencrypt" /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:]') From 35b3838b747631cbf43012e87fb8e6344dace39b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:12:31 +0800 Subject: [PATCH 540/553] Enhance auto certificate renewal script Added environment checks and improved renewal logic. --- auto_cert_renewal.sh | 86 ++++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 23 deletions(-) diff --git a/auto_cert_renewal.sh b/auto_cert_renewal.sh index 97cd09087..660faab9b 100644 --- a/auto_cert_renewal.sh +++ b/auto_cert_renewal.sh @@ -23,39 +23,79 @@ for cert_file in $certs_directory*_cert.pem; do # 计算距离过期还有几天 days_until_expiry=$(( ($expiration_timestamp - $current_timestamp) / 86400 )) - # 检查是否需要续签(在满足续签条件的情况下) if [ $days_until_expiry -le $days_before_expiry ]; then + echo "证书将在${days_before_expiry}天内过期,正在进行自动续签。" - - docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n - docker stop nginx > /dev/null 2>&1 + # 1. 检查目录是否存在 + docker exec nginx [ -d /var/www/letsencrypt ] && DIR_OK=true || DIR_OK=false - if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then - iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT - fi + # 2. 检查配置文件是否包含关键字 + # 假设你的配置文件在容器内的 /etc/nginx/conf.d/ 目录下(这是 Nginx 容器的默认路径) + docker exec nginx grep -q "letsencrypt" /etc/nginx/conf.d/$yuming.conf && CONF_OK=true || CONF_OK=false + + # 输出结果 + echo "--- 自动化环境检测报告 ---" + if [ "$DIR_OK" = true ]; then echo "✅ 目录检测:/var/www/letsencrypt 存在"; else echo "❌ 目录检测:/var/www/letsencrypt 不存在"; fi + if [ "$CONF_OK" = true ]; then echo "✅ 配置检测:$yuming.conf 已包含续签规则"; else echo "❌ 配置检测:$yuming.conf 未发现 letsencrypt 字样"; fi + + if [ "$DIR_OK" = true ] && [ "$CONF_OK" = true ]; then + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n + + docker run --rm \ + -v "/etc/letsencrypt:/etc/letsencrypt" \ + -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ + -v "/var/www/letsencrypt:/var/www/letsencrypt" \ + certbot/certbot certonly \ + --webroot \ + -w /var/www/letsencrypt \ + -d "lkyjp.kejilion.xyz" \ + --email your@email.com \ + --agree-tos \ + --no-eff-email \ + --key-type ecdsa \ + --force-renewal + + 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 + + openssl rand -out /home/web/certs/ticket12.key 48 + openssl rand -out /home/web/certs/ticket13.key 80 - # iptables -P INPUT ACCEPT - # iptables -P FORWARD ACCEPT - # iptables -P OUTPUT ACCEPT - # iptables -F + docker exec nginx nginx -t && docker exec nginx nginx -s reload - # ip6tables -P INPUT ACCEPT - # ip6tables -P FORWARD ACCEPT - # ip6tables -P OUTPUT ACCEPT - # ip6tables -F + else + docker run --rm -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot delete --cert-name "$yuming" -n - docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d $yuming --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + docker stop nginx > /dev/null 2>&1 - 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 + if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + fi - openssl rand -out /home/web/certs/ticket12.key 48 - openssl rand -out /home/web/certs/ticket13.key 80 - - docker start nginx > /dev/null 2>&1 + # 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 + + docker run --rm -p 80:80 -v /etc/letsencrypt/:/etc/letsencrypt certbot/certbot certonly --standalone -d $yuming --email your@email.com --agree-tos --no-eff-email --force-renewal --key-type ecdsa + + 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 + + openssl rand -out /home/web/certs/ticket12.key 48 + openssl rand -out /home/web/certs/ticket13.key 80 + + docker start nginx > /dev/null 2>&1 + + fi echo "证书已成功续签。" else From cffc8032054ed10fe4c2cce641b355921274ffaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:14:47 +0800 Subject: [PATCH 541/553] Change volume mount path for Certbot Docker run --- auto_cert_renewal.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto_cert_renewal.sh b/auto_cert_renewal.sh index 660faab9b..758d76d01 100644 --- a/auto_cert_renewal.sh +++ b/auto_cert_renewal.sh @@ -45,7 +45,7 @@ for cert_file in $certs_directory*_cert.pem; do docker run --rm \ -v "/etc/letsencrypt:/etc/letsencrypt" \ -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ - -v "/var/www/letsencrypt:/var/www/letsencrypt" \ + -v "/home/web/letsencrypt:/var/www/letsencrypt" \ certbot/certbot certonly \ --webroot \ -w /var/www/letsencrypt \ From c215d1557ab9e240ace8ad6c43786970d3a9c21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Mon, 12 Jan 2026 18:24:39 +0800 Subject: [PATCH 542/553] Update domain name for certbot command --- auto_cert_renewal.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto_cert_renewal.sh b/auto_cert_renewal.sh index 758d76d01..287a3fe9d 100644 --- a/auto_cert_renewal.sh +++ b/auto_cert_renewal.sh @@ -49,7 +49,7 @@ for cert_file in $certs_directory*_cert.pem; do certbot/certbot certonly \ --webroot \ -w /var/www/letsencrypt \ - -d "lkyjp.kejilion.xyz" \ + -d "$yuming" \ --email your@email.com \ --agree-tos \ --no-eff-email \ From ad0a3aef45da227008e55bee6e15b9013c8fa7ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:36:45 +0800 Subject: [PATCH 543/553] Update shell version and improve docker exec command --- kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index ea4e5d3e9..127f66e2c 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.1" +sh_v="4.3.2" gl_hui='\e[37m' @@ -546,7 +546,7 @@ while true; do 11) send_stats "进入容器" read -e -p "请输入容器名: " dockername - docker exec $dockername /bin/sh + docker exec -it $dockername /bin/sh break_end ;; 12) From 04cbf85418376343d2e4d213eadea17f18ddab97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:37:26 +0800 Subject: [PATCH 544/553] Update shell version and improve docker exec command --- cn/kejilion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 8af1295ad..7c3d9c006 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1,5 +1,5 @@ #!/bin/bash -sh_v="4.3.1" +sh_v="4.3.2" gl_hui='\e[37m' @@ -546,7 +546,7 @@ while true; do 11) send_stats "进入容器" read -e -p "请输入容器名: " dockername - docker exec $dockername /bin/sh + docker exec -it $dockername /bin/sh break_end ;; 12) From 92d281c00e4691734a2da1518299b90e462e7581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:40:27 +0800 Subject: [PATCH 545/553] Update kejilion_sh_log.txt for version 4.3.2 Added new features and fixes in version 4.3.2. --- kejilion_sh_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kejilion_sh_log.txt b/kejilion_sh_log.txt index 231f3143e..2945a0ab5 100644 --- a/kejilion_sh_log.txt +++ b/kejilion_sh_log.txt @@ -1399,4 +1399,8 @@ SSL申请失败后追加导入已有证书选项,你可以导入域名有效 应用市场优化部分项目的git更新机制,解决国内拉取卡顿的问题。 基础工具中添加了目前流行的opencode编程AI助手可以在服务器上直接AI可视化开发编程。 ------------------------ +2026-01-13 v4.3.2 +对LDNMP站点和NGINX反代站点增加不停机续签域名SSL证书机制,老配置还是走端口申请证书。 +修复docker管理器无法进入容器的问题。 +------------------------ From bde21276a1b476ee0d6cf24bd09333f56ff5cb8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 11:12:59 +0800 Subject: [PATCH 546/553] Disable iptables rules for HTTP traffic Comment out iptables rules for port 80 acceptance. --- auto_cert_renewal.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/auto_cert_renewal.sh b/auto_cert_renewal.sh index 287a3fe9d..976d0ff40 100644 --- a/auto_cert_renewal.sh +++ b/auto_cert_renewal.sh @@ -70,9 +70,9 @@ for cert_file in $certs_directory*_cert.pem; do docker stop nginx > /dev/null 2>&1 - if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then - iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT - fi + # if ! iptables -C INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null; then + # iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT + # fi # iptables -P INPUT ACCEPT # iptables -P FORWARD ACCEPT From 014f4509ededb9e75256bb10c39f5499b47c22c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 11:15:05 +0800 Subject: [PATCH 547/553] Remove volume mapping for letsencrypt data Removed volume mapping for /var/lib/letsencrypt in certbot command. --- auto_cert_renewal.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/auto_cert_renewal.sh b/auto_cert_renewal.sh index 976d0ff40..baf58087f 100644 --- a/auto_cert_renewal.sh +++ b/auto_cert_renewal.sh @@ -44,7 +44,6 @@ for cert_file in $certs_directory*_cert.pem; do docker run --rm \ -v "/etc/letsencrypt:/etc/letsencrypt" \ - -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ -v "/home/web/letsencrypt:/var/www/letsencrypt" \ certbot/certbot certonly \ --webroot \ From ebfffccb2f1abd25730135b1fe87a07417c11f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:06:55 +0800 Subject: [PATCH 548/553] Refactor cn/kejilion.sh by removing blank lines Removed unnecessary blank lines and cleaned up code formatting. --- cn/kejilion.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 7c3d9c006..38aabe80a 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1425,15 +1425,9 @@ install_certbot() { } - - - - - - - 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" From ab1b7daeb38768bd3d0b614742986464abb8fdd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:07:55 +0800 Subject: [PATCH 549/553] Refactor install_ssltls function and clean up code --- kejilion.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 127f66e2c..2b319bdc2 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1425,15 +1425,9 @@ install_certbot() { } - - - - - - - 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" From e1df8328d02cf916464725294c32fe09149671d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:21:17 +0800 Subject: [PATCH 550/553] Delete domain configuration on exit Remove configuration file for the domain when exiting. --- cn/kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 38aabe80a..9944f2872 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -1611,6 +1611,7 @@ certs_status() { ;; *) send_stats "退出申请" + rm -f /home/web/conf.d/${yuming}.conf exit ;; esac From b8ed9f48ac94afe05dc4ff04497d88341ff16d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:21:55 +0800 Subject: [PATCH 551/553] Delete domain configuration on exit Remove configuration file for the specified domain when exiting. --- kejilion.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/kejilion.sh b/kejilion.sh index 2b319bdc2..7114f347a 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -1611,6 +1611,7 @@ certs_status() { ;; *) send_stats "退出申请" + rm -f /home/web/conf.d/${yuming}.conf exit ;; esac From b4b826c7b3bb4ae92463eda63da2c9166d5e2a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:32:21 +0800 Subject: [PATCH 552/553] Reorder SSL installation and certificate status checks Reorder install_ssltls and certs_status calls to ensure they are executed after modifying the configuration files. --- kejilion.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/kejilion.sh b/kejilion.sh index 7114f347a..7a9c5c744 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -3431,10 +3431,6 @@ ldnmp_Proxy() { wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf - install_ssltls - certs_status - - 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 @@ -3450,6 +3446,9 @@ ldnmp_Proxy() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + install_ssltls + certs_status + update_nginx_listen_port "$yuming" "$access_port" nginx_http_on @@ -3480,10 +3479,6 @@ ldnmp_Proxy_backend() { wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf - - install_ssltls - certs_status - 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 @@ -3497,6 +3492,9 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + install_ssltls + certs_status + update_nginx_listen_port "$yuming" "$access_port" nginx_http_on From 4ecc70bd7babd14c1ddd0bf698e62395e1093887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=91=E6=8A=80lion?= <131984541+kejilion@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:33:19 +0800 Subject: [PATCH 553/553] Reorganize SSL installation and certificate status checks Reorder install_ssltls and certs_status calls to ensure they are executed after configuration updates. --- cn/kejilion.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cn/kejilion.sh b/cn/kejilion.sh index 9944f2872..323bb77a9 100644 --- a/cn/kejilion.sh +++ b/cn/kejilion.sh @@ -3431,10 +3431,6 @@ ldnmp_Proxy() { wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf - install_ssltls - certs_status - - 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 @@ -3450,6 +3446,9 @@ ldnmp_Proxy() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf sed -i '/remote_addr/d' /home/web/conf.d/$yuming.conf + install_ssltls + certs_status + update_nginx_listen_port "$yuming" "$access_port" nginx_http_on @@ -3480,10 +3479,6 @@ ldnmp_Proxy_backend() { wget -O /home/web/conf.d/map.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/map.conf wget -O /home/web/conf.d/$yuming.conf ${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/reverse-proxy-backend.conf - - install_ssltls - certs_status - 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 @@ -3497,6 +3492,9 @@ ldnmp_Proxy_backend() { sed -i "s/# 动态添加/$upstream_servers/g" /home/web/conf.d/$yuming.conf + install_ssltls + certs_status + update_nginx_listen_port "$yuming" "$access_port" nginx_http_on